mirror of
https://gitea.invidious.io/iv-org/litespeed-quic.git
synced 2024-08-15 00:53:43 +00:00
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:
parent
b0dd78b841
commit
e85d2854d3
6 changed files with 40 additions and 8 deletions
|
@ -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
|
2020-10-28
|
||||||
- 2.24.0
|
- 2.24.0
|
||||||
- [FEATURE] QUIC and HTTP/3 Internet Draft 31 support. Drop ID-30
|
- [FEATURE] QUIC and HTTP/3 Internet Draft 31 support. Drop ID-30
|
||||||
|
|
|
@ -12,6 +12,7 @@ to the LiteSpeed QUIC and HTTP/3 Library:
|
||||||
- Rahul Jadhav -- Android support
|
- Rahul Jadhav -- Android support
|
||||||
- Victor Stewart -- Generate SCIDs API (connection ID steering)
|
- Victor Stewart -- Generate SCIDs API (connection ID steering)
|
||||||
- Aaron France -- Shared library support and Lisp bindings
|
- Aaron France -- Shared library support and Lisp bindings
|
||||||
|
- Suma Subbarao -- Use callback to supply client's SSL_CTX
|
||||||
|
|
||||||
Thank you!
|
Thank you!
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ author = u'LiteSpeed Technologies'
|
||||||
# The short X.Y version
|
# The short X.Y version
|
||||||
version = u'2.24'
|
version = u'2.24'
|
||||||
# The full version, including alpha/beta/rc tags
|
# The full version, including alpha/beta/rc tags
|
||||||
release = u'2.24.0'
|
release = u'2.24.1'
|
||||||
|
|
||||||
|
|
||||||
# -- General configuration ---------------------------------------------------
|
# -- General configuration ---------------------------------------------------
|
||||||
|
|
|
@ -25,7 +25,7 @@ extern "C" {
|
||||||
|
|
||||||
#define LSQUIC_MAJOR_VERSION 2
|
#define LSQUIC_MAJOR_VERSION 2
|
||||||
#define LSQUIC_MINOR_VERSION 24
|
#define LSQUIC_MINOR_VERSION 24
|
||||||
#define LSQUIC_PATCH_VERSION 0
|
#define LSQUIC_PATCH_VERSION 1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Engine flags:
|
* Engine flags:
|
||||||
|
|
|
@ -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 lsquic_packet_in *packet_in, const unsigned char *p, size_t len)
|
||||||
{
|
{
|
||||||
struct stream_frame stream_frame;
|
struct stream_frame stream_frame;
|
||||||
|
enum enc_level enc_level;
|
||||||
int parsed_len;
|
int parsed_len;
|
||||||
|
|
||||||
parsed_len = conn->ifc_conn.cn_pf->pf_parse_crypto_frame(p, 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)
|
if (parsed_len < 0)
|
||||||
return 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))
|
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;
|
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,
|
on_new_or_unconfirmed_path (struct ietf_full_conn *conn,
|
||||||
const struct lsquic_packet_in *packet_in)
|
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",
|
ABORT_ERROR("DCID %"CID_FMT" not found on new path",
|
||||||
CID_BITS(&packet_in->pi_dcid));
|
CID_BITS(&packet_in->pi_dcid));
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dcid_changed = !(cce->cce_flags & CCE_USED);
|
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))
|
if (0 == init_new_path(conn, path, dcid_changed))
|
||||||
path->cop_flags |= COP_INITIALIZED;
|
path->cop_flags |= COP_INITIALIZED;
|
||||||
else
|
else
|
||||||
return;
|
return -1;
|
||||||
|
|
||||||
conn->ifc_send_flags |= SF_SEND_PATH_CHAL << packet_in->pi_path_id;
|
conn->ifc_send_flags |= SF_SEND_PATH_CHAL << packet_in->pi_path_id;
|
||||||
LSQ_DEBUG("scheduled return path challenge on path %hhu",
|
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;
|
path->cop_cce_idx = cce - lconn->cn_cces;
|
||||||
cce->cce_flags |= CCE_USED;
|
cce->cce_flags |= CCE_USED;
|
||||||
LOG_SCIDS(conn);
|
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 (saved_path_id == conn->ifc_cur_path_id)
|
||||||
{
|
{
|
||||||
if (conn->ifc_cur_path_id != packet_in->pi_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),
|
else if (!LSQUIC_CIDS_EQ(CN_SCID(&conn->ifc_conn),
|
||||||
&packet_in->pi_dcid))
|
&packet_in->pi_dcid))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1943,7 +1943,9 @@ lsquic_send_ctl_next_packet_to_send (struct lsquic_send_ctl *ctl,
|
||||||
packet_out->po_lflags &= ~POL_LIMITED;
|
packet_out->po_lflags &= ~POL_LIMITED;
|
||||||
|
|
||||||
if (UNLIKELY(packet_out->po_header_type == HETY_INITIAL)
|
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)
|
&& size < 1200)
|
||||||
{
|
{
|
||||||
send_ctl_maybe_zero_pad(ctl, packet_out, 1200 - size);
|
send_ctl_maybe_zero_pad(ctl, packet_out, 1200 - size);
|
||||||
|
|
Loading…
Reference in a new issue