Release 2.24.1

- [API] Allow use of ea_get_ssl_ctx() on the client (optional).  PR #186.
- [BUGFIX] Expand datagram with ack-eliciting Initial to 1200 bytes
  after connection promotion.
- [BUGFIX] Discard CRYPTO frames from lower encryption levels after
  connection promotion.
- [BUGFIX] Cancel path response if path could not be initialized.
This commit is contained in:
Dmitri Tikhonov 2020-11-04 10:27:50 -05:00
parent b0dd78b841
commit e85d2854d3
6 changed files with 40 additions and 8 deletions

View File

@ -1,3 +1,12 @@
2020-11-04
- 2.24.1
- [API] Allow use of ea_get_ssl_ctx() on the client (optional). PR #186.
- [BUGFIX] Expand datagram with ack-eliciting Initial to 1200 bytes
after connection promotion.
- [BUGFIX] Discard CRYPTO frames from lower encryption levels after
connection promotion.
- [BUGFIX] Cancel path response if path could not be initialized.
2020-10-28
- 2.24.0
- [FEATURE] QUIC and HTTP/3 Internet Draft 31 support. Drop ID-30

View File

@ -12,6 +12,7 @@ to the LiteSpeed QUIC and HTTP/3 Library:
- Rahul Jadhav -- Android support
- Victor Stewart -- Generate SCIDs API (connection ID steering)
- Aaron France -- Shared library support and Lisp bindings
- Suma Subbarao -- Use callback to supply client's SSL_CTX
Thank you!

View File

@ -26,7 +26,7 @@ author = u'LiteSpeed Technologies'
# The short X.Y version
version = u'2.24'
# The full version, including alpha/beta/rc tags
release = u'2.24.0'
release = u'2.24.1'
# -- General configuration ---------------------------------------------------

View File

@ -25,7 +25,7 @@ extern "C" {
#define LSQUIC_MAJOR_VERSION 2
#define LSQUIC_MINOR_VERSION 24
#define LSQUIC_PATCH_VERSION 0
#define LSQUIC_PATCH_VERSION 1
/**
* Engine flags:

View File

@ -5357,6 +5357,7 @@ process_crypto_frame_server (struct ietf_full_conn *conn,
struct lsquic_packet_in *packet_in, const unsigned char *p, size_t len)
{
struct stream_frame stream_frame;
enum enc_level enc_level;
int parsed_len;
parsed_len = conn->ifc_conn.cn_pf->pf_parse_crypto_frame(p, len,
@ -5364,9 +5365,19 @@ process_crypto_frame_server (struct ietf_full_conn *conn,
if (parsed_len < 0)
return 0;
enc_level = lsquic_packet_in_enc_level(packet_in);
EV_LOG_CRYPTO_FRAME_IN(LSQUIC_LOG_CONN_ID, &stream_frame, enc_level);
LSQ_DEBUG("Got CRYPTO frame for enc level #%u", enc_level);
if (!(conn->ifc_flags & IFC_PROC_CRYPTO))
{
LSQ_DEBUG("discard %d-byte CRYPTO frame", parsed_len);
LSQ_DEBUG("discard %d-byte CRYPTO frame: handshake has been confirmed",
parsed_len);
return (unsigned) parsed_len;
}
if (enc_level < ENC_LEV_INIT)
{ /* Must be dup */
LSQ_DEBUG("discard %d-byte CRYPTO frame on level %s", parsed_len,
lsquic_enclev2str[enc_level]);
return (unsigned) parsed_len;
}
@ -6581,7 +6592,7 @@ init_new_path (struct ietf_full_conn *conn, struct conn_path *path,
}
static void
static int
on_new_or_unconfirmed_path (struct ietf_full_conn *conn,
const struct lsquic_packet_in *packet_in)
{
@ -6608,7 +6619,7 @@ on_new_or_unconfirmed_path (struct ietf_full_conn *conn,
{
ABORT_ERROR("DCID %"CID_FMT" not found on new path",
CID_BITS(&packet_in->pi_dcid));
return;
return -1;
}
dcid_changed = !(cce->cce_flags & CCE_USED);
@ -6620,7 +6631,7 @@ on_new_or_unconfirmed_path (struct ietf_full_conn *conn,
if (0 == init_new_path(conn, path, dcid_changed))
path->cop_flags |= COP_INITIALIZED;
else
return;
return -1;
conn->ifc_send_flags |= SF_SEND_PATH_CHAL << packet_in->pi_path_id;
LSQ_DEBUG("scheduled return path challenge on path %hhu",
@ -6638,6 +6649,7 @@ on_new_or_unconfirmed_path (struct ietf_full_conn *conn,
path->cop_cce_idx = cce - lconn->cn_cces;
cce->cce_flags |= CCE_USED;
LOG_SCIDS(conn);
return 0;
}
@ -7157,7 +7169,15 @@ process_regular_packet (struct ietf_full_conn *conn,
if (saved_path_id == conn->ifc_cur_path_id)
{
if (conn->ifc_cur_path_id != packet_in->pi_path_id)
on_new_or_unconfirmed_path(conn, packet_in);
{
if (0 != on_new_or_unconfirmed_path(conn, packet_in))
{
LSQ_DEBUG("path %hhu invalid, cancel any path response "
"on it", packet_in->pi_path_id);
conn->ifc_send_flags &= ~(SF_SEND_PATH_RESP
<< packet_in->pi_path_id);
}
}
else if (!LSQUIC_CIDS_EQ(CN_SCID(&conn->ifc_conn),
&packet_in->pi_dcid))
{

View File

@ -1943,7 +1943,9 @@ lsquic_send_ctl_next_packet_to_send (struct lsquic_send_ctl *ctl,
packet_out->po_lflags &= ~POL_LIMITED;
if (UNLIKELY(packet_out->po_header_type == HETY_INITIAL)
&& !(ctl->sc_conn_pub->lconn->cn_flags & LSCONN_SERVER)
&& (!(ctl->sc_conn_pub->lconn->cn_flags & LSCONN_SERVER)
|| (packet_out->po_frame_types
& IQUIC_FRAME_ACKABLE_MASK))
&& size < 1200)
{
send_ctl_maybe_zero_pad(ctl, packet_out, 1200 - size);