Skip to content

Commit

Permalink
Release 1.14.3
Browse files Browse the repository at this point in the history
- [BUGFIX] Do not abort conn on STREAM frame for a reset stream
- [BUGFIX] Drop packets that would become empty due to repackaging.
  Packets on the scheduled queue may be marked for repackaging.
  Frames such as ACK frame that are never resent are removed from
  repackaged packets.  We must check that the newly repackaged packet
  would not be empty.  If it would be, it is destroyed instead and
  the next packet on the scheduled queue is used.  Note that this
  change only affects the logic to return the next packet to be sent.
  Lost packets that are being rescheduled are already processed in
  this fashion.
- Byteswap CID before logging it - this makes it match Chrome CIDs.
  (Except Q035, which is the last little-endian GQUIC version we
  support.)
  • Loading branch information
Dmitri Tikhonov committed Sep 12, 2018
1 parent 14e3680 commit 3229dd1
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 7 deletions.
16 changes: 16 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
2018-09-12
- 1.14.3
- [BUGFIX] Do not abort conn on STREAM frame for a reset stream
- [BUGFIX] Drop packets that would become empty due to repackaging.
Packets on the scheduled queue may be marked for repackaging.
Frames such as ACK frame that are never resent are removed from
repackaged packets. We must check that the newly repackaged packet
would not be empty. If it would be, it is destroyed instead and
the next packet on the scheduled queue is used. Note that this
change only affects the logic to return the next packet to be sent.
Lost packets that are being rescheduled are already processed in
this fashion.
- Byteswap CID before logging it - this makes it match Chrome CIDs.
(Except Q035, which is the last little-endian GQUIC version we
support.)

2018-09-06
- 1.14.0
- [API Change] Disable packet sending if full batch cannot be sent
Expand Down
3 changes: 2 additions & 1 deletion include/lsquic.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ extern "C" {

#define LSQUIC_MAJOR_VERSION 1
#define LSQUIC_MINOR_VERSION 14
#define LSQUIC_PATCH_VERSION 0
#define LSQUIC_PATCH_VERSION 3

/**
* Engine flags:
Expand Down Expand Up @@ -512,6 +512,7 @@ enum lsquic_header_status
LSQUIC_HDR_ERR_INCOMPL_REQ_PSDO_HDR,
/** Unnecessary request pseudo-header present in the response */
LSQUIC_HDR_ERR_UNNEC_REQ_PSDO_HDR,
LSQUIC_HDR_ERR_BAD_REQ_HEADER = LSQUIC_HDR_ERR_UNNEC_REQ_PSDO_HDR,
/** Not all response pseudo-headers are present */
LSQUIC_HDR_ERR_INCOMPL_RESP_PSDO_HDR,
/** Unnecessary response pseudo-header present in the response. */
Expand Down
11 changes: 10 additions & 1 deletion src/liblsquic/lsquic_full_conn.c
Original file line number Diff line number Diff line change
Expand Up @@ -1148,7 +1148,16 @@ process_stream_frame (struct full_conn *conn, lsquic_packet_in_t *packet_in,
}

stream = find_stream_by_id(conn, stream_frame->stream_id);
if (!stream)
if (stream)
{
if (lsquic_stream_is_reset(stream))
{
LSQ_DEBUG("stream %u is reset, ignore frame", stream->id);
lsquic_malo_put(stream_frame);
return parsed_len;
}
}
else
{
if (conn_is_stream_closed(conn, stream_frame->stream_id))
{
Expand Down
17 changes: 15 additions & 2 deletions src/liblsquic/lsquic_logger.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,20 @@

#define LSQUIC_LOGGER_MODULE LSQLM_LOGGER /* Quis custodiet ipsos custodes? */
#include "lsquic_logger.h"
#include "lsquic_byteswap.h"
#include "lsquic.h"

/* The switch to big-endian format in GQUIC also resulted in Chrome swapping
* the CID in its log. We do the same thing in our log messages so that the
* CIDs are easy to match. The exception is Q035, which is the last little-
* endian GQUIC version this library supports.
*/
#if __BYTE_ORDER == __LITTLE_ENDIAN
#define DISP_CID(cid) bswap_64(cid)
#else
#define DISP_CID(cid) (cid)
#endif

static enum lsquic_logger_timestamp_style g_llts = LLTS_NONE;

static int
Expand Down Expand Up @@ -220,7 +232,8 @@ lsquic_logger_log3 (enum lsq_log_level log_level,
print_timestamp();

lsquic_printf("[%s] [QUIC:%"PRIu64"-%"PRIu32"] %s: ",
lsq_loglevel2str[log_level], conn_id, stream_id, lsqlm_to_str[module]);
lsq_loglevel2str[log_level], DISP_CID(conn_id), stream_id,
lsqlm_to_str[module]);
va_list ap;
va_start(ap, fmt);
logger_if->vprintf(logger_ctx, fmt, ap);
Expand All @@ -241,7 +254,7 @@ lsquic_logger_log2 (enum lsq_log_level log_level,
print_timestamp();

lsquic_printf("[%s] [QUIC:%"PRIu64"] %s: ",
lsq_loglevel2str[log_level], conn_id, lsqlm_to_str[module]);
lsq_loglevel2str[log_level], DISP_CID(conn_id), lsqlm_to_str[module]);
va_list ap;
va_start(ap, fmt);
logger_if->vprintf(logger_ctx, fmt, ap);
Expand Down
17 changes: 14 additions & 3 deletions src/liblsquic/lsquic_send_ctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1074,6 +1074,7 @@ lsquic_send_ctl_next_packet_to_send (lsquic_send_ctl_t *ctl)
{
lsquic_packet_out_t *packet_out;

get_packet:
packet_out = TAILQ_FIRST(&ctl->sc_scheduled_packets);
if (!packet_out)
return NULL;
Expand All @@ -1087,13 +1088,23 @@ lsquic_send_ctl_next_packet_to_send (lsquic_send_ctl_t *ctl)
return NULL;
}

send_ctl_sched_remove(ctl, packet_out);
if (packet_out->po_flags & PO_REPACKNO)
{
update_for_resending(ctl, packet_out);
packet_out->po_flags &= ~PO_REPACKNO;
if (packet_out->po_regen_sz < packet_out->po_data_sz)
{
update_for_resending(ctl, packet_out);
packet_out->po_flags &= ~PO_REPACKNO;
}
else
{
LSQ_DEBUG("Dropping packet %"PRIu64" from scheduled queue",
packet_out->po_packno);
lsquic_packet_out_destroy(packet_out, ctl->sc_enpub);
goto get_packet;
}
}

send_ctl_sched_remove(ctl, packet_out);
ctl->sc_bytes_out += packet_out_total_sz(packet_out);
return packet_out;
}
Expand Down

0 comments on commit 3229dd1

Please sign in to comment.