Releases: cloudflare/quiche
Releases · cloudflare/quiche
🚑 0.16.0
Highlights:
- Added
Config::enable_pacing()
to control whether pacing should be enabled. - A few bug fixes (some for issues introduced in the previous release).
Full changelog at 0.15.0...0.16.0
⏱️ 0.15.0
Breaking Changes:
- Due to the changes needed to support connection migration, many APIs now require an additional
SocketAddr
parameter, includingaccept()
,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 0.14.0...0.15.0
📌 0.14.0
Breaking Changes:
- The
Connection
structure doesn't need to be pinned anymore, so theaccept()
andconnect()
functions now return a plainConnection
rather than wrap it inBox<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 0.13.0...0.14.0
📯 0.13.0
Breaking Changes:
- The
boring-sys
build feature has been renamed toboringssl-boring-crate
. - The
h3::Connection::send_response_with_priority()
method now takes aPriority
value rather than a&str
to represent the priority to be used. - The
PriorityUpdate
value has been added to theh3::Event
enum returned byh3::Connection::poll()
.
Highlights:
- Updated delivery rate estimation to draft-01 and HyStart++ to draft-04.
- Added support for the
PRIORITY_UPDATE
HTTP/3 frame: a newPriorityUpdate
value has been added to theh3::Event
enum that is returned byh3::Connection::poll()
to notify the application when a priority update has been received, and the newh3::Connection::take_last_priority_update()
method has been added to let applications retrieve the priority value for a specific prioritized element.
Full changelog at 0.12.0...0.13.0
🔨 0.12.0
Breaking Changes:
- The
Connection::session()
andConnection::peer_cert()
methods now return a&[u8]
slice instead of aVec<u8>
.
Highlights:
- The
quiche_conn_session()
function has been restored in the FFI API. - Many bug fixes and performance improvements.
Full changelog at 0.11.0...0.12.0
🔧 0.11.0
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()
andConfig::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 0.10.0...0.11.0
🚤 0.10.0
Breaking Changes:
- The new
StreamReset
value has been added to theError
enum. This can be returned byConnecttion::stream_recv()
to notify the application when the peer has reset a particular stream. - The new
Reset
value has been added to theh3::Event
enum. This is returned byh3::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 toh3::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 (seeConnection::dgram_send_vec()
andConnection::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 0.9.0...0.10.0
✨ 0.9.0
Breaking Changes:
- Many public APIs have been updated to support network path awareness (see below):
- The
accept()
andconnect()
functions now take astd::net::SocketAddr
parameter representing the address of the peer on the other side of the connection. - The
Connection::recv()
method takes aRecvInfo
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 additionalSendInfo
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
- The
InvalidStreamState
error value has been updated to include the stream ID that caused the error. - The
h3::Header
andh3::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 theSendInfo
structure for more details. - Several improvements to the CUBIC congestion control implementation.
- Many bug fixes and performance improvements.
Full changelog at 0.8.1...0.9.0
🤕 0.8.1
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 therecv_body()
method afterError::Done
is returned.
Full changelog at 0.8.0...0.8.1
🔥 0.8.0
Breaking Changes:
- The HTTP/3
Data
andDatagram
events are now edge-triggered like the other HTTP/3 events. This means that they will only be reported by thepoll()
method once. Applications will need to consume all the data buffered for those events' triggers to be re-armed.
Highlights:
STOP_SENDING
andRESET_STREAM
frames are now sent whenever a stream is shut down.- Outgoing QUIC packets are coalesced into the same UDP payload when possible.
- Added a few additional
Connection
helper methods:max_send_udp_payload_size()
,peer_error()
,source_id()
,destination_id()
. - Many bug fixes and performance improvements.
Full changelog at 0.7.0...0.8.0