·
2 commits
to master
since this release
Immutable
release. Only release title and notes can be modified.
This release updates webtransport-go to draft-16, and adds support for WebTransport flow control and session pooling.
New Features
- Added WebTransport session flow control for stream counts (
WT_MAX_STREAMSandWT_STREAMS_BLOCKED) and total stream data (WT_MAX_DATAandWT_DATA_BLOCKED). Configure initial receive limits withConfig.MaxIncomingStreams,Config.MaxIncomingUniStreams, andConfig.MaxIncomingDataonTransportorServer. Flow control is negotiated only when both peers advertise it and is required for multiple sessions on one connection. Stream-count flow control: #293, #298, #300, #301, #304, #311, #312, #324, #325; data flow control: #329, #331, #332, #333, #340; protocol validation and session pooling: #305, #342 - Added
ClientConnandTransport.NewClientConn, allowing applications to maintain multiple client QUIC connections and establish multiple concurrent WebTransport sessions on each connection.ClientConnalso implementshttp.RoundTripper: #344
Breaking Changes
Dialerwas renamed toTransport: #343
Other Changes
Stream,SendStream, andReceiveStreamnow exposeStreamID, returning the underlying QUIC stream ID: #347
Notable Fixes
SendStream.Writenow returns an error afterCloseorCancelWriteis called while the stream header is being sent asynchronously, preventing payload writes after the stream is closed or canceled: #328- Malformed capsules now close the session with
H3_DATAGRAM_ERROR: #299 - Client and server session setup now stops waiting for HTTP/3 SETTINGS when the QUIC connection closes: #346
- The client now waits for the QUIC handshake and rejects servers that don't support QUIC datagrams or stream reset partial delivery, returning a
RequirementsNotMetError: #351
What's Changed
- avoid buffering skipped capsules by @marten-seemann in #290
- extract capsule parsing into a separate file by @marten-seemann in #289
- fix missing context cancelation in Session.Open{Uni}StreamSync by @marten-seemann in #297
- move stream handling into incoming and outgoing maps by @marten-seemann in #294
- implement parsing and serialization of WT_MAX_STREAMS capsules by @marten-seemann in #293
- use H3_DATAGRAM_ERROR when parsing a capsule fails by @marten-seemann in #299
- implement handling of the peer’s stream limit by @marten-seemann in #298
- implement parsing and serialization of WT_STREAMS_BLOCKED capsule by @marten-seemann in #300
- ci: bump actions/checkout from 6 to 7 by @dependabot[bot] in #302
- ci: fix race condition in example workflow by @marten-seemann in #303
- implement capsule sending logic in the session by @marten-seemann in #301
- reject WT_MAX_STREAM_DATA and WT_STREAM_DATA_BLOCKED capsules by @marten-seemann in #305
- add support for sending WT_STREAMS_BLOCKED capsules by @marten-seemann in #304
- ci: remove unneeded staticcheck rule for quic.ConnectionTracing{ID, Key} by @marten-seemann in #308
- use a generic implementation for the outgoing streams map by @marten-seemann in #307
- use a generic implementation for the incoming streams map by @marten-seemann in #309
- reject WT_MAX_STREAMS that decrease the stream limit by @marten-seemann in #312
- send WT_MAX_STREAMS capsules to grant new stream credit by @marten-seemann in #311
- Send CONNECTION_CLOSE before tearing down the listener on Close() (0.11 regression) by @ItalyPaleAle in #295
- ci: bump golangci/golangci-lint-action from 9.2.1 to 9.3.0 by @dependabot[bot] in #322
- ci: bump docker/build-push-action from 7.2.0 to 7.3.0 by @dependabot[bot] in #320
- ci: bump docker/login-action from 4.2.0 to 4.4.0 by @dependabot[bot] in #321
- ci: bump docker/setup-qemu-action from 4.1.0 to 4.2.0 by @dependabot[bot] in #318
- ci: bump docker/setup-buildx-action from 4.1.0 to 4.2.0 by @dependabot[bot] in #319
- reject non-increasing WT_MAX_STREAMS limits by @marten-seemann in #324
- add a Config to set incoming and outgoing stream limits by @marten-seemann in #325
- move send and receive streams into separate files by @marten-seemann in #326
- reject stream writes while sending stream headers asynchronously by @marten-seemann in #328
- ci: run tests with race detector, fix race condition in test by @marten-seemann in #334
- ci: bump actions/setup-python from 6 to 7 by @dependabot[bot] in #336
- ci: bump actions/setup-go from 6 to 7 by @dependabot[bot] in #335
- split up unit and integration tests by @marten-seemann in #337
- README: add MediaMTX, any-sync and socket.io to notable users by @marten-seemann in #338
- README: update to draft-16 by @marten-seemann in #339
- update quic-go to v0.61.0, use the new capsule API by @marten-seemann in #323
- track total data sent on a WebTransport session by @marten-seemann in #329
- implement sending of WT_DATA_BLOCKED capsules by @marten-seemann in #331
- implement handling of WT_MAX_DATA capsules by @marten-seemann in #332
- implement sending of WT_MAX_DATA capsules by @marten-seemann in #333
- add data flow control to the Config, add an integration test by @marten-seemann in #340
- reject pooled sessions without flow control by @marten-seemann in #342
- rename the Dialer to Transport by @marten-seemann in #343
- introduce a ClientConn, make it possible to pool sessions by @marten-seemann in #344
- watch for connection closure while waiting for SETTINGS by @marten-seemann in #346
- expose QUIC stream IDs on WebTransport streams by @marten-seemann in #347
- ci: use deterministic Chrome versions for interop test by @marten-seemann in #350
- check server QUIC capabilities when dialing by @marten-seemann in #351
- ci: don’t cancel interop Docker image builds on master by @marten-seemann in #352
- ci: update ChromeDriver to 151.0.7922.47 for interop test by @marten-seemann in #349
- ci: bump docker/login-action from 4.4.0 to 4.5.1 by @dependabot[bot] in #354
- add an integration test for session pooling by @marten-seemann in #353
New Contributors
- @ItalyPaleAle made their first contribution in #295
Full Changelog: v0.11.0...v0.12.0