History log of /lsquic/src/liblsquic/lsquic_full_conn_ietf.c
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# a74702c6 06-May-2022 George Wang <gwang@litespeedtech.com>

Release 3.1.0

# e237d779 28-Apr-2022 George Wang <gwang@litespeedtech.com>

Release 3.0.5

# dbc62fc9 24-Apr-2022 Sam Hurst <sam.hurst@bbc.co.uk>

Tick connection on want_datagram_write (#314)

* Tick connection on datagram write

* Check that a connection can send before marking connection tickable

# df672783 08-Nov-2021 Sijie Yang <iyangsj@gmail.com>

Use same style of boolean checking in conn_ok_to_close() (#347)

# 082507cd 30-Sep-2021 George Wang <gwang@litespeedtech.com>

Release 3.0.3

# fb96e961 25-Sep-2021 wangweiwei <weiweiwang2021@126.com>

[BUGFIX]add datasize to po_regen_sz which will not be retransmitted. (#327)

# 7fc12548 30-Jun-2021 George Wang <gwang@litespeedtech.com>

Release 3.0.2

# 6464d337 22-Jun-2021 Matt Durgavich <matt.durgavich@unity3d.com>

Use C99 format specifiers to properly print uint64_t (#297)

Co-authored-by: Matt Durgavich <mdurgavich@vivox.com>

# 47440e4e 12-Jun-2021 George Wang <gwang@litespeedtech.com>

Only force TICK_CLOSE flag when CONNECTION_CLOSE frame received.

# 084338b1 02-Jun-2021 George Wang <gwang@litespeedtech.com>

Release 3.0.0

# 3d35ba15 31-May-2021 wangfuyu <wangfuyu1989@foxmail.com>

Fix: connection may not be closed timely when CONNECTION_CLOSE frame in (#284)

* Fix: connection may not be closed timely when CONNECTION_CLOSE frame in

* Simplify TICK_CLOSE logic

Co-authored-by: wangfuyu <ivanfywang@gmail.com>

# 55d69529 17-Apr-2021 George Wang <gwang@litespeedtech.com>

Release 2.30.1

# 293df8d6 12-Apr-2021 George Wang <gwang@litespeedtech.com>

Release 2.30.0

- [FEATURE] Added support for sending/receiving multiple headers to address the
case related to "100 continue" header handling.
- [BUGFIX] Addressed high CPU usage for a GOAWAY connection before sending
CONNECTION_CLOSE.
- [BUGFIX] Addressed SIGFPE due to zero pacing rate. (ISSUE #254).
- [BUGFIX] Fixed a minor issue related to multi-paths.

# eea99896 31-Mar-2021 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.29.6

- Documentation: describe lsquic internals ("guts").
- Two more fixes to compliance issues found by h3spec.
- Truncate, don't abort, SCIDs larger than 16 bytes (PR #244).
- Several small internal improvements and space optimizations.

# 10e0dad8 17-Mar-2021 George Wang <gwang@litespeedtech.com>

Release 2.29.5

- Fix a few issues detected by h3spec for better compliance with HTTP/3 standard.

# 99a1ad0f 03-Mar-2021 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.29.3

- [BUGFIX] Do not send RESET_STREAM if writing to stream is already
finished.
- perf_client: wait for all ACKs before exiting.
- Improve how generated RESET_STREAM is logged.
- Fix compilation in different combos of adv_tick/conn_stats flags.
- Move qpack warning disablement into src/liblsquic/CMakeLists.txt.

# 26e8f082 10-Feb-2021 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.29.0

- [FEATURE] QUIC and HTTP/3 Internet Draft 34 support and v1 support.
The latter is turned off by default.
- Drop support for ID-28 and ID-32.
- [BUGFIX] IETF QUIC mini conn receive history (trechist): allow
unlimited inserts by dropping smallest elements.
- [BUGFIX] gQUIC: set STTL to correct value, issue #226.
- [BUGFIX] Account for poison packet gap when MTU probe was too large.

# c2faf032 04-Feb-2021 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.28.0

- [API] lsquic_ssl_sess_to_resume_info() is the new way to get
session info.
- [API] Add user pointer to ea_generate_scid callback.
- [API] Add lsquic_dcid_from_packet() -- a fast function to parse
out DCID.
- [API] Add es_max_batch_size to control outgoing packet batch size.
- [BUGFIX] Disallow sending of header while promise is being written.
- [BUGFIX] Flush stream when buffered bytes exhaust stream cap.
- [BUGFIX] Deactivate HQ frame if writing push promise fails.
- Perform sanity check on peer transport parameters and fail the
handshake if some flow control limits are too low. This can be
turned off, see es_check_tp_sanity.
- http_server: fix how requests are read in "hq" mode.

# bbee242a 19-Jan-2021 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.27.5

- [BUGFIX] Assertion in send controller when path validation fails.
- [BUGFIX] Assertion in BBR when sending out-of-order packets is
detected.
- [BUGFIX] Drop overflow receive history ranges when cloning.
- Log correct size of the incoming packet.
- Fix internal stream function.

# e2c49070 09-Jan-2021 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.27.3

- [BUGFIX] gQUIC: do not destroy critical streams when connection is
closed. See issue #201.
- [BUGFIX] Drop #if LSQUIC_CONN_STATS from lsquic.h. See issue #211.
- [BUGFIX] Challenge cancellation when path validation fails.
- [BUGFIX] Do not send FIN if RST is scheduled to be sent on a stream.
- [BUGFIX] gQUIC's is_tickable() when connection is closing.
- [BUGFIX] Q050 processing of GOAWAY frames.

# 1a0003e3 07-Jan-2021 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.27.2

- [BUGFIX] Memory corruption in receive history copy-ranges function.

# 06b2a236 06-Jan-2021 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.27.1

- [API] New knob to set outgoing packet batch size.
- Aborted connection now become tickable immediately.
- Abort connection when HTTP/3 frame cannot be opened (can only happen
when malloc fails).

# 123f1164 19-Dec-2020 Paul Sheer <Paul.Sheer@spirent.com>

Support new lsquic_stream_if callback on_conncloseframe_received() to notify application of CONNECTION_CLOSE frame

# 71eb4000 18-Dec-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.26.1

- [BUGFIX] Migration corner cases: drop or pad over path challenge
and response frames when necessary.
- Fix stream unit test.

# 7f96c7c7 05-Dec-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.25.0

- [API, FEATURE] Add es_delay_onclose option to delay on_close until all
data is ACKed. Use new function lsquic_stream_has_unacked_data() to
learn whether peer acknowledged all data written to stream.
- [API] Add optional on_reset() stream callback to get notifications
when RESET or STOP_SENDING frames are received.
- [BUGFIX] On STOP_SENDING, make conn tickable is _writeable_, not
readable.

# 57fe5a13 24-Nov-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Fix Windows build

# f38b395a 24-Nov-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.24.5

- [FEATURE] Improve Delayed ACKs extension and turn it on by default.
- Limit receive history to a finite amount of memory.

# 4580fab7 18-Nov-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.24.4

- [BUGFIX] Check whether ECN counts are set in ACK struct before using them.
- [BUGFIX] Calculate TLP timer correctly when only one packet is in flight.
- [BUGFIX] Min RTO delay is 200 milliseconds, not 1 second.
- [BUGFIX] Memory leak in QPACK decoder handler: discard hset when necessary.
- Allow retired and drained CIDs to be reused after a timeout.

# 2ed07212 11-Nov-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.24.3

- [BUGFIX] Get rough RTT estimate on receipt of Handshake packet.
This prevents BBR on the client from miscalculating pacing rate,
slowing down sending of ACK packets.
- [BUGFIX] Packets sent during handshake are app-limited.
- [BUGFIX] Bandwidth sampler starts in app-limited mode.
- [BUGFIX] Memory leak: free QPACK handler context in stream dtor.
- Logging improvements.

# ee4d3930 06-Nov-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.24.2

- [BUGFIX] Allow peer to migrate when its SCID is zero-length.
- [BUGFIX] PADDING size calculation: only one Short packet can be
coalesced. (This should have been part of the fix in 2.24.1).
- Abort connect if received NEW_CONNECTION_ID but current DCID is
zero-length.
- Improve log messages

# e85d2854 04-Nov-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

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.

# 21bcad87 29-Oct-2020 sumasrao <suma.subbarao@spirent.com>

Support get_ssl_ctx callback for client

# 4429f8ea 28-Oct-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.24.0

- [FEATURE] QUIC and HTTP/3 Internet Draft 31 support. Drop ID-30
and ID-31 support.
- [BUGFIX] Divide-by-zero in newly enabled conn stats code when no
packets were sent.
- [BUGFIX] Memory leak in gQUIC client when server hello cannot be
parsed.
- [BUGFIX] Server Initial packet size calculation.
- Log user-agent and CONN_CLOSE reason when peer reports error.
- Example programs: Specify ALPN for echo and md5 clients and servers
(issue #184).
- Example programs: Don't add "QUIC_" prefix to lines in keylog file
(issue #185).
- http_server: Fix fd leak in preadv mode; fix preadv() usage when
reading from disk.

# 758aff32 21-Oct-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.23.2

- Add QPACK stats collection and experimentation mode, see the new
es_qpack_experiment setting.
- Log busy connection stats every second using the new "conn-stats"
log module.
- Log about skipping only once.
- Update HTTP/3 greased frame type formula.
- Use ls-qpack v2.2.1.

# f198a02d 13-Oct-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.23.1

- [BUGFIX] Regression introduced in 2.22.0: use correct number of
PNSs for IETF mini conn during promotion.

# 04f8f447 13-Oct-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.23.0

- [FEATURE] IETF Client 0-RTT support.
- [BUGFIX] Do not schedule MTU probe on first tick.
- [BUGFIX] Parsing DATAGRAM frame.
- [BUGFIX] If push promise fails, do not invoke hset destructor.
- [BUGFIX] Client: When connections are IDed by port number, check DCID.
Fixes issue #176.
- Revert the 2.22.1 lsquic_is_valid_hs_packet change. All that was
necessary is a change to the way we call it in lsquic_engine. No
change to the function itself is required.

# fbc6cc04 07-Oct-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.22.0

- [FEATURE] Extensible HTTP Priorities (HTTP/3 only).
- [FEATURE] Add conn context to packet-out memory interface (PR #175).
- [BUGFIX] gQUIC proof generation: allocate buffer big enough for
signature (issue #173).
- [BUGFIX] Make library thread-safe: drop use of global variables
(issue #133, issue #167).
- [BUGFIX] Deactivate only *recent* HQ frame, not any HQ frame.
- [BUGFIX] gQUIC server: associate compressed cert with SSL_CTX,
instead of keeping them in a separate hash, potentially leading
to mismatches.
- [BUGFIX] Stream data discard infinite loop: break on FIN.
- cmake: add install target via -DCMAKE_INSTALL_PREFIX (PR #171).
- Support randomized packet number to begin a connection.
- Mini and full IETF connection size optimization.
- http_client: specify HTTP priorities based on stream conditions.

# fecdd104 03-Oct-2020 Victor Stewart <v@nametag.social>

GSO-Friendly Packet Memory (#175)

# b62ec17f 29-Sep-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.21.0

- [FEATURE] QUIC and HTTP/3 Internet Draft 31 support.
- [API] Let user generate Souce Connection IDs.
- [FEATURE] Allow building lsquic as shared library.
- [OPTIMIZATION] Receive history: use a single contiguous memory
block for everything.
- Deprecate QUIC versions ID-27 and ID-30.

# ece7c94d 27-Sep-2020 Victor Stewart <vdog5@mac.com>

Connection ID Steering (#165)

# fcd21c67 25-Sep-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.20.2

- [BUGFIX] Memory leak: free pushed promise when refcnt is zero.
- [BUGFIX] Memory leak in IETF full conn dtor: cleanup closed IDs sets.

# cd35ff02 23-Sep-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.20.1

- [BUGFIX] Typo in new "validate peer addr by DCID" code. It is
a benign bug (works either way), but better to fix it.
- Simplify Stream Priority Iterator (SPI).
- Minor documentation updates.

# b1a7c3f9 16-Sep-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.20.0

- [FEATURE] QUIC and HTTP/3 Internet Draft 30 support.
- [FEATURE] Unreliable Datagram Extension support.
- [FEATURE] Adaptive congestion controller.
- [BUGFIX] Do not send MAX_STREAM_DATA frames on crypto streams.
- [BUGFIX] Fail with CRYPTO_BUFFER_EXCEEDED when too much CRYPTO
data comes in.
- [BUFFIX] Spin bit is now strictly per path; value is reset on
DCID change.
- [BUGFIX] Check that max value of max_streams_uni and
max_streams_bidi TPs is 2^60.
- [BUGFIX] Close IETF mini conn immediately if crypto session
cannot be initialized.
- Deprecate ID-28 (no browser uses it): it's no longer in the
default versions list.
- New programs duck_server and duck_client that implement the
experimental siduck-00 protocol. They quack!
- IETF crypto streams: don't limit ourselves from sending.
- Command-line programs: turn off QL loss bits if -G is used, as
Wireshark cannot decrypt QUIC packets when this extension is used.
- Turn all h3 framing unit tests back on.
- Fix malo initialization when compiled in no-pool mode.

# 2f2f4363 08-Sep-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.19.9

- [FEATURE] Add lsquic_stream_pwritev(). This function allows one to
reduce the number of system calls required to read a file from disk
by using lsquic_stream_pwritev() together with preadv(2).
- [BUGFIX] When stream is reset, it is writeable -- let user collect
the error.
- [BUGFIX] Calculate correct conn flow control if reading ends early.
- [BUGFIX] Remove stream from read and write queues on internal
shutdown. This is a regression introduced in 2.19.7.
- [BUGFIX] Swapped arguments in IETF RESET_FRAME generation.
- Turn off mini conn history when compiling with Visual Studio; this
allows the project to compile on Windows again.
- http_client: Add -3 flag to stop reading from streams early; code
cleanup.
- Don't use -Werror.

# 49f1f4f6 02-Sep-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.19.8

- [FEATURE] Update the timestamp extension to latest version.
- [FEATURE] Cope with appearance of ECN blackholes.
- [OPTIMIZATION] return packno offset and size when header is generated.
- [BUGFIX] ignore old ACK frames in mini conns.
- [BUGFIX] Mark initial server path as initialized.
- [BUGFIX] Do not merge ACK if ECN counts do not match.
- Turn incoming packet number history in mini conn back on.
- Record mini conn event history again when compiled in debug mode.
- IETF mini conn: log when ACK is queued.
- Clean up and refactor code in several places.

# 03fef29b 26-Aug-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.19.7

- Handle ECT-CE event: issue a loss event.
- Log the fact that we ignore SETTINGS_MAX_HEADER_LIST_SIZE.
- Use Max Push ID in GOAWAY frame to cancel promises.
- Add support for HTTP/3 CANCEL_PUSH frame.
- lsquic_stream_is_pushed: streams without headers are never pushed.
- [BUGFIX] Regression in lsquic_stream_shutdown_internal: now it shuts down.
- Improve logic whether to generate CONNECTION_CLOSE.

# 93e1e886 21-Aug-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.19.6

- Don't process incoming ECN marks if ECN is not enabled.
- Schedule ACK when incoming packet is marked with CE.

# 3a537672 06-Aug-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.19.4

- [BUGFIX] Do not return an oversize MTU probe to connection twice.
- [FEATURE] Delayed Acks updated to latest draft. Still experimental.
- Minor code cleanup in IETF full connection.

# 244e8c6f 31-Jul-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.19.2

- [BUGFIX] Do not reduce PLPMTU size by network overhead.
- [BUGFIX] Windows build.

# ef80a65f 29-Jul-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.19.1 -- fix crash in IETF client (DPLPMTUD regression)

# b8fa6195 29-Jul-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.19.0

- [FEATURE] DPLPMTUD support. IETF connections now search for the
maximum packet size, improving throughput.
- [DEBUG] Record event in stream history when on_close() is called
in dtor.

# 692a9102 14-Jul-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.18.1

- [FEATURE] Implement the "QUIC bit grease" extension.
- [BUGFIX] Selecting CID used for logging on client.
- [BUGFIX] Header protection assertion.
- [BUGFIX] Server: enable SSL key logging when cert lookup callback
is not set.
- Remove some dead code.

# 7483dee0 07-Jul-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.18.0

- [API] Rename "0-RTT" to "session resumption." In IETF QUIC, "0-RTT"
always refers to early data, meaning a request that the server can
reply to in the very first return flight. A more appropriate name
for what we support on the client site is "session resumption," which
is standard TLS terminology. Later, when we add support for 0-RTT
(early data), we can use the 0-RTT terminology again, this time in
proper context.
- [BUGFIX] Do not set certificate callback if ea_lookup_cert is NULL.
- [BUGFIX] Make connection tickable when it's marked as closed.
- [BUGFIX] Fail certificate lookup if SNI is not present in HTTP mode.
- Several documentation fixes and improvements.
- Minor code cleanup.

# da99665b 24-Jun-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.17.2

- [BUGFIX] Infinite loop in stream: advance read offset when discarding data.
- [OPTIMIZATION] Header protection: only initialize cipher once.
- [OPTIMIZATION] Batch header protection application.

# 4051ae3a 18-Jun-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.17.0

- [FEATURE] QUIC and HTTP/3 Internet Draft 29 support.
- [BUGFIX] Check that scheduled packets are also sendable when
calculating a connection's "tickable" property.
- [BUGFIX] Don't count scheduled packets as in-flight when pacer is
checked on tick.
- gQUIC: delay calling on_new for pushed stream until headers are
available.
- Allow nested calls to lsquic_engine_connect().

# f913a297 12-Jun-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.16.2

- [BUGFIX] ID-28: do not use TLS middlebox compatibility mode in
ClientHello. This change requires using a newer version of BoringSSL.
- [BUGFIX] Free connections in Advisory Tick Time Queue in engine dtor.
- [BUGFIX] IETF QUIC client: narrow migration check to a single path.
- [BUGFIX] NULL dereference: set function pointers for alarm for path
challenges 2 and 3.
- [BUGFIX] HTTP/3 headers may be followed immediately by trailers.
- [BUGFIX] Log messages when SCID changes.

# 8ae5ecb4 09-Jun-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.16.1

- [FEATURE] Use "no-progress timeout" after which connection is closed.
- [BUGFIX] Select new SCID when current SCID is retired.
- [BUGFIX] Don't warn about dropped Initial packet sequence gaps during
mini/full handoff.
- [BUGFIX] Send correct conn error when HTTP/3 frame is truncated.
- [BUGFIX] Mini conn: consider amplification when deciding to return
TICK_SEND.
- [BUGFIX] Don't double-count tag length in amplification logic.
- [BUGFIX] Don't squeeze out lone path challenges.
- [BUGFIX] Log messages dealing with scheduled packet queue squeezing.
- [BUGFIX] don't wipe current path if no path challenge responses
come back.
- [BUGFIX] When path is reset, don't lose path_id which is used for
logging.
- Downgrade flow control violations to info log level from warnings.
- Fix connection cap extra check, avoid checks in nested calls.
- Fix some unit tests when extra checks are enabled.
- Use ls-hpack 2.2.1.
- Turn off unconditional extra checks for IETF clients.
- Extra checks: don't verify sent size of hello packets. Client
changes DCID length and this check will fail.

# fb3e20e0 03-Jun-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Fix Windows support

# fb73393f 27-May-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.15.0

- [FEATURE] QUIC and HTTP/3 Internet Draft 28 support.
- [BUGFIX] Ignore Retry packets after other packets are decrypted
successfully.
- [BUGFIX] Transport parameter decoding: CID no longer has 4-byte
length minimum.
- http_client: fix and optimize lsxpack_header allocator.
- Drop support for Internet Draft 25.

# b55a5117 06-May-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.14.6

- [BUGFIX] Fix amplification mitigation in 0-RTT case.
- [BUGFIX] IETF mini connection should not tickable if cannot send
a packet due to amplification.
- [BUGFIX] Fail if active_connection_id_limit TP is smaller than 2.
- [BUGFIX] Qlog server certificates for IETF QUIC connections.
- [BUGFIX] Uninitialized struct padding usage in tokgen (benign).
- [BUGFIX] Incorrect argument to shi_lookup() (benign).

# 1c105cf2 24-Apr-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.14.4

- [BUGFIX] Heed es_rw_once for pushed HTTP/3 streams.
- [BUGFIX] IETF client: set correct flags on bidirectional streams.
- [BUGFIX] Generate Cancel Stream QPACK instructions for abandoned
streams.
- [BUGFIX] Do not call header callbacks after stream is closed.
- Use ls-qpack 2.1.1

# 7ae4a10d 08-Apr-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.14.2

- [BUGFIX] Use ls-qpack 2.0.4
- [BUGFIX] Honor max packet size on the client and when path changes.
- http_server: fix prepare_decode() function.

# 77a28812 07-Apr-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.14.1

- [BUGFIX] Place connections on tickable queue when sending is reenabled.
- [BUGFIX] A connection is tickable if it has unsent packets.
- [BUGFIX] Heed peer's max_packet_size transport parameter.

# 55613f44 31-Mar-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.14.0

- [API] Use lsxpack_header structure to send HTTP headers.
- [OPTIMIZATION] nocopy's readable_bytes() function.
- http_server: fix typo in error message
- Use ls-hpack 2.1.0.
- Use ls-qpack 2.0.0.

# 992bbcdb 13-Mar-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.13.2

- [BUGFIX] Use of new lsxpack_header API's hsi_prepare_decode().

# ea822d0d 12-Mar-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.13.1 - fix a few minor issues flagged by Coverity

# a5fa05f9 12-Mar-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.13.0

- [API] Use lsxpack_header structure to process incoming headers.
- [BUGFIX] Fix assertion when zero-padding Initial packet.
- [BUGFIX] Use idle timeout before we learn of peer's value.
- Use ls-hpack 2.0.0 -- has lsxpack_header changes.
- Use ls-qpack 0.14.0 -- new, common with ls-hpack, XXH seed (not used yet).
- Code cleanup: prefix exported functions with "lsquic_".

# afe3d363 02-Mar-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.12.0

- [FEATURE] QUIC timestamps extension.
- [API] New: ea_alpn that is used when not in HTTP mode.
- [BUGFIX] SNI is mandatory only for HTTP/3 and gQUIC.
- [BUGFIX] Benign double-free -- issue #110.
- [BUGFIX] Printing of transport parameters.

# bc520ef7 24-Feb-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.11.0

- [FEATURE] QUIC and HTTP/3 Internet Draft 27 support.
- [FEATURE] Add experimental delayed ACKs extension.
- Drop support for Internet Draft 24.
- Code cleanup.

# feca77f5 22-Feb-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Add experimental support for delayed ACKs extension

# 0bd32030 21-Feb-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Switch to readthedocs.org for hosting documentation

Add API reference.

# b86524a4 21-Feb-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Code cleanup. Improve comments in lsquic.h

# 1bdb91d1 13-Feb-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.10.5

- [BUGFIX] BBR: call cci_sent() with correct arguments and at correct time.
- Refactor transport parameters module.
- Minor code cleanup.

# e68b0452 11-Feb-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.10.4

- [BUGFIX] Send HANDSHAKE_DONE only after Finished is received.
- [BUGFIX] Don't treat garbage UDP padding as library error; ignore
it instead.
- [BUGFIX] Fix compilation on FreeBSD (missing header).

# f2a7fa84 31-Jan-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.10.3

- [BUGFIX] Cancel path responses and challenges on old path when
switching to new path.
- Logging network path information.

# 8c1565cb 31-Jan-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.10.2

- [BUGFIX] Do not delay ACKs for Initial and Handshake packets.
- [BUGFIX] Send PATH_CHALLENGE if path changed before mini conn promotion.
- Logging improvements.
- http_client: discard data faster.

# 4ab453a1 29-Jan-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.10.1

- [BUGFIX] Coalesced packets could get longer than normal packet size.
- Add spin bit configuration option es_spin (-o spin=[01]).
- Disable spin bit in 1/16 of connections.
- Improve logging a bit.

# 9fc12041 28-Jan-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.10.0

- [FEATURE] QUIC and HTTP/3 Internet Draft 25 support.
- [API] Drop support for ID-23.
- [BUGFIX] Set key phase bit on outgoing packets correctly.
- Code cleanup.

# fb96f4dd 20-Jan-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.9.0

- [API] Drop support for Q039.
- Improve ACK-queuing logic. Send an ACK once in a while if
peer keeps on sending non-ack-eliciting packets.
- Improve Alt-Svc string: Q050 and later are not included in
the old-style "quic" string.
- Send stateless resets if connection could not be promoted.
- Schedule MAX_DATA if needed when DATA_BLOCKED is received.
- Use ls-qpack 0.11.2 -- needed for server push optimization.
- Code cleanup: handle some error cases, improve logging.

# 10c41073 16-Jan-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.8.9

- [BUGFIX] Use ls-qpack 0.11.1
- [OPTIMIZATION] Generate random bytes in batches.
- Change loss_bits transport parameter ID to 0x1057 following latest
draft.
- Randomize period with which PINGs are sent to elicit ACKs.
- Some refactoring and code cleanup.

# a4f5dac3 15-Jan-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.8.8

- [BUGFIX] Invalid read when parsing IETF transport parameters
(this was benign).
- [OPTIMIZATION] Frame bundling when using buffered packets in
IETF QUIC: a) flush QPACK decoder stream and b) include ACKs
in opportunistic fashion.
- Fix HTTP/3 framing unit test.
- Code cleanup.

# 7d09751d 10-Jan-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.8.7

- [BUGFIX] Initial packet size check for IETF mini conn applies to
UDP payload, not QUIC packet.
- Support old and new school loss_bits transport parameter.
- Use Q run length of 64 as suggested in the loss bits Draft.
- Undo square wave count when packet is delayed.
- Code cleanup; minor fixes.

# 747be414 06-Jan-2020 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.8.4

- [HTTP3] Verify number of bytes in incoming DATA frames against
content-length.
- [HTTP3] Stop issuing streams credits if peer stops opening QPACK
decoder window. This addresses a potential attack whereby client
can cause the server to keep allocating memory. See Security
Considerations in the QPACK draft.
- [BUGFIX] Mini conn: don't shorten max packet size for Q050 and later.
- [BUGFIX] Init IETF connection flow controller using correct setting.
- Code cleanup and minor fixes.

# de46bf2f 31-Dec-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.8.1

- [FEATURE] Use occasional packet number gaps to detect optimistic
ACK attacks.
- [BUGFIX] Q050 client: all packet numbers are in the App PNS.
- [OPTIMIZATION] Merge multi-range ACK frames, not just single-range
ACK frames.
- IETF QUIC: use RTT estimate in ack timeout calculation.
- IETF handshake: abort conn when unexpected errors occur.
- Use PING rather than MAX_DATA frames to elicit ACKs from peer.
- Server: enforce 1200 byte Initial minimum packet size.
- [CLEANUP] Remove code to disable gQUIC crypto.
- [CLEANUP] Remove n_timestamps from ACK info struct.
- Optimize driver: reuse previous ancillary message when possible.

# a137764b 11-Dec-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.7.2

- [BUGFIX] Send controller: update scheduled bytes when DCID length
changes (IETF client).
- [BUGFIX] Drop alarm check from sanity test. It no longer works now
that we use loss chains.
- [PORTABILITY] Fix build on Alpine Linux.
- [PORTABILITY] Fix build using XCode.
- Client initial DCID length: use RAND_bytes() instead of rand(3).
- Add unit tests for connection min heap.
- [DEBUG] Log CID in gQUIC handshake module
- [DEBUG] Turn on extra checks for IETF client send controller.
- [DEBUG] Dedup next advisory tick messages when reason is IDLE timer.
- [DEBUG] QPACK decoder handler: log header error code.

# 936463fe 05-Dec-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.7.1

- [BUGFIX] client: don't call ignore_init() in middle of batch send.
ignore_init() makes an assumption that the send controller has access
to all outgoing packets. This change wraps a few IETF full connection
methods to delay calling ignore_init() until the engine returns all
outgoing packets that were batched.
- [BUGFIX] set errno to EAGAIN if sendmmsg() can't send all of them.
This needs to be done because the value of errno may be lost on
some platforms.
- [BUGFIX] Typo that set all bits in sm_qflags lead to crashes.
- [BUGFIX] Do not cancel header block processing after failure, as
QPACK releases the reference in that case.
- [CLEANUP] IETF encrypt: replace assert(0) with a warning.
- Several small improvements to the test server.

# 7ee41525 28-Nov-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.7.0

- [API, FEATURE] Close connection immediately when ea_packets_out()
fails with errno != EAGAIN. The API change is that errno is now
examined. Make sure to set it if using something other than
sendmsg() to send packets.
- [CLEANUP] Immediate close logic in IETF full conn.
- [CLEANUP] Fix bogus warning about uninitialized `pair' variable.

# 02b6086d 22-Nov-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.6.7

- [FEATURE] Implement the QL extension (offered by default).
- [BUGFIX] Abort when encountering unexpected HTTP/3 frames.
- [BUGFIX] Acknowledge (QPACK) HTTP/3 trailers correctly.
- [DEBUG] Turn on debug message for next advisory tick.

# c09fcff4 15-Nov-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.6.4

- [BUGFIX] High priority buffered packet queue length.
- [BUGFIX] Rain time calculation: max_ack_delay is in milliseconds.

# 2f7aa658 13-Nov-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.6.3

- [BUGFIX] Close DATA frames with empty payload correctly.

# 767cf611 12-Nov-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.6.2

- [BUGFIX] SCID!=ODCID rule applies to Retry packets, not regular
packets.
- [BUGFIX] Zero-RTT: BoringSSL no longer flips read/write secrets.
- [BUGFIX] Truncate ACK frame rather instead of aborting IETF
connection.
- [BUGFIX] Client: don't send duplicate reset tokens.
- [BUGFIX] Remove invalid assertion in H3 framing code.
- Silence a warning in send ctl by restructuring switch() statement.

# 84dbbb75 09-Nov-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.6.1

- [BUGFIX] set retry token on all resubmitted packets.
- Event log: log sent packet flags. In particular, this allows one
to see whether token was sent.
- Don't migrate client if es_allow_migration is false.

# 03e6b668 08-Nov-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.6.0

- [FEATURE] QUIC and HTTP/3 Internet Draft 24 support

# a0e1aeee 31-Oct-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.5.0

- [API] lsquic_engine_connect() can now be passed QUIC version to use.
- [OPTIMIZATION] Queue opportunistic ACKs if there is data to be sent.
- [BUGFIX] Don't evict streams from priority iterator if there is
only one queue.
- [OPTIMIZATION, BUGFIX] Several other optimizations and bug fixes.
- Use ls-qpack v0.10.7.

# df992bce 24-Oct-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.4.9

- [BUGFIX] IETF QUIC server: fix uninitialized variable use.
- [BUGFIX] make sure TLSv1.3 is not disabled in SSL object.
- [BUGFIX] Use issuer name and serial number to cache certs (SKID
values are not unique).
- [BUGFIX] Always set the idle alarm in IETF connection so that it
can time out.

# 0adf085a 16-Oct-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.4.7

- Add echo client and server to the distibution.
- Add MD5 client and server to the distibution.
- Fix http_client: check command-line arguments better, prevent crash.
- Fix IETF conn: can_write_ack() should only care about APP PNS.
- Client: delay stream creation until handshake succeds.
- Reset HTTP stream whose write end is closed prematurely.
- Fix tickable(): mirror behavior of tick() wrt buffered packets.
- Log reason why engine is tickable.

# ad08470c 11-Oct-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.4.6

- Minor code cleanup and logging improvements.
- Server and client programs: include library version (e.g. 2.4.6)
into `server' and `user-agent' headers.

# 4947ba95 09-Oct-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.4.5

- [OPTIMIZATION]: flush encoder stream only when necessary.
- [BUGFIX] Use ls-qpack v0.10.2 for new API -- and for a bug fix.
- [BUGFIX] Typo in IETF conn SETTINGS writer.
- Use latest BoringSSL.

# 662de5e1 08-Oct-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.4.4

- [API] Add lsquic_alpn2ver() to aid parsing Alt-Svc header.
- [BUGFIX] NULL dereference when H3 frame header would be split.
- [BUGFIX] Do not close fixed-size H3 frame prematurely.
- [BUGFIX] Allow PING frames in IETF mini conn.
- [BUGFIX] Mini conns: don't send any packets after receiving
CONNECTION_CLOSE.
- [BUGFIX] Client migration: reserve slot for DCID from transport params.
- [BUGFIX] Allow max_early_data_size=0 -- early_data might not be there.
- [BUGFIX] Use an invalid stream number to reset BPT cache (zero is now a
valid stream number).
- [SPEC] Use FINAL_SIZE_ERROR when FIN mismatch is detected.
- [OPTIMIZATION] Closed connection only gets one chance to send packets.
- [OPTIMIZATION] Flush headers stream before packetizing stream data.
- [OPTIMIZATION] process QPACK encoder STREAM frames immediately.
- Update ls-qpack to v0.10.1.

# 1245d2e0 30-Sep-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.4.3

- Add GQUIC versions to the list of h3 ALPNs for Alt-Svc header.
For example, h3-Q043. Chrome will switch to using this format at
some point in the future.
- [BUGFIX] Send correct value in max_streams_uni transport param
- [SPEC] Abort IETF QUIC connection if max_early_data_size is not set
to 0xFFFFFFFF

# 65728dc5 23-Sep-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.4.2

- [BUGFIX] H3 framing: fix zero-byte write when space is available
- [BUGFIX] Don't send STREAM frame when incoming unidirectgional stream
is closed
- [BUGFIX] Cancel all pending writes by stream reset by a GOAWAY
- [BUGFIX] Fix use-after-free in IETF full conn
- [OPTIMIZATION] Wait for session tickets for two seconds and then drop
SSL object and crypto streams.

# 92f6e17b 18-Sep-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.4.0

[FEATURE] QUIC and HTTP/3 Internet Draft 23 support

# cca25415 13-Sep-2019 Dmitri Tikhonov <dtikhonov@litespeedtech.com>

Release 2.3.0

- [FEATURE] BBR congestion control is on by default
- [BUGFIX] BBR app-limited logic
- [BUGFIX] Fix uninitialized warnings in IETF
- [BUGFIX] Update ls-qpack to v0.9.14
- [CLEANUP] Code cleanup

# 5392f7a3 11-Sep-2019 LiteSpeed Tech <info@litespeedtech.com>

Release 2.2.0: server included, ID-22 supported (#76)