v0.38.0
Generic Segmentation Offload (GSO)
This release re-enables GSO by default. We shipped GSO support in v0.36.0 (see the release notes for that release for an explanation of what GSO is), but had to disable it due to problems in certain configurations and on certain platforms. We believe that we now manage to properly detect these and automatically fall back to the non-GSO code path (#4005). That said, there are a lot of different systems and configurations around, and kernel GSO support seems to be a bit brittle, so if you encounter any problems, please let us know in an issue.
Demultiplexing QUIC
The QUIC header is designed such that it can easily be demultiplexed from other common UDP-based protocols, such STUN, RTP, TURN, DTLS, etc. (see RFC 9443 for details). In this release, we added a Transport.ReadNonQUICPacket
method (#3992) that allows the application to retrieve non-QUIC packets arriving on the underlying UDP socket. The existing Transport.WriteTo
can be used to send (non-QUIC) packets.
Other Notable Changes
- Support for QUIC Datagrams (RFC 9221) is now saved in the session ticket and can be used when doing 0-RTT resumption: #4013
- crypto/tls errors are now returned on the
TransportError
and can be obtained using error assertions: #4015 - The code point for HTTP datagrams (RFC 9297) was changed from the value used for draft versions to the value used in the RFC: #3588
- For small HTTP responses, the Content-Length header is automatically added: #3989
Changelog
- check transport parameters after 0-RTT resumption by @tanghaowillow in #3985
- update qtls to restrict RSA keys in certificates to <= 8192 bits by @marten-seemann in #4012
- set a net.Conn for tls.ClientHelloInfo.Conn used by GetCertificate by @marten-seemann in #4014
- add error handling when confirming handshake on HANDSHAKE_DONE frames by @marten-seemann in #4017
- add tls.ClientHelloInfo.Conn for recursive GetConfigForClient calls by @marten-seemann in #4016
- fix compatibility with API breaking change in Go 1.21 by @elagergren-spideroak in #4020
- README: fix invocation of Go routine in example by @gokpm in #4019
- http3: change code point for HTTP datagrams to RFC 9297 by @kokes in #3588
- integrationtests: fix proxy test on Windows by @egonelbre in #4023
- http3: remove leftover ALPN constant for draft-29 by @marten-seemann in #4027
- ignore QUICConn.SendSessionTicket error if session tickets are disabled by @marten-seemann in #4030
- handshake: use the correct hash function for TLS_AES_256_GCM_SHA384 by @marten-seemann in #4031
- add OSS-Fuzz badge to README by @marten-seemann in #3942
- store the server port as an int, not a string, in HTTP tests by @marten-seemann in #3959
- automatically set the tls.Config.ServerName if unset by @marten-seemann in #4032
- handshake fuzzer: fix TLS handshake sequence by @marten-seemann in #4033
- ci: also run integration tests on Windows and macOS by @marten-seemann in #3987
- handshake fuzzer: fix setting of cipher suites by @marten-seemann in #4037
- enable GSO, disable if sending fails for a particular address by @marten-seemann in #4005
- expose crypto/tls errors on the TransportError by @marten-seemann in #4015
- reassemble post-handshake TLS messages before passing them to crypto/tls by @marten-seemann in #4038
- protocol: add string representation for ECN values by @marten-seemann in #4008
- save the max_datagram_frame_size transport parameter in the session ticket by @tanghaowillow in #4013
- add a method to retrieve non-QUIC packets from the Transport by @marten-seemann in #3992
- ci: build interop Docker image for pushes to master, and for releases by @marten-seemann in #4035
- wire: always set the QUIC bit for Version Negotiation packets by @marten-seemann in #3991
- http3: automatically add content-length for small responses by @WeidiDeng in #3989
New Contributors
- @tanghaowillow made their first contribution in #3985
- @elagergren-spideroak made their first contribution in #4020
- @gokpm made their first contribution in #4019
- @kokes made their first contribution in #3588
Full Changelog: v0.37.1...v0.38.0