quic-go/quic-go (github.com/quic-go/quic-go)
### [`v0.44.0`](https://togithub.com/quic-go/quic-go/releases/tag/v0.44.0)
[Compare Source](https://togithub.com/quic-go/quic-go/compare/v0.43.1...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 ([https://github.com/quic-go/quic-go/pull/4497](https://togithub.com/quic-go/quic-go/pull/4497))
- http3: deadline errors are now ignored in stream state tracking ([https://github.com/quic-go/quic-go/pull/4495](https://togithub.com/quic-go/quic-go/pull/4495))
- http3: refuse to send HTTP datagrams associated with a closed stream ([https://github.com/quic-go/quic-go/pull/4488](https://togithub.com/quic-go/quic-go/pull/4488))
- http3: use the send stream context for tracking the stream state ([https://github.com/quic-go/quic-go/pull/4489](https://togithub.com/quic-go/quic-go/pull/4489))
- http3: fix memory leak caused by stream state tracking ([https://github.com/quic-go/quic-go/pull/4523](https://togithub.com/quic-go/quic-go/pull/4523)). Thanks to [@GeorgeMac](https://togithub.com/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 ([https://github.com/quic-go/quic-go/pull/4503](https://togithub.com/quic-go/quic-go/pull/4503))
- The client's initial packet size was increased to 1280 bytes ([https://github.com/quic-go/quic-go/pull/4500](https://togithub.com/quic-go/quic-go/pull/4500))
- Respect the client's `max_udp_payload_size` transport parameter ([https://github.com/quic-go/quic-go/pull/4514](https://togithub.com/quic-go/quic-go/pull/4514))
- qlog: add support for the `mtu_updated` event ([https://github.com/quic-go/quic-go/pull/4517](https://togithub.com/quic-go/quic-go/pull/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 ([https://github.com/quic-go/quic-go/pull/4475](https://togithub.com/quic-go/quic-go/pull/4475)). The new parser is now used for parsing QUIC frames ([https://github.com/quic-go/quic-go/pull/4484](https://togithub.com/quic-go/quic-go/pull/4484)), the QUIC packet header ([https://github.com/quic-go/quic-go/pull/4481](https://togithub.com/quic-go/quic-go/pull/4481)), the QUIC transport parameters ([https://github.com/quic-go/quic-go/pull/4483](https://togithub.com/quic-go/quic-go/pull/4483)) and HTTP datagrams ([https://github.com/quic-go/quic-go/pull/4478](https://togithub.com/quic-go/quic-go/pull/4478)).
#### Other Notable Changes
- http3: `ParseCapsule` now returns an `io.EOF` (and not an `io.UnexpectedEOF`) if the underlying reader returns an `io.EOF` on the first byte ([https://github.com/quic-go/quic-go/pull/4476](https://togithub.com/quic-go/quic-go/pull/4476))
- http3: `ListenAndServe` was renamed to `ListenAndServeTLS` ([https://github.com/quic-go/quic-go/pull/4522](https://togithub.com/quic-go/quic-go/pull/4522)). Thanks to [@ETZhangSX](https://togithub.com/ETZhangSX)!
- http3: reserved frame types now cause a connection error, as required by the RFC ([https://github.com/quic-go/quic-go/pull/4467](https://togithub.com/quic-go/quic-go/pull/4467))
- http3: pass the correct `Connection` to the `ConnContext` callback ([https://github.com/quic-go/quic-go/pull/4480](https://togithub.com/quic-go/quic-go/pull/4480)). Thanks to [@rthellend](https://togithub.com/rthellend)!
#### quic-go needs your support!
Is your project / company relying on quic-go?
Please consider [funding the project](https://togithub.com/sponsors/marten-seemann). Any support is highly appreciated!
#### What's Changed
- build(deps): bump golangci/golangci-lint-action from 4 to 5 by [@dependabot](https://togithub.com/dependabot) in [https://github.com/quic-go/quic-go/pull/4472](https://togithub.com/quic-go/quic-go/pull/4472)
- http3: return an io.EOF when parsing a capsule fails on the first byte by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4476](https://togithub.com/quic-go/quic-go/pull/4476)
- quicvarint: add a function to parse a varint from a byte slice by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4475](https://togithub.com/quic-go/quic-go/pull/4475)
- http3: avoid allocation when parsing the datagram's quarter stream ID by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4478](https://togithub.com/quic-go/quic-go/pull/4478)
- http3: Pass original Conn to ConnContext by [@rthellend](https://togithub.com/rthellend) in [https://github.com/quic-go/quic-go/pull/4480](https://togithub.com/quic-go/quic-go/pull/4480)
- http3: reject reserved frame types by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4467](https://togithub.com/quic-go/quic-go/pull/4467)
- fix capture of loop variable in connection probe packet tests by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4486](https://togithub.com/quic-go/quic-go/pull/4486)
- http3: refuse to send datagrams associated with a closed stream by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4488](https://togithub.com/quic-go/quic-go/pull/4488)
- http3: use the stream context to detect when the send side is closed by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4489](https://togithub.com/quic-go/quic-go/pull/4489)
- wire: use quicvarint.Parse to when parsing transport parameters by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4482](https://togithub.com/quic-go/quic-go/pull/4482)
- wire: use quicvarint.Parse when parsing frames by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4484](https://togithub.com/quic-go/quic-go/pull/4484)
- wire: refactor header parsing to use quicvarint.Parse by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4481](https://togithub.com/quic-go/quic-go/pull/4481)
- wire: reduce allocations when parsing transport parameters by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4483](https://togithub.com/quic-go/quic-go/pull/4483)
- fix incorrect reuse of UDP connection in handshake benchmark by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4491](https://togithub.com/quic-go/quic-go/pull/4491)
- http3: fix race condition when creating state tracking stream by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4493](https://togithub.com/quic-go/quic-go/pull/4493)
- ci: run benchmarks by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4492](https://togithub.com/quic-go/quic-go/pull/4492)
- http3: ignore deadline errors when tracking QUIC stream states by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4495](https://togithub.com/quic-go/quic-go/pull/4495)
- ci: update golangci-lint-action to v6 and golangci-lint to v1.58.0 by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4494](https://togithub.com/quic-go/quic-go/pull/4494)
- ci: disable exhaustive linter for test files by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4499](https://togithub.com/quic-go/quic-go/pull/4499)
- add an integration test for DPLPMTUD by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4498](https://togithub.com/quic-go/quic-go/pull/4498)
- reject sending of DATAGRAM frames that exceed the current MTU by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4497](https://togithub.com/quic-go/quic-go/pull/4497)
- wire: write configured value of max_udp_payload_size transport parameter by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4501](https://togithub.com/quic-go/quic-go/pull/4501)
- increase initial packet size to 1280 bytes (for both IPv4 and IPv6) by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4500](https://togithub.com/quic-go/quic-go/pull/4500)
- make the initial packet size configurable by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4503](https://togithub.com/quic-go/quic-go/pull/4503)
- update all golang.org/x dependencies by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4506](https://togithub.com/quic-go/quic-go/pull/4506)
- initialize the MTU discoverer when processing the transport parameters by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4514](https://togithub.com/quic-go/quic-go/pull/4514)
- retry the MTU integration test up to 3 times by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4519](https://togithub.com/quic-go/quic-go/pull/4519)
- logging / qlog: add support for DPLPMTUD by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4517](https://togithub.com/quic-go/quic-go/pull/4517)
- http3: rename ListenAndServe to ListenAndServeTLS by [@ETZhangSX](https://togithub.com/ETZhangSX) in [https://github.com/quic-go/quic-go/pull/4522](https://togithub.com/quic-go/quic-go/pull/4522)
- fix(http3): handle streamStateSendAndReceiveClosed in onStreamStateChange by [@GeorgeMac](https://togithub.com/GeorgeMac) in [https://github.com/quic-go/quic-go/pull/4523](https://togithub.com/quic-go/quic-go/pull/4523)
#### New Contributors
- [@ETZhangSX](https://togithub.com/ETZhangSX) made their first contribution in [https://github.com/quic-go/quic-go/pull/4522](https://togithub.com/quic-go/quic-go/pull/4522)
**Full Changelog**: https://github.com/quic-go/quic-go/compare/v0.43.0...v0.44.0
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, check this box
This PR has been generated by Mend Renovate. View repository job log here.
This PR contains the following updates:
v0.43.1
->v0.44.0
Release Notes
quic-go/quic-go (github.com/quic-go/quic-go)
### [`v0.44.0`](https://togithub.com/quic-go/quic-go/releases/tag/v0.44.0) [Compare Source](https://togithub.com/quic-go/quic-go/compare/v0.43.1...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 ([https://github.com/quic-go/quic-go/pull/4497](https://togithub.com/quic-go/quic-go/pull/4497)) - http3: deadline errors are now ignored in stream state tracking ([https://github.com/quic-go/quic-go/pull/4495](https://togithub.com/quic-go/quic-go/pull/4495)) - http3: refuse to send HTTP datagrams associated with a closed stream ([https://github.com/quic-go/quic-go/pull/4488](https://togithub.com/quic-go/quic-go/pull/4488)) - http3: use the send stream context for tracking the stream state ([https://github.com/quic-go/quic-go/pull/4489](https://togithub.com/quic-go/quic-go/pull/4489)) - http3: fix memory leak caused by stream state tracking ([https://github.com/quic-go/quic-go/pull/4523](https://togithub.com/quic-go/quic-go/pull/4523)). Thanks to [@GeorgeMac](https://togithub.com/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 ([https://github.com/quic-go/quic-go/pull/4503](https://togithub.com/quic-go/quic-go/pull/4503)) - The client's initial packet size was increased to 1280 bytes ([https://github.com/quic-go/quic-go/pull/4500](https://togithub.com/quic-go/quic-go/pull/4500)) - Respect the client's `max_udp_payload_size` transport parameter ([https://github.com/quic-go/quic-go/pull/4514](https://togithub.com/quic-go/quic-go/pull/4514)) - qlog: add support for the `mtu_updated` event ([https://github.com/quic-go/quic-go/pull/4517](https://togithub.com/quic-go/quic-go/pull/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 ([https://github.com/quic-go/quic-go/pull/4475](https://togithub.com/quic-go/quic-go/pull/4475)). The new parser is now used for parsing QUIC frames ([https://github.com/quic-go/quic-go/pull/4484](https://togithub.com/quic-go/quic-go/pull/4484)), the QUIC packet header ([https://github.com/quic-go/quic-go/pull/4481](https://togithub.com/quic-go/quic-go/pull/4481)), the QUIC transport parameters ([https://github.com/quic-go/quic-go/pull/4483](https://togithub.com/quic-go/quic-go/pull/4483)) and HTTP datagrams ([https://github.com/quic-go/quic-go/pull/4478](https://togithub.com/quic-go/quic-go/pull/4478)). #### Other Notable Changes - http3: `ParseCapsule` now returns an `io.EOF` (and not an `io.UnexpectedEOF`) if the underlying reader returns an `io.EOF` on the first byte ([https://github.com/quic-go/quic-go/pull/4476](https://togithub.com/quic-go/quic-go/pull/4476)) - http3: `ListenAndServe` was renamed to `ListenAndServeTLS` ([https://github.com/quic-go/quic-go/pull/4522](https://togithub.com/quic-go/quic-go/pull/4522)). Thanks to [@ETZhangSX](https://togithub.com/ETZhangSX)! - http3: reserved frame types now cause a connection error, as required by the RFC ([https://github.com/quic-go/quic-go/pull/4467](https://togithub.com/quic-go/quic-go/pull/4467)) - http3: pass the correct `Connection` to the `ConnContext` callback ([https://github.com/quic-go/quic-go/pull/4480](https://togithub.com/quic-go/quic-go/pull/4480)). Thanks to [@rthellend](https://togithub.com/rthellend)! #### quic-go needs your support! Is your project / company relying on quic-go? Please consider [funding the project](https://togithub.com/sponsors/marten-seemann). Any support is highly appreciated! #### What's Changed - build(deps): bump golangci/golangci-lint-action from 4 to 5 by [@dependabot](https://togithub.com/dependabot) in [https://github.com/quic-go/quic-go/pull/4472](https://togithub.com/quic-go/quic-go/pull/4472) - http3: return an io.EOF when parsing a capsule fails on the first byte by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4476](https://togithub.com/quic-go/quic-go/pull/4476) - quicvarint: add a function to parse a varint from a byte slice by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4475](https://togithub.com/quic-go/quic-go/pull/4475) - http3: avoid allocation when parsing the datagram's quarter stream ID by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4478](https://togithub.com/quic-go/quic-go/pull/4478) - http3: Pass original Conn to ConnContext by [@rthellend](https://togithub.com/rthellend) in [https://github.com/quic-go/quic-go/pull/4480](https://togithub.com/quic-go/quic-go/pull/4480) - http3: reject reserved frame types by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4467](https://togithub.com/quic-go/quic-go/pull/4467) - fix capture of loop variable in connection probe packet tests by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4486](https://togithub.com/quic-go/quic-go/pull/4486) - http3: refuse to send datagrams associated with a closed stream by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4488](https://togithub.com/quic-go/quic-go/pull/4488) - http3: use the stream context to detect when the send side is closed by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4489](https://togithub.com/quic-go/quic-go/pull/4489) - wire: use quicvarint.Parse to when parsing transport parameters by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4482](https://togithub.com/quic-go/quic-go/pull/4482) - wire: use quicvarint.Parse when parsing frames by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4484](https://togithub.com/quic-go/quic-go/pull/4484) - wire: refactor header parsing to use quicvarint.Parse by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4481](https://togithub.com/quic-go/quic-go/pull/4481) - wire: reduce allocations when parsing transport parameters by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4483](https://togithub.com/quic-go/quic-go/pull/4483) - fix incorrect reuse of UDP connection in handshake benchmark by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4491](https://togithub.com/quic-go/quic-go/pull/4491) - http3: fix race condition when creating state tracking stream by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4493](https://togithub.com/quic-go/quic-go/pull/4493) - ci: run benchmarks by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4492](https://togithub.com/quic-go/quic-go/pull/4492) - http3: ignore deadline errors when tracking QUIC stream states by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4495](https://togithub.com/quic-go/quic-go/pull/4495) - ci: update golangci-lint-action to v6 and golangci-lint to v1.58.0 by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4494](https://togithub.com/quic-go/quic-go/pull/4494) - ci: disable exhaustive linter for test files by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4499](https://togithub.com/quic-go/quic-go/pull/4499) - add an integration test for DPLPMTUD by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4498](https://togithub.com/quic-go/quic-go/pull/4498) - reject sending of DATAGRAM frames that exceed the current MTU by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4497](https://togithub.com/quic-go/quic-go/pull/4497) - wire: write configured value of max_udp_payload_size transport parameter by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4501](https://togithub.com/quic-go/quic-go/pull/4501) - increase initial packet size to 1280 bytes (for both IPv4 and IPv6) by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4500](https://togithub.com/quic-go/quic-go/pull/4500) - make the initial packet size configurable by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4503](https://togithub.com/quic-go/quic-go/pull/4503) - update all golang.org/x dependencies by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4506](https://togithub.com/quic-go/quic-go/pull/4506) - initialize the MTU discoverer when processing the transport parameters by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4514](https://togithub.com/quic-go/quic-go/pull/4514) - retry the MTU integration test up to 3 times by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4519](https://togithub.com/quic-go/quic-go/pull/4519) - logging / qlog: add support for DPLPMTUD by [@marten-seemann](https://togithub.com/marten-seemann) in [https://github.com/quic-go/quic-go/pull/4517](https://togithub.com/quic-go/quic-go/pull/4517) - http3: rename ListenAndServe to ListenAndServeTLS by [@ETZhangSX](https://togithub.com/ETZhangSX) in [https://github.com/quic-go/quic-go/pull/4522](https://togithub.com/quic-go/quic-go/pull/4522) - fix(http3): handle streamStateSendAndReceiveClosed in onStreamStateChange by [@GeorgeMac](https://togithub.com/GeorgeMac) in [https://github.com/quic-go/quic-go/pull/4523](https://togithub.com/quic-go/quic-go/pull/4523) #### New Contributors - [@ETZhangSX](https://togithub.com/ETZhangSX) made their first contribution in [https://github.com/quic-go/quic-go/pull/4522](https://togithub.com/quic-go/quic-go/pull/4522) **Full Changelog**: https://github.com/quic-go/quic-go/compare/v0.43.0...v0.44.0Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate. View repository job log here.