Skip to content

Commit

Permalink
Release 4.0.4
Browse files Browse the repository at this point in the history
  • Loading branch information
gwanglst committed Jan 9, 2024
1 parent 9d9cde9 commit 46c448d
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 13 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
2024-01-08
- 4.0.4
- Fix DCID validation.
- Fix CPU spinning due to pending STREAM_BLOCKED frame.

2023-12-25
- 4.0.3
- Fix session resumption bug introduced in 4.0.2.
Expand Down
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
# The short X.Y version
version = u'4.0'
# The full version, including alpha/beta/rc tags
release = u'4.0.3'
release = u'4.0.4'


# -- General configuration ---------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion include/lsquic.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ extern "C" {

#define LSQUIC_MAJOR_VERSION 4
#define LSQUIC_MINOR_VERSION 0
#define LSQUIC_PATCH_VERSION 3
#define LSQUIC_PATCH_VERSION 4

/**
* Engine flags:
Expand Down
44 changes: 33 additions & 11 deletions src/liblsquic/lsquic_full_conn_ietf.c
Original file line number Diff line number Diff line change
Expand Up @@ -755,6 +755,7 @@ blocked_ka_alarm_expired (enum alarm_id al_id, void *ctx,
struct ietf_full_conn *const conn = (struct ietf_full_conn *) ctx;
struct lsquic_stream *stream;
struct lsquic_hash_elem *el;
int has_send_flag;

if (lsquic_conn_cap_avail(&conn->ifc_pub.conn_cap) == 0)
{
Expand All @@ -769,12 +770,18 @@ blocked_ka_alarm_expired (enum alarm_id al_id, void *ctx,
stream = lsquic_hashelem_getdata(el);
if (lsquic_stream_is_blocked(stream))
{
if (!(stream->sm_qflags & SMQF_SENDING_FLAGS))
TAILQ_INSERT_TAIL(&conn->ifc_pub.sending_streams, stream,
next_send_stream);
has_send_flag = (stream->sm_qflags & SMQF_SENDING_FLAGS);
stream->sm_qflags |= SMQF_SEND_BLOCKED;
LSQ_DEBUG("set SEND_BLOCKED flag on stream %"PRIu64, stream->id);
return;
if (!lsquic_sendctl_gen_stream_blocked_frame(
stream->conn_pub->send_ctl, stream))
{
LSQ_DEBUG("failed to send STREAM_BLOCKED frame for"
" stream %"PRIu64 " immedately, postpone.", stream->id);
if (!has_send_flag)
TAILQ_INSERT_TAIL(&conn->ifc_pub.sending_streams, stream,
next_send_stream);
}
}
}
}
Expand Down Expand Up @@ -7387,6 +7394,7 @@ process_regular_packet (struct ietf_full_conn *conn,
enum was_missing was_missing;
int is_rechist_empty;
unsigned char saved_path_id;
int is_dcid_changed;

if (HETY_RETRY == packet_in->pi_header_type)
return process_retry_packet(conn, packet_in);
Expand Down Expand Up @@ -7489,16 +7497,31 @@ process_regular_packet (struct ietf_full_conn *conn,
}
}

is_dcid_changed = !LSQUIC_CIDS_EQ(CN_SCID(&conn->ifc_conn),
&packet_in->pi_dcid);
if (pns == PNS_INIT)
conn->ifc_conn.cn_esf.i->esfi_set_iscid(conn->ifc_conn.cn_enc_session,
packet_in);
else if (pns == PNS_HSK)
else
{
if ((conn->ifc_flags & (IFC_SERVER | IFC_IGNORE_INIT)) == IFC_SERVER)
ignore_init(conn);
lsquic_send_ctl_maybe_calc_rough_rtt(&conn->ifc_send_ctl, pns - 1);
if (is_dcid_changed)
{
if (LSQUIC_CIDS_EQ(&conn->ifc_conn.cn_cces[0].cce_cid,
&packet_in->pi_dcid)
&& !(conn->ifc_conn.cn_cces[0].cce_flags & CCE_SEQNO))
{
ABORT_QUIETLY(0, TEC_PROTOCOL_VIOLATION,
"protocol violation detected bad dcid");
return -1;
}
}
if (pns == PNS_HSK)
{
if ((conn->ifc_flags & (IFC_SERVER | IFC_IGNORE_INIT)) == IFC_SERVER)
ignore_init(conn);
lsquic_send_ctl_maybe_calc_rough_rtt(&conn->ifc_send_ctl, pns - 1);
}
}

EV_LOG_PACKET_IN(LSQUIC_LOG_CONN_ID, packet_in);

is_rechist_empty = lsquic_rechist_is_empty(&conn->ifc_rechist[pns]);
Expand All @@ -7522,8 +7545,7 @@ process_regular_packet (struct ietf_full_conn *conn,
<< packet_in->pi_path_id);
}
}
else if (!LSQUIC_CIDS_EQ(CN_SCID(&conn->ifc_conn),
&packet_in->pi_dcid))
else if (is_dcid_changed)
{
if (0 != on_dcid_change(conn, &packet_in->pi_dcid))
return -1;
Expand Down
6 changes: 6 additions & 0 deletions src/liblsquic/lsquic_stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -2437,6 +2437,12 @@ lsquic_stream_dispatch_write_events (lsquic_stream_t *stream)
else
stream_dispatch_write_events_loop(stream);

if ((stream->sm_qflags & SMQF_SEND_BLOCKED) &&
(stream->sm_bflags & SMBF_IETF))
{
lsquic_sendctl_gen_stream_blocked_frame(stream->conn_pub->send_ctl, stream);
}

/* Progress means either flags or offsets changed: */
progress = !((stream->sm_qflags & SMQF_WRITE_Q_FLAGS) == q_flags &&
stream->tosend_off == tosend_off &&
Expand Down

0 comments on commit 46c448d

Please sign in to comment.