Releases: quic-go/quic-go
v0.49.0
In this release, we added support for HTTP client traces. We also fixed a large number of bugs that could lead to connection stalls, deadlocks and memory leaks. See the "Major Fixes" section for more details.
New Features
- http3: add support for client traces
net/http/httptrace.ClientTrace
: #4749. Thanks to @lRoccoon for the contribution!
Major Fixes
- fix accounting for lost RESET_STREAM frames in the stream, leading to potential connection stalls / deadlocks: #4804. Thanks to @Wondertan for reporting and testing the fix!
- fix memory leak when the connection ID is rotated when the CONNECTION_CLOSE packet is sent: #4852. Thanks to @MarcoPolo for debugging this issue and contributing a fix!
- http3: fix QUIC connection re-dialing logic: #4854, #4875, #4879
- trigger sending of a new packet when a MAX_DATA frame (connection-level flow control update) is queued: #4844
Transport.Close
was reworked: calls toTransport.Dial
are now canceled, and return the newly introducedErrTransportClosed
, as do calls toTransport.Listen
: #4883
Enhancements
- trace dropping of packets by the
Transport
when no server is set: #4789 - trace dropping of packets that the
Transport
doesn't send a stateless for: #4826 - drain received packets when the connection is closed: #4773
- add Prometheus metrics for sent and received packets: #4910
- reduce calls to
time.Now
all over the code base: #4731, #4885, #4886, #4906 - packetize DATA_BLOCKED frames in the same QUIC packet that caused us to block on connection-level flow control: #4845
- packetize STREAM_DATA_BLOCKED frames in the same QUIC packed that caused us to block on stream-level flow control: #4801
- we now don't enforce that only one
Transport
listens on any givennet.PacketConn
: #4851
Other Fixes
- drain the server's connection accept queue before returning
ErrClosed
fromAccept
: #4846. Thanks to @sukunrt for discovering this bug and providing very helpful reviews! - preserve the error returned from
SendStream.Write
if it is closed after is canceled: #4882 - fix race condition on concurrent calls to
Transport.Dial
andTransport.Close
: #4904 - qlog: fix logging of packet_in_flight on the metrics_updated event: #4895
- fix
errors.Is
error comparisons: #4824, #4825, #4877 - http3: fix race condition on concurrent calls to
http.Response.Body.Close
: #4798. Thanks to @RPRX for the contribution! - flowcontrol: reset the connection send window on 0-RTT rejection: #4764
- wait for connection to shut down when the Dial context is cancelled: #4872
- http3: the
http.Request.Body
is now properly closed on all code paths that return a non-nil
error: #4874 - NEW_CONNECTION_ID frames are now rejected when zero-length connection IDs are used, as required by the RFC: #4878
- the stream ID of STREAM_DATA_BLOCKED frames is now validated, as required by the RFC: #4836
- fix ECN markings of packets sent in GSO batches when the marking changes: #4835
- the AEAD used to calculate the Retry Integrity Tag is now created lazily, avoiding a panic on initialization when using Go 1.24 FIPS-only mode: #4916
- use a 24h maximum token age as default value for
Transport.MaxTokenAge
: #4763
Behind the Scenes
In the v0.48.0 release, we started migrating our test suite away from Ginkgo (tracking issue: #3652). This is an absolutely massive endeavor. Before we started, the number of LOC of Ginkgo tests was more than 41,000.
In this release, we're bringing this number down to less than 8,500 LOC: #4736, #4746, #4775, #4783, #4788, #4790, #4795, #4796, #4797, #4799, #4814, #4816, #4817, #4823, #4837, #4842, #4847, #4848, #4849, #4853, #4857, #4860, #4861, #4862, #4863, #4864, #4865, #4869, #4876, #4881, #4907.
There's still a lot of work ahead, but we'll hopefully be able to finish this item in the next couple of months.
Changelog
- fix arming of keep-alive timer after sending PMTUD probe packets by @marten-seemann in #4716
- README: add Flipt reverst by @markphelps in #4542
- closed_conn.go: avoid data race in handlePacket(). Fixes #4718. by @glycerine in #4720
- fix documentation for IP fragmentation socket options on Windows by @marten-seemann in #4724
- ci: update golangci-lint to v1.62.0 by @marten-seemann in #4725
- ci: simplify the go generate script by @marten-seemann in #4728
- use IP_PMTUDISC_PROBE instead of IP_PMTUDISC_DO on Linux by @marten-seemann in #4729
- flowcontrol: fix start of the flow-control auto-tuning period by @marten-seemann in #4730
- flowcontrol: avoid calling time.Now(), pass time as a function parameter by @marten-seemann in #4731
- logging: use code generation to generate the multiplexed tracers by @marten-seemann in #4677
- flowcontrol: fix timestamp used for receive window auto-tuning by @marten-seemann in #4735
- flowcontrol: rewrite tests, use require instead of Ginkgo by @marten-seemann in #4734
- ci: disable the unparam linter for tests by @marten-seemann in #4738
- enable DPLPMTUD on macOS dual-stack sockets by @marten-seemann in #4723
- remove the Token field from the StatelessResetError by @marten-seemann in #4740
- wait until handshaking connections have terminated when closing server by @marten-seemann in #4743
- build(deps): bump codecov/codecov-action from 4 to 5 by @dependabot in #4741
- qlog: simplify QLOGDIR test by using t.Setenv and t.TempDir by @marten-seemann in #4745
- migrate HTTP/3 integration tests away from Ginkgo by @marten-seemann in #4746
- fix documentation for ConnectionState.SupportsDatagrams by @marten-seemann in #4754
- migrate integration tests away from Ginkgo by @marten-seemann in #4736
- fix timeout integration tests on Windows by @marten-seemann in #4758
- introduce a test helper function to create a new UDP socket on localhost by @marten-seemann in #4756
- actually send 0-length connection IDs in integration test by @marten-seemann in #4757
- fix flaky multiplex integration test by @marten-seemann in #4760
- ci: use go test in integration tests by @marten-seemann in #4759
- improve stream limit 0-RTT integration test by @marten-seemann in #4761
- use a 24h maximum token age if Transport.MaxTokenAge is unset by @marten-seemann in #4763
- fix flaky non-QUIC packet multiplexing test by @marten-seemann in #4766
- migrate framer tests away from Ginkgo by @marten-seemann in #4775
- update GoMock to v0.5.0 by @marten-seemann in #4776
- flowcontrol: reset the connection send window when 0-RTT is rejected by @marten-seemann in #4764
- utils: remove unused now parameter from RTTStats.UpdateRTT by @marten-seemann in #4780
- ci: fix Codecov environment variables by @marten-seemann in #4786
- migrate the transport tests away from Ginkgo by @marten-seemann in #4783
- trace dropping of packets by the Transport when no server is set by @marten-seemann in #4789
- migrate the config tests away from Ginkgo by @marten-seemann in #4790
- remove unneeded Connection.GetVersion method by @marten-seemann in #4792
- wire: don't allocate an empty data slice for empty STREAM frames by @marten-seemann in #4794
- migrate the buffer pool tests away from Ginkgo by @marten-seemann in #4796
- migrate the TokenStore tests away from Ginkgo by @marten-seemann in #4795
- migrate platform-dependent UDP socket test code away from Ginkgo by @marten-seemann in #4797
- migrate the packet packer tests away from Ginkgo by @marten-seemann in #4788
- ci: disable SA1029 staticcheck (context key check) in tests by @marten-seemann in #4802
- http3: allow concurrent calls to Body.Close by @RPRX in #4798
- migrate the stream tests away from Ginkgo by @marten-seemann in #4799
- fix flaky MITM packet injection test by @marten-seemann in #4810
- fix flaky TestSendStreamLargeWrites by @marten-seemann in #4813
- migrate multiplexer tests away from Ginkgo by @marten-seemann in #4814
- don't generate empty STREAM frames in the send stream by @marten-seemann in https://github.com/quic-go/quic-go/pu...
v0.48.2
This patch release contains fixes for three bugs, including a patch for CVE-2024-53259 (details).
Changelog
- fix arming of keep-alive timer after sending PMTUD probe packets by @marten-seemann in #4716
- fix race condition in closed connection packet handling by @glycerine (#4720)
- use IP_PMTUDISC_PROBE instead of IP_PMTUDISC_DO on Linux by @marten-seemann (#4729)
Full Changelog: v0.48.1...v0.48.2
v0.48.1
This patch releases fixes a panic in the shutdown logic of the http3.Server
that was introduced in v0.48.0. Thanks to @WeidiDeng for the fix!
Changelog
- http3: fix graceful server shutdown by @WeidiDeng in #4707
Full Changelog: v0.48.0...v0.48.1
v0.48.0
New Features
The http3.Server
now supports graceful shutdown: calling Shutdown
stops the server from accepting new connections, and new HTTP requests on existing connections. It continues serving existing connections until all active requests have completed (or the context is canceled).
On the wire, graceful shutdown is signaled by sending a GOAWAY frame. This tells the client that the server will not accept any new requests. Clients are expected to finish existing requests and then close the QUIC connection.
Client-side support for graceful shutdown is not implemented yet (see #153).
Breaking Changes
- The HTTP/3 client API was made more consistent with the Go standard library's HTTP/1 and HTTP/2 naming: #4693
- The deprecated
qlog.DefaultTracer
function was removed: #4697 - The deprecated
http3.Server.SetQuicHeader
method andhttp3.ListenAndServe
were removed: #4698 http3.Server.Close
now closes immediately all QUIC connections: #4689
Note that all connection passed to http3.Server.ServeQUICConn
need to be closed by the caller, before calling http3.Server.Close
.
Notable Fixes
- Canceling a stream after connection termination now doesn't change the error returned from
Stream.Write
andStream.Read
(thanks to @sukunrt for the fix): #4673 - HTTP/3 Capsule Parsing logic didn't work for capsules that weren't read with a single
Read
call: #4683
Behind The Scenes
We've started migrating our test suite away from Ginkgo (tracking issue: #3652), and towards a more idiomatic approach to testing Go code (using require). This is a massive endeavour, as our test suite is around 41k LOC.
In this release, a large number of Go packages were translated: #4640, #4641, #4642, #4643, #4649, #4650, #4652, #4662, #4670, #4671, #4675, #4667, #4676, #4680, #4681.
In the upcoming release(s), we will continue this work.
Changelog
- qlog: migrate tests away from Ginkgo by @marten-seemann in #4640
- logging: migrate tests away from Ginkgo by @marten-seemann in #4641
- qerr: move away from Ginkgo by @marten-seemann in #4649
- qtls: migrate tests away from Ginkgo by @marten-seemann in #4642
- interop: move away from Ginkgo by @marten-seemann in #4652
- protocol: move away from Ginkgo by @marten-seemann in #4650
- quicvarint: migrate tests away from Ginkgo by @marten-seemann in #4662
- ringbuffer: migrate test away from Ginkgo by @marten-seemann in #4671
- testdata: migrate tests away from Ginkgo by @marten-seemann in #4670
- utils: remove unused methods and constructor from RTTStats by @marten-seemann in #4672
- wire: migrate tests away from Ginkgo by @marten-seemann in #4643
- stream: don't cancel stream after shutdown by @sukunrt in #4673
- utils: migrate tests away from Ginkgo by @marten-seemann in #4675
- versionnegotiation: migrate tests away from Ginkgo by @marten-seemann in #4676
- proxy: migrate tests away from Ginkgo by @marten-seemann in #4680
- fuzzing: migrate tests for helper function away from Ginkgo by @marten-seemann in #4681
- http3: fix capsule parsing by @marten-seemann in #4683
- http3: immediately close all connections on Server.Close by @marten-seemann in #4689
- handshake: migrate tests away from Ginkgo by @marten-seemann in #4667
- http3: send GOAWAY when server is shutting down by @WeidiDeng and @marten-seemann in #4691
- http3: improve the client API by @marten-seemann in #4693
- http3: export the Capsule-Protocol header value by @marten-seemann in #4690
- http3: don't expose ClientConn.HandleUnidirectionalStreams by @marten-seemann in #4695
- http3: improve documentation for Transport and ClientConn by @marten-seemann in #4696
- qlog: remove deprecated DefaultTracer function by @marten-seemann in #4697
- http3: remove deprecated ListenAndServe and Server.SetQuicHeader by @marten-seemann in #4698
- http3: add (deprecated) type aliases for RoundTripper and SingleDestinationRoundTripper by @marten-seemann in #4699
- http3: output panic stack trace as a string by @marten-seemann in #4700
- http3: rename Server.CloseGracefully to Shutdown by @marten-seemann in #4701
Full Changelog: v0.47.0...v0.48.0
v0.47.0
New Features
This release adds support for HTTP/3 Trailers, for both the server and the client side (#4581, #4630, #4656, #4639). Trailers work exactly the same way as for HTTP/1.1 and HTTP/2.
A big thank you to @sudorandom for contributing this feature!
Fixes
- idle timeout calculation when the peer sends a
max_idle_timeout
of 0 (or omits the transport parameter): #4666 - fix handling of corrupted coalesced 1-RTT packets: #4663
- qpack: don't reject literal field lines with name references if
N
bit is set to 1: quic-go/qpack#52 - http3: correctly set the
http.Response.ContentLength
on responses that don't set theContent-Length
header: #4645 - http3: reject connection-specific header fields (
Connection
,Keep-Alive
,Proxy-Connection
,Transfer-Encoding
,Upgrade
andTE != "trailers"
): #4646, #4655
Breaking Changes
quic.VersionNumber
andlogging.VersionNumber
were removed: #4627
Heads-Up
@sukunrt recently discovered and reported a race condition in the new time.Timer
stopping logic introduced in Go 1.23. This manifests as a connection deadlock in quic-go. See #4659 and golang/go#69312 for more details. The new behavior is enabled when compiling with Go 1.23.x, and when the Go version in go.mod
is set to Go 1.23.x.
Until this issue is fixed, it is recommended to either use Go 1.22.x, or to use GODEBUG="asynctimerchan=1"
when compiling quic-go.
Update (Oct 1st 2024)
The Go project backported the fix (golang/go#69333) to the 1.23 branch, and released it in Go 1.23.2. This resolves above-mentioned issue. quic-go can now be built with Go 1.23.2, without the need to set any GODEBUG flags.
Changelog
- remove deprecated quic.VersionNumber and logging.VersionNumber by @marten-seemann in #4627
- ci: migrate race detector test to GitHub Actions by @marten-seemann in #4635
- bump Go version in go.mod, stop testing on Go 1.21 by @marten-seemann in #4633
- http3: add client-side HTTP Trailer support by @sudorandom in #4581
- http3: reject pseudo header fields in trailers by @marten-seemann in #4639
- http3: reject the Transfer-Encoding header field by @marten-seemann in #4646
- http3: set ContentLength to -1 if no Content-Length header is set by @marten-seemann in #4645
- interop: simplify API of http09.Server by @marten-seemann in #4651
- update qpack to v0.5.0 by @marten-seemann in #4653
- http3: reject connection-specific header fields, check value of TE by @marten-seemann in #4655
- interop: fix server setup for the HTTP/0.9 server by @marten-seemann in #4658
- protocol: use the packet number decoding / encoding logic from the RFC by @marten-seemann in #4661
- fix handling of corrupted coalesced 1-RTT packets by @marten-seemann in #4663
- http3: add HTTP Trailer support for servers by @sudorandom in #4630
- ci: control concurrency of the interop Docker image builder by @marten-seemann in #4665
- update qpack to v0.5.1 by @marten-seemann in #4664
- http3: initialize trailer map with empty trailer entries when parsing the header by @sudorandom in #4656
- http3: avoid re-parsing of the Content-Length header for responses by @marten-seemann in #4648
- fix calculation of idle timeout when the peer set max_idle_timeout to 0 by @marten-seemann in #4666
New Contributors
- @sudorandom made their first contribution in #4581
Full Changelog: v0.46.0...v0.47.0
v0.46.0
New Features
- The
http3.Server
now has anIdleTimeout
field: #4587. It works analogous to its HTTP/2 standard library equivalent: If no requests are received for the idle timeout period, the underlying QUIC connection is closed. Thanks to @rs for implementing. - The qlog file format was updated to the current qlog draft, which now uses JSON sequences (JSON-SEQ): #4609. qlog files now have the file extension
.sqlog
.
Breaking Changes
logging.VersionNumber
was renamed tologging.Version
(#4621), mirroring a similar renaming ofquic.VersionNumber
toquic.Version
introduced in an earlier releaseinternal_error
TLS alerts are now sent as QUIC CRYPTO_ERRORs (and not INTERNAL_ERRORs): #4601
Other Notable Changes
The stream logic for queueing stream-related control frames (RESET_STREAM, STOP_SENDING, MAX_STREAM_DATA, STREAM_DATA_BLOCKED) was completely rewritten. This makes quic-go more resilient to memory exhaustion attacks similar to those that we've seen earlier this year (1 and 2). It also enables further frame packing optimizations in the future.
Changelog
- metrics: create a new tracer on every call of DefaultConnectionTracer by @marten-seemann in #4560
- metrics: use the default metrics tracer in integration tests by @marten-seemann in #4562
- example: remove Dockerfile by @marten-seemann in #4568
- http3: fix race condition between Server.Serve and Server.Close by @marten-seemann in #4572
- http3: allow re-dialing of connection after a dial error by @marten-seemann in #4573
- fix stream documentation for StreamError return values by @mengelbart in #4575
- build(deps): bump docker/build-push-action from 5 to 6 by @dependabot in #4576
- use a net.ErrClosed when returning Accept from a closed server by @marten-seemann in #4569
- handshake: ignore unknown QUIC events from crypto/tls by @marten-seemann in #4577
- introduce a StreamLimitReachedError for Connection.Open{Uni}Stream by @marten-seemann in #4579
- ci: use Go 1.23rc2 for unit and integration tests by @marten-seemann in #4571
- handshake: remove unneeded tokenProtector interface by @marten-seemann in #4585
- ackhandler: optimize received packet tracking by @marten-seemann in #4584
- move connection logging to a separate file, absorb logutils package by @marten-seemann in #4586
- simplify handling of CRYPTO frames, remove cryptoDataHandler interface by @marten-seemann in #4588
- wire: optimize parsing of long header packets by @marten-seemann in #4589
- remove trivial IPv4 helper function by @marten-seemann in #4591
- wire: simplify packet number parsing, remove utils.ByteOrder interface by @marten-seemann in #4590
- utils: remove scarcely used time helper functions by @marten-seemann in #4593
- remove mock TokenStore implementation by @marten-seemann in #4597
- remove unused framer interface by @marten-seemann in #4599
- refactor frame packing to logic to not access the streams map by @marten-seemann in #4596
- ackhandler: reduce allocations for tracking sent packets by @marten-seemann in #4602
- mark stream completed when CancelWrite is called after receiving STOP_SENDING by @sukunrt in #4605
- simplify generation of STREAM_DATA_BLOCKED frames by @marten-seemann in #4608
- reduce allocations when handling crypto data by @marten-seemann in #4615
- handshake: remove gomock tls.ClientSessionCache implementation by @marten-seemann in #4619
- wire: speed up parsing of headers with arbitrary length connection IDs by @marten-seemann in #4618
- remove trivial mock implementation of the cryptoStream interface by @marten-seemann in #4620
- simplify frame queuing logic for 0-RTT rejection by @marten-seemann in #4607
- handshake: generate CRYPTO_ERRORs for internal_error TLS alerts by @marten-seemann in #4601
- remove unneeded cryptoStream interface by @marten-seemann in #4617
- logging: rename VersionNumber to Version by @marten-seemann in #4621
- implement qlog JSON-SEQ format, bump qlog version by @marten-seemann in #4609
- queue stream-related control frames in the respective stream by @marten-seemann in #4610
- http3: implement server idle timeout support by @rs in #4587
- only declare send stream completed when RESET_STREAM is acknowledged by @marten-seemann in #4613
- fix logging of short header connection IDs by @marten-seemann in #4626
Full Changelog: v0.45.0...v0.46.0
v0.45.2
v0.45.1
This patch release contains two fixes:
- The new Prometheus metrics DefaultConnectionTracer was implemented incorrectly, leading to incorrect metrics being collected: #4560
- The http3.RoundTripper was caching the dial error (#4561). Instead, we should re-dial the QUIC connection: #4573
Full Changelog: v0.45.0...v0.45.1
v0.45.0
New Features
Prometheus
quic-go now exports a few Prometheus metrics, allowing users to get an aggregate picture of what's going on inside their QUIC stack. Currently, only a basic set of metrics is exposed, but we plan to track more metrics in the future (#4554). Head to the documentation to learn how to enable metrics collection.
Prometheus metrics can be used (among others) to build Grafana dashboards, and we provide a sample Grafana dashboard in metrics/dashboard.
Tracing Handshake Progression using a custom context.Context
Users can now set and modify the context that's used on all callbacks called during the handshake, and returned from Connection.Context
(#4507 and #4536). This allows identifying the connection as it progresses through the different handshake stages. The documentation has more details and code samples.
Better Path MTU Discovery
Path MTU Discovery is used to automatically determine the available MTU of the path, which allows us to send full-size packets. This is especially relevant for high-bandwidth transfers.
Our old PMTUD algorithm was susceptible to packet loss, leading to suboptimal results if an MTU probe packet experienced packet loss in the network. The new algorithm (#4545) is now resilient to the consecutive loss of up to two probe packets.
Breaking Changes
Connection.NextConnection
now takes a context and correctly handles handshake failures (#4551)- qlog:
DefaultTracer
was renamed toDefaultConnectionTracer
(#4556) - The
ConnectionTracingKey
is now deprecated. UseTransport.ConnContext
to set your own tracing key (#4532)
Fixes
- The server now correctly restores its QUIC transport parameters when resuming 0-RTT using a
tls.Config
that setsGetConfigForClient
: (#4550)
Changelog
- introduce Transport.ConnContext, use client's context on the connection by @marten-seemann in #4507
- deprecate the ConnectionTracingKey by @marten-seemann in #4532
- http3: fix flaky Extended CONNECT unit test by @marten-seemann in #4537
- remove unneeded stream context cancellation on shutdown by @marten-seemann in #4535
- ci: set timeout for jobs by @marten-seemann in #4538
- http3: fix another flaky Extended CONNECT test by @marten-seemann in #4539
- remove unused SetMax method of the mtuDiscoverer by @marten-seemann in #4543
- http3: use the connection, not the stream context, on the server side by @marten-seemann in #4510
- use a chan instead of a context to track handshake completion by @marten-seemann in #4547
- remove unused function parameter from qtls.SetupConfigForServer by @marten-seemann in #4549
- fix the server's 0-RTT rejection logic when using GetConfigForClient by @marten-seemann in #4550
- add some Prometheus metrics by @marten-seemann in #4534
- make Path MTU Discovery resilient to random packet loss by @marten-seemann in #4545
- add context to EarlyConnection.NextConnection, handle handshake failures by @marten-seemann in #4551
- pass a context to Transport.ConnContext by @marten-seemann in #4536
- metrics: simplify constructor for the default connection tracer by @marten-seemann in #4555
- qlog: rename DefaultTracer to DefaultConnectionTracer by @marten-seemann in #4556
- fix incorrect documentation for Config.DisablePathMTUDiscovery by @marten-seemann in #4558
- metrics: add an example Grafana dashboard by @marten-seemann in #4559
Full Changelog: v0.44.0...v0.45.0
v0.44.0
v0.44 contains a lot of fixes related to HTTP Datagrams, new logic to determine (and configure) the QUIC packet size, as well as a significant speedup of the various parsers.
HTTP Datagram-related Fixes
The last release introduced support for HTTP Datagrams (RFC 9297). This release resolves a number of problems we discovered in the initial implementation:
- reject sending of DATAGRAM frames that exceed the currently available MTU (#4497)
- http3: deadline errors are now ignored in stream state tracking (#4495)
- http3: refuse to send HTTP datagrams associated with a closed stream (#4488)
- http3: use the send stream context for tracking the stream state (#4489)
- http3: fix memory leak caused by stream state tracking (#4523). Thanks to @GeorgeMac for debugging and fixing!
QUIC Packet Size and Path MTU Discovery
- The initial packet size is now configurable via
quic.Config
. Most users should not use this config option, but instead rely on Path MTU discovery (#4503) - The client's initial packet size was increased to 1280 bytes (#4500)
- Respect the client's
max_udp_payload_size
transport parameter (#4514) - qlog: add support for the
mtu_updated
event (#4517)
Speeding up Parsing the variable-length Integers
The QUIC varint parser was rewritten to act on byte slices instead of a bytes.Reader
. This is significantly faster (#4475). The new parser is now used for parsing QUIC frames (#4484), the QUIC packet header (#4481), the QUIC transport parameters (#4483) and HTTP datagrams (#4478).
Other Notable Changes
- http3:
ParseCapsule
now returns anio.EOF
(and not anio.UnexpectedEOF
) if the underlying reader returns anio.EOF
on the first byte (#4476) - http3:
ListenAndServe
was renamed toListenAndServeTLS
(#4522). Thanks to @ETZhangSX! - http3: reserved frame types now cause a connection error, as required by the RFC (#4467)
- http3: pass the correct
Connection
to theConnContext
callback (#4480). Thanks to @rthellend!
quic-go needs your support!
Is your project / company relying on quic-go?
Please consider funding the project. Any support is highly appreciated!
What's Changed
- build(deps): bump golangci/golangci-lint-action from 4 to 5 by @dependabot in #4472
- http3: return an io.EOF when parsing a capsule fails on the first byte by @marten-seemann in #4476
- quicvarint: add a function to parse a varint from a byte slice by @marten-seemann in #4475
- http3: avoid allocation when parsing the datagram's quarter stream ID by @marten-seemann in #4478
- http3: Pass original Conn to ConnContext by @rthellend in #4480
- http3: reject reserved frame types by @marten-seemann in #4467
- fix capture of loop variable in connection probe packet tests by @marten-seemann in #4486
- http3: refuse to send datagrams associated with a closed stream by @marten-seemann in #4488
- http3: use the stream context to detect when the send side is closed by @marten-seemann in #4489
- wire: use quicvarint.Parse to when parsing transport parameters by @marten-seemann in #4482
- wire: use quicvarint.Parse when parsing frames by @marten-seemann in #4484
- wire: refactor header parsing to use quicvarint.Parse by @marten-seemann in #4481
- wire: reduce allocations when parsing transport parameters by @marten-seemann in #4483
- fix incorrect reuse of UDP connection in handshake benchmark by @marten-seemann in #4491
- http3: fix race condition when creating state tracking stream by @marten-seemann in #4493
- ci: run benchmarks by @marten-seemann in #4492
- http3: ignore deadline errors when tracking QUIC stream states by @marten-seemann in #4495
- ci: update golangci-lint-action to v6 and golangci-lint to v1.58.0 by @marten-seemann in #4494
- ci: disable exhaustive linter for test files by @marten-seemann in #4499
- add an integration test for DPLPMTUD by @marten-seemann in #4498
- reject sending of DATAGRAM frames that exceed the current MTU by @marten-seemann in #4497
- wire: write configured value of max_udp_payload_size transport parameter by @marten-seemann in #4501
- increase initial packet size to 1280 bytes (for both IPv4 and IPv6) by @marten-seemann in #4500
- make the initial packet size configurable by @marten-seemann in #4503
- update all golang.org/x dependencies by @marten-seemann in #4506
- initialize the MTU discoverer when processing the transport parameters by @marten-seemann in #4514
- retry the MTU integration test up to 3 times by @marten-seemann in #4519
- logging / qlog: add support for DPLPMTUD by @marten-seemann in #4517
- http3: rename ListenAndServe to ListenAndServeTLS by @ETZhangSX in #4522
- fix(http3): handle streamStateSendAndReceiveClosed in onStreamStateChange by @GeorgeMac in #4523
New Contributors
- @ETZhangSX made their first contribution in #4522
Full Changelog: v0.43.0...v0.44.0