Quiche Versions Save

🥧 Savoury implementation of the QUIC transport protocol and HTTP/3

0.15.0

1 year ago

Breaking Changes:

  • Due to the changes needed to support connection migration, many APIs now require an additional SocketAddr parameter, including accept(), connect(), RecvInfo, SendInfo.

Highlights:

  • Added support for connection migration.
  • Added support for the HTTP/3 PRIORITY_UPDATE frame (see h3::Connection::send_priority_update_for_request()`).
  • Added support for the BBR congestion control algorithm (note: this requires application to also support pacing).
  • Many more bug fixes and performance improvements.

Full changelog at https://github.com/cloudflare/quiche/compare/0.14.0...0.15.0

0.14.0

1 year ago

Breaking Changes:

  • The Connection structure doesn't need to be pinned anymore, so the accept() and connect() functions now return a plain Connection rather than wrap it in Box<Pin<...>>.

Highlights:

  • Fixed a potential crash that can be triggered by a stream being stopped.
  • Fixed UB caused by mutable Connection references being aliased when executing BoringSSL callbacks.
  • Added HTTP/3 events to qlog.

Full changelog at https://github.com/cloudflare/quiche/compare/0.13.0...0.14.0

0.13.0

2 years ago

Breaking Changes:

Highlights:

  • Updated delivery rate estimation to draft-01 and HyStart++ to draft-04.
  • Added support for the PRIORITY_UPDATE HTTP/3 frame: a new PriorityUpdate value has been added to the h3::Event enum that is returned by h3::Connection::poll() to notify the application when a priority update has been received, and the new h3::Connection::take_last_priority_update() method has been added to let applications retrieve the priority value for a specific prioritized element.

Full changelog at https://github.com/cloudflare/quiche/compare/0.12.0...0.13.0

0.12.0

2 years ago

Breaking Changes:

Highlights:

  • The quiche_conn_session() function has been restored in the FFI API.
  • Many bug fixes and performance improvements.

Full changelog at https://github.com/cloudflare/quiche/compare/0.11.0...0.12.0

0.11.0

2 years ago

Breaking Changes:

  • The quiche git repository has been converted to a workspace layout. This should only affect projects that import the git repository directly, rather than using the package published on crates.io.
  • The quiche_conn_session() function has been temporarily removed from the FFI API due to a bug that would cause applications to access already-freed memory. The functionality will be re-implemented in a future release.

Highlights:

  • Window-based flow control implementation. Applications can limit the amount of memory allocated to store incoming data by using the Config::set_max_connection_window() and Config::set_max_stream_window() APIs.
  • Update to QLOG v0.3, including support for the JSON-SEQ serialization format.
  • Many bug fixes and performance improvements.

Full changelog at https://github.com/cloudflare/quiche/compare/0.10.0...0.11.0

0.10.0

2 years ago

Breaking Changes:

  • The new StreamReset value has been added to the Error enum. This can be returned by Connecttion::stream_recv() to notify the application when the peer has reset a particular stream.
  • The new Reset value has been added to the h3::Event enum. This is returned by h3::Connection::poll() to notify the application when the peer has reset a particular stream.
  • The h3::Config::set_max_header_list_size() method was renamed to h3::Config::set_max_field_section_size() to align to the renaming of the corresponding HTTP/3 setting in the spec.
  • Support for building with Android NDK < 19 was dropped.

Highlights:

  • Support for Proportional Rate Reduction (RFC6937) for the CUBIC congestion control algorithm.
  • Support for Hystart++ draft-03 for both CUBIC and Reno.
  • Support for loss recovery adaptive packet reordering thresholds.
  • New APIs added to send and receive DATAGRAM frames as Vec<u8> to avoid copying data (see Connection::dgram_send_vec() and Connection::dgram_recv_vec()).
  • Support for qlog draft-02.
  • New APIs added to: expose the server name requested by the client (Connection::server_name()), expose the locally-generated connection error (Connection::local_error()), expose whether the connection timed-out (Connection::is_timed_out()).
  • Many bug fixes and performance improvements.

Full changelog at https://github.com/cloudflare/quiche/compare/0.9.0...0.10.0

0.9.0

2 years ago

Breaking Changes:

  • Many public APIs have been updated to support network path awareness (see below):
    • The accept() and connect() functions now take a std::net::SocketAddr parameter representing the address of the peer on the other side of the connection.
    • The Connection::recv() method takes a RecvInfo parameter which should be populated with the address the UDP datagram was received from. Note that additional fields may be added in the future to support new features.
    • The Connection::send() method returns an additional SendInfo value which carries additional metadata for the newly generated QUIC packet, for example the address it needs to be sent to. Note that additional fields may be added in the future to support new features.
  • The InvalidStreamState error value has been updated to include the stream ID that caused the error.
  • The h3::Header and h3::HeaderRef types now use byte vectors (Vec<u8>) rather than strings to represent header names and values. Their constructors have been updated accordingly to take byte slices (&[u8]) rather than string slices (&str). The FFI API is unaffected.

Highlights:

  • Support for QUIC v1 (RFC 8999, 9000, 9001, 9002)
  • Support for resuming connections and sending early data (0-RTT resumption) on the client (previously this was only supported on the server-side).
  • Support for network path awareness, which lays the foundation for network migration support (to be added in a future release).
  • Support for calculating packet pacing delays (requires support on the application). See the documentation for the at field of the SendInfo structure for more details.
  • Several improvements to the CUBIC congestion control implementation.
  • Many bug fixes and performance improvements.

Full changelog at https://github.com/cloudflare/quiche/compare/0.8.1...0.9.0

0.8.1

3 years ago

Highlights:

  • The ConnectionError structure's fields are now properly accessible by applications.
  • The HTTP/3 Finished event is not triggered multiple times even if a msbehaving application repeatedly calls the recv_body() method after Error::Done is returned.

Full changelog at https://github.com/cloudflare/quiche/compare/0.8.0...0.8.1

0.8.0

3 years ago

Breaking Changes:

  • The HTTP/3 Data and Datagram events are now edge-triggered like the other HTTP/3 events. This means that they will only be reported by the poll() method once. Applications will need to consume all the data buffered for those events' triggers to be re-armed.

Highlights:

Full changelog at https://github.com/cloudflare/quiche/compare/0.7.0...0.8.0

0.7.0

3 years ago

Breaking Changes:

Highlights:

Full changelog at https://github.com/cloudflare/quiche/compare/0.6.0...0.7.0