Commit Graph

6423 Commits

Author SHA1 Message Date
Marten Seemann
0d1e27d77c introduce Transport.ConnContext, use client's context on the connection (#4507)
* introduce Transport.ConnContext, use client's context on the connection

* panic if ConnContext returns nil
2024-05-26 21:30:19 -07:00
George
e2fbf3cdcd http3: fix memory leak in stream state tracking (#4523)
* fix(http3): handle streamStateSendAndReceiveClosed in onStreamStateChange

Signed-off-by: George MacRorie <me@georgemac.com>

* refactor(http3): adjust stateTrackingStream to operate over streamClearer and errorSetter

* test(http3): remove duplicate test case

* chore(http3): rename test spies to be mocks

---------

Signed-off-by: George MacRorie <me@georgemac.com>
v0.44.0
2024-05-18 19:15:32 -07:00
Z.SX
f3cecf952e http3: rename ListenAndServe to ListenAndServeTLS (#4522)
* http3: rename ListenAndServe to ListenAndServeTLS

* http3: fix golanglint

---------

Co-authored-by: Shunxin Zhang <shunxin.zhang@shopee.com>
2024-05-14 18:32:56 -07:00
Marten Seemann
e41d1f9dd7 logging / qlog: add support for DPLPMTUD (#4517)
* logging / qlog: add support for DPLPMTUD

* improve the MTU discovery integration test
2024-05-14 02:37:54 -07:00
Marten Seemann
056a332ac4 retry the PMTUD integration test up to 3 times (#4519)
This test is very sensitive to packet loss, as the loss of a single Path MTU
probe packet makes DPLPMTUD clip the assumed MTU at that value.
2024-05-14 02:14:02 -07:00
Marten Seemann
2557fb98b2 initialize the MTU discoverer when processing the transport parameters (#4514)
On the client side, we always use the configured packet size. This comes
with the risk of failing the handshake if the path doesn't support this
MTU. If the server sends a max_udp_payload_size that's smaller than this
size, we can safely ignore this: Obviously, the server still processed
the (fully padded) Initial packet, despite claiming that it wouldn't do
so.

On the server side, there's no downside to using 1200 bytes until we
received the client's transport parameters:
* If the first packet didn't contain the entire ClientHello, all we can
do is ACK that packet. We don't need a lot of bytes for that.
* If it did, we will have processed the transport parameters and
initialized the MTU discoverer.
2024-05-13 22:50:26 -07:00
Marten Seemann
508b402a19 update all golang.org/x dependencies (#4506) 2024-05-10 20:02:07 -07:00
Marten Seemann
f3d76b39bf make the initial packet size configurable (#4503) 2024-05-08 21:41:08 -07:00
Marten Seemann
e90a0d4e03 increase initial packet size to 1280 bytes (for both IPv4 and IPv6) (#4500) 2024-05-08 20:55:19 -07:00
Marten Seemann
d1c1f18e4c wire: write configured value of max_udp_payload_size transport parameter (#4501) 2024-05-07 21:30:28 -07:00
Marten Seemann
66f968b9ff reject sending of DATAGRAM frames that exceed the current MTU (#4497)
* reject sending of datagrams that exceed the current MTU

* check datagram size in PMTUD integration test
2024-05-07 00:06:00 -07:00
Marten Seemann
f1b473d925 add an integration test for DPLPMTUD (#4498)
* add an integration test for DPLPMTUD

* use a v4-only socket in DPLPMTUD test

* increase DPLPMTUD test timeout
2024-05-06 22:15:20 -07:00
Marten Seemann
4f4da0423f ci: disable exhaustive linter for test files (#4499) 2024-05-06 21:36:22 -07:00
Marten Seemann
2ed1593b6e ci: update golangci-lint-action to v6 and golangci-lint to v1.58.0 (#4494)
* ci: update golangci-lint-action to v6 and golangci-lint to v1.58.0

* use issues.exclude-files instead of run.skip-files

* rename vet to govet
2024-05-06 19:05:38 -07:00
Marten Seemann
475b4f02cb http3: ignore deadline errors when tracking QUIC stream states (#4495) 2024-05-06 19:03:41 -07:00
Marten Seemann
03a32d0daa ci: run benchmarks (#4492) 2024-05-05 06:48:56 -07:00
Marten Seemann
5aac43549b http3: fix race condition when creating state tracking stream (#4493) 2024-05-05 06:34:55 -07:00
Marten Seemann
83eeb9cc66 fix incorrect reuse of UDP connection in handshake benchmark (#4491) 2024-05-05 06:17:08 -07:00
Marten Seemann
b4210f8459 wire: reduce allocations when parsing transport parameters (#4483) 2024-05-05 05:48:48 -07:00
Marten Seemann
347a4afc51 wire: refactor header parsing to use quicvarint.Parse (#4481)
* wire: add benchmark tests for initial and retry header parsing

* wire: refactor header parsing to use quicvarint.Parse

* wire: simplify tracking of parsed length for Long Header parsing
2024-05-05 05:48:06 -07:00
Marten Seemann
f12ee48617 wire: use quicvarint.Parse when parsing frames (#4484)
* wire: add benchmarks for the frame parser

* wire: use quicvarint.Parse when parsing frames

* wire: always use io.EOF for too short frames
2024-05-05 04:28:28 -07:00
Marten Seemann
1514095afb wire: use quicvarint.Parse to when parsing transport parameters (#4482)
* wire: add a benchmark for parsing of transport parameters

* wire: use quicvarint.Parse to when parsing transport parameters
2024-05-05 04:26:51 -07:00
Marten Seemann
bb6f066aa5 http3: use the stream context to detect when the send side is closed (#4489) 2024-05-04 19:15:35 -07:00
Marten Seemann
c7b58b568f http3: refuse to send datagrams associated with a closed stream (#4488)
It's only valid to send datagrams associated with a stream whose send
direction is not closed.
2024-05-04 17:48:07 -07:00
Marten Seemann
b7a02137f9 fix capture of loop variable in connection probe packet tests (#4486) 2024-05-04 15:49:10 -07:00
Marten Seemann
a3d36f1cbb http3: reject reserved frame types (#4467) 2024-05-04 15:23:40 -07:00
Robin Thellend
a5adbd44c7 http3: pass original Conn to ConnContext (#4480)
* http3: Pass original Conn to ConnContext

https://github.com/quic-go/quic-go/issues/4479

* Update test to check conn value
2024-05-03 16:17:39 -07:00
Marten Seemann
3122ca009b http3: avoid allocation when parsing the datagram's quarter stream ID (#4478) 2024-05-03 20:13:38 +08:00
Marten Seemann
11111228cf quicvarint: add function to parse a varint from a byte slice (#4475) 2024-05-03 04:58:18 -07:00
Marten Seemann
8de22b2468 http3: allow io.EOF when parsing a capsule fails on the first byte (#4476) 2024-05-03 04:14:18 -07:00
dependabot[bot]
0d565fc384 ci: bump golangci/golangci-lint-action from 4 to 5 (#4472)
Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 4 to 5.
- [Release notes](https://github.com/golangci/golangci-lint-action/releases)
- [Commits](https://github.com/golangci/golangci-lint-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: golangci/golangci-lint-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-29 02:00:59 -07:00
WeidiDeng
93c4785521 http3: sniff Content-Type when flushing the ResponseWriter (#4412)
* try to sniff content-type as long as the data is not written to the client

* only write when body is allowed

* fix tests

* fix tests

* fix header count

* fix lint

* merge from upstream

* merge updates from master

* Update http3/response_writer.go

Co-authored-by: Marten Seemann <martenseemann@gmail.com>

---------

Co-authored-by: Marten Seemann <martenseemann@gmail.com>
v0.43.0
2024-04-27 07:26:21 -07:00
Marten Seemann
c0250ce824 include the maximum payload size in the DatagramTooLargeError (#4470)
This is more useful than the maximum frame size. The user of the library
shouldn't have to care about the QUIC framing layer.

---------

Co-authored-by: 世界 <i@sekai.icu>
2024-04-27 05:54:16 -07:00
Marten Seemann
34f4d1443f http3: implement on the HTTPStreamer on the ResponseWriter, flush header (#4469)
Currently the HTTPStreamer is implemented on the http.Request.Body. This
complicates usage, since it's not easily possible to flush the HTTP
header, requiring users to manually flash the header before taking over
the stream.

With this change, the HTTP header is now flushed automatically as soon
as HTTPStream is called.
2024-04-27 04:30:39 -07:00
Marten Seemann
083ceb42f2 http3: rename Settings.EnableDatagram to EnableDatagrams (#4466)
This makes it consistent with the quic.Config and the config flag on the
http3.Server and http3.RoundTripper.
2024-04-26 13:35:21 -07:00
Marten Seemann
e1e5b6294d README: link to the new documentation site (#4464) 2024-04-26 11:28:49 -07:00
Marten Seemann
2a37c53143 http3: add support for HTTP Datagrams (RFC 9297) (#4452)
* http3: add support for HTTP Datagrams (RFC 9297)

* README: reference HTTP Datagrams (RFC 9297)
2024-04-26 11:21:04 -07:00
Marten Seemann
11b11594b2 http3: fix race condition in client unit test (#4463) 2024-04-26 10:32:03 -07:00
Marten Seemann
4b87539b1e delay completion of the receive stream until the reset error was read (#4460)
* delay completion of the receive stream until the reset error was read

* fix handling of CancelRead after receiving a RESET_STREAM
2024-04-26 08:48:00 -07:00
Marten Seemann
bff131e546 delay completion of the send stream until the reset error was delivered (#4445)
* delay completion of the send stream until the reset error was delivered

* mark the send stream completed on Close after receiving a STOP_SENDING

* fix handling of STOP_SENDING after Close
2024-04-26 08:31:00 -07:00
Marten Seemann
12aa63824c disable GSO and ECN on kernels older than version 5 (#4456) 2024-04-24 07:10:22 -07:00
Marten Seemann
394aa5640d flowcontrol: make it possible to call Abandon multiple times (#4459)
Abandon is called when a RESET_STREAM frame is received, and marks the
bytes between the highest read position and the final offset as
consumed. Making it possible to call Abandon multiple times makes using
this API a bit easier, since the stream doesn't need to track if it
already called it.
2024-04-24 07:06:16 -07:00
Marten Seemann
b0eb608180 testutils: add a token parameter to ComposeInitialPacket (#4391) 2024-04-23 13:43:28 -07:00
bt90
75662469a1 increase send and receive buffer size to 7 MiB (#4455)
This increases throughput on high-bandwidth connections.
7 MB is the value that WireGuard uses, see
f26efb65f2
for details.
2024-04-23 13:28:14 -07:00
Marten Seemann
6a4512a6f0 http3: fix race condition when closing the RoundTripper (#4458) 2024-04-23 13:23:48 -07:00
Marten Seemann
eb1c16bd0e fix flaky server accept queue test (#4453) 2024-04-21 07:33:41 -07:00
mchtech
86b53a2516 http3: process 1xx status codes (#4437)
* process http 1xx status code

Signed-off-by: mchtech <michu_an@126.com>

* add integration tests

Signed-off-by: mchtech <michu_an@126.com>

* fix tests

---------

Signed-off-by: mchtech <michu_an@126.com>
Co-authored-by: Marten Seemann <martenseemann@gmail.com>
2024-04-21 02:56:45 -07:00
Marten Seemann
3e7ba77a77 http3: check server SETTINGS before sending an Extended CONNECT request (#4450) 2024-04-20 06:21:36 -07:00
Marten Seemann
e58fa87566 catch spurious UDP sendmsg errors in multiplex integration test (#4451)
* catch spurious UDP sendmsg errors in multiplex integration test

* platform-dependent isPermissionError
2024-04-20 06:21:24 -07:00
Marten Seemann
18422ad1c4 http3: remove RoundTripOpt.CheckSettings (#4416)
The settings can be obtained from the SingleDestinationRoundTripper.
2024-04-20 02:42:33 -07:00