v0.39.0
·
272 commits
to master
since this release
New Features
- quic-go now uses feeds ECN signals into its congestion controller (#4059). ECN is used by routers to signal congestion before queues overflow (and packets are dropped). When using ECN, there are a number of failure modes, which necessitates some rather complex validation logic, see section 13.4 of RFC 9000 for details. ECN support can be disabled by setting the
QUIC_GO_DISABLE_ECN
environment variable totrue
. - The HTTP/3 package introduced a
http3.Error
, making the errors returned by the http3 package more useful, and allowing easy assertions of the HTTP/3 error codes defined in RFC 9114: #4039
Other Changes
- The key used to encrypt resumption tokens can now be configured using using
Transport.TokenGeneratorKey
: #4066 - The RTT is now saved in session tickets, even when not using 0-RTT, allowing for faster session resumption: #4042
- The reason for dial cancelations is now returned, when the context is canceled using a
context.CancelCauseFunc
: #4078
When using Go 1.21, make sure to build with (at least) Go 1.21.1, as this release fixes a remote-triggered panic in crypto/tls. See the release announcement for details.
Breaking Changes
Config.DisableVersionNegotiationPackets
was moved to theTransport
: #4047Config.MaxTokenAge
was moved to theTransport
: #4084Config.MaxRetryTokenAge
was removed. The age limit for Retry tokens is now set to twice the handshake timeout: #4064- The handshake timeout is now set to twice the handshake idle timeout: #4063. For clients, it is recommend to limit the duration of the handshake by using setting the context on the
Dial
call. - The
logging.Tracer
andlogging.ConnectionTracer
are now structs (not interfaces): #4082
Please support quic-go!
Is your project / company relying on quic-go? Please consider funding the project. Any support is highly appreciated!
Changelog
- ci: fix integration test running with and without GSO by @marten-seemann in #4043
- ci: fix syntax error in integration test workflow by @marten-seemann in #4048
- fix flaky version negotiation connection unit test by @marten-seemann in #4052
- switch from unmaintained golang/mock to go.uber.org/mock by @marten-seemann in #4050
- move the DisableVersionNegotiationPackets flag to the Transport by @marten-seemann in #4047
- move GSO control message handling to the oobConn by @marten-seemann in #4056
- integration tests: fix connection timeout in 0-RTT test by @tanghaowillow in #4060
- ackhandler: rename variables to follow RFC 9002 terminology by @marten-seemann in #4062
- ci: update GitHub checkout and setup-go actions to v4 by @marten-seemann in #4067
- update qtls-go1-20 to v0.3.4 by @marten-seemann in #4068
- remove TLS post-handshake message reassembly logic by @marten-seemann in #4073
- ackhandler: use the receive time of the Retry packet for RTT estimation by @marten-seemann in #4070
- set the handshake timeout to twice the handshake idle timeout by @marten-seemann in #4063
- remove Config.MaxRetryTokenAge, set it to the handshake timeout by @marten-seemann in #4064
- randomize the serialization order of control frames by @marten-seemann in #4069
- add ECN support by @marten-seemann in #4059
- save the RTT in non-0-RTT session tickets by @tanghaowillow in #4042
- remove duplicate mocks for the Tracer and the ConnectionTracer by @marten-seemann in #4076
- ackhandler: detect ECN mangling by @marten-seemann in #4080
- ci: clean up Codecov ignore list by @marten-seemann in #4081
- expose GSO usage through ConnectionState by @birneee in #4083
- add a Transport config option for the key used to encrypt tokens by @marten-seemann in #4066
- http09: increase the startup timeout in tests by @marten-seemann in #4071
- ci: fail if any Go files contain an ignore directive by @marten-seemann in #4055
- ci: combine the go generate workflow with the linting workflow by @marten-seemann in #4053
- integrate ClusterFuzzLite by @marten-seemann in #4034
- http3: introduce an HTTP/3 error type by @marten-seemann in #4039
- make the logging.Tracer and logging.ConnectionTracer a struct by @marten-seemann in #4082
- move MaxTokenAge configuration option to the Transport by @marten-seemann in #4084
- return the cancellation cause for cancelled dials by @marten-seemann in #4078
- remove unused unknownPacketHandler interface by @marten-seemann in #4093
- ackhandler: don't fail ECN validation if less than 10 testing packets are lost by @marten-seemann in #4088
- ackhandler: fix ECN mangling detection when packets are lost by @marten-seemann in #4089
- README: add Hysteria by @tobyxdd in #4085
- update gomock to v0.3.0 by @marten-seemann in #4087
Full Changelog: v0.38.1...v0.39.0