Commit Graph

172 Commits

Author SHA1 Message Date
Dmitri Tikhonov 71eb4000ac Release 2.26.1
- [BUGFIX] Migration corner cases: drop or pad over path challenge
  and response frames when necessary.
- Fix stream unit test.
2020-12-17 14:39:51 -05:00
Dmitri Tikhonov fcbdf653b6 Release 2.26.0
- [OPTIMIZATION] Adjust packet reordering threshold when spurious losses
  are detected.
- [API] Pass pointer to local sockaddr to ea_get_ssl_ctx() callback.
2020-12-09 09:11:03 -05:00
Dmitri Tikhonov 7f96c7c7f3 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.
2020-12-04 11:29:14 -05:00
Dmitri Tikhonov f38b395a31 Release 2.24.5
- [FEATURE] Improve Delayed ACKs extension and turn it on by default.
- Limit receive history to a finite amount of memory.
2020-11-24 08:51:36 -05:00
Dmitri Tikhonov 4580fab747 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.
2020-11-18 09:05:15 -05:00
Dmitri Tikhonov 2ed07212e5 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.
2020-11-11 07:50:03 -05:00
Dmitri Tikhonov ee4d393028 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
2020-11-05 11:01:46 -05:00
Dmitri Tikhonov e85d2854d3 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.
2020-11-04 10:27:50 -05:00
Dmitri Tikhonov 4429f8ea1e 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.
2020-10-28 08:10:17 -04:00
Dmitri Tikhonov 078f53798c Release 2.23.3
- [BUGFIX] Update packetization threshold when writing to stream
  after packet size is reduced following an RTO.
2020-10-22 15:12:04 -04:00
Dmitri Tikhonov 758aff32b9 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.
2020-10-21 09:05:26 -04:00
Dmitri Tikhonov f198a02df8 Release 2.23.1
- [BUGFIX] Regression introduced in 2.22.0: use correct number of
  PNSs for IETF mini conn during promotion.
2020-10-13 12:28:54 -04:00
Dmitri Tikhonov 04f8f447b2 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.
2020-10-13 08:20:25 -04:00
Dmitri Tikhonov 00c58df38c Release 2.22.1
- [BUGFIX] Function that checks validity of handshake packets.
2020-10-08 09:28:24 -04:00
Dmitri Tikhonov fbc6cc0413 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.
2020-10-07 09:41:26 -04:00
Dmitri Tikhonov b62ec17fd2 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.
2020-09-29 08:56:43 -04:00
Dmitri Tikhonov fcd21c67ff 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.
2020-09-25 10:16:59 -04:00
Dmitri Tikhonov cd35ff02ed 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.
2020-09-23 08:18:25 -04:00
Dmitri Tikhonov b1a7c3f944 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.
2020-09-15 16:42:13 -04:00
Dmitri Tikhonov c3c69ba3bb Release 2.19.10 -- Fix Windows and MacOS builds 2020-09-08 14:16:25 -04:00
Dmitri Tikhonov 2f2f436324 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.
2020-09-08 11:43:03 -04:00
Dmitri Tikhonov 49f1f4f620 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.
2020-09-02 09:03:19 -04:00
Dmitri Tikhonov 03fef29b03 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.
2020-08-26 09:00:45 -04:00
Dmitri Tikhonov 93e1e886ef Release 2.19.6
- Don't process incoming ECN marks if ECN is not enabled.
- Schedule ACK when incoming packet is marked with CE.
2020-08-20 14:02:51 -04:00
Dmitri Tikhonov 5488f41efa Release 2.19.5
- [BUGFIX] Generate frame record when moving an ACK from one buffered
  packet to another.
2020-08-11 08:52:56 -04:00
Dmitri Tikhonov 3a5376727e 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.
2020-08-06 12:56:08 -04:00
Dmitri Tikhonov d39df4b619 Release 2.19.3
- [BUGFIX] Regression in 2.19.1 that breaks Q050
2020-08-04 07:22:29 -04:00
Dmitri Tikhonov 244e8c6fb9 Release 2.19.2
- [BUGFIX] Do not reduce PLPMTU size by network overhead.
- [BUGFIX] Windows build.
2020-07-30 15:42:51 -04:00
Dmitri Tikhonov ef80a65ff8 Release 2.19.1 -- fix crash in IETF client (DPLPMTUD regression) 2020-07-29 12:00:21 -04:00
Dmitri Tikhonov b8fa619567 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.
2020-07-29 11:33:52 -04:00
Dmitri Tikhonov b329a00e5e Release 2.18.2
- [BUGFIX] Send prediction: lone path challenges do not get squeezed out
- Fix crash in http_client: now -K and -B can be used simultaneously
2020-07-22 13:55:43 -04:00
Dmitri Tikhonov 692a91022d 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.
2020-07-14 08:26:58 -04:00
Dmitri Tikhonov 7483dee074 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.
2020-07-06 17:35:21 -04:00
Dmitri Tikhonov da99665b1c 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.
2020-06-24 11:06:43 -04:00
Dmitri Tikhonov e957eb06e3 Release 2.17.1: fix regression in 2.17.0 2020-06-18 11:26:16 -04:00
Dmitri Tikhonov 4051ae3a1a 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().
2020-06-18 09:45:44 -04:00
Dmitri Tikhonov 307ca7fe50 Release 2.16.3
- [OPTIMIZATION] Stash up to two reordered packets in IETF mini conn
  instead of dropping them.
- [BUGFIX] Crash: check decrypt context before using it.  This regression
  was introduced in 2.16.2.
2020-06-15 16:34:30 -04:00
Dmitri Tikhonov f913a2972b 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.
2020-06-12 08:04:42 -04:00
Dmitri Tikhonov 8ae5ecb45e 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.
2020-06-09 12:01:45 -04:00
Dmitri Tikhonov 6bca16f0d2 Update version to 2.16.0 2020-06-03 08:27:38 -04:00
Dmitri Tikhonov fb73393fef 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.
2020-05-27 10:26:32 -04:00
Dmitri Tikhonov 4d221313f7 Update version to 2.14.8 2020-05-19 16:15:46 -04:00
Dmitri Tikhonov b78e44eec5 Release 2.14.7
- [BUGFIX] ALPN-to-version mapping: do not skip h3-Q050.
- [BUGFIX] Frame reader: skip headers if target stream is closed.
2020-05-12 16:50:36 -04:00
Dmitri Tikhonov b55a5117d9 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).
2020-05-06 09:38:32 -04:00
Dmitri Tikhonov 72585dc942 Release 2.14.5
- [BUGFIX] In coalesced datagram, ignore packets whose CID does not match.
- [BUGFIX] Frame reader: skip headers if target stream is not found.
- [BUGFIX] Log message in QPACK decoder handler.
2020-04-29 11:07:55 -04:00
Dmitri Tikhonov 1c105cf288 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
2020-04-24 09:44:39 -04:00
Dmitri Tikhonov 08c45823bc Release 2.14.3
- [BUGFIX] gQUIC: pass correct stream to hsi_create_header_set() callback.
- [BUGFIX] Use ls-hpack 2.1.1
- Improve stream code readability.
- Use ls-qpack 2.0.5
2020-04-15 09:30:40 -04:00
Dmitri Tikhonov 7ae4a10d41 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.
2020-04-08 12:51:04 -04:00
Dmitri Tikhonov 77a28812de 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.
2020-04-07 11:42:05 -04:00
Dmitri Tikhonov 55613f4414 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.
2020-03-30 13:34:43 -04:00