Commit Graph

418 Commits

Author SHA1 Message Date
WeidiDeng
f0042715d7 http3: fix documentation for Server.ServeListener (#5282) 2025-08-12 16:14:09 +02:00
Benjamin M. Schwartz
c7cf12703d quicvarint: tolerate empty reads of the underlying io.Reader (#5275)
* Tolerate empty reads in `quicvarint.Read`

Currently, `quicvarint.Read` misinterprets an empty read (`n==0`)
as a single zero byte.  While empty reads are "discouraged" in
the `io.Reader` interface, they do sometimes happen, especially
when using `io.Pipe()`.

This change tolerates empty reads, adds a corresponding unit test,
and also includes some additional test coverage related to empty
capsules

* minor test refactor

---------

Co-authored-by: Marten Seemann <martenseemann@gmail.com>
2025-08-05 08:05:52 +02:00
Robin Thellend
0a9c6ea4c8 http3: remove dependency on quic internal packages (#5256)
* Remove http3 dependency on quic internal packages

Remove the dependency on internal/protocol from the http3 package. This
makes it possible for a forked http3 to use the mainline quic-go
package.

* Address review comments

* Fix syntax

* Use broader pattern for http3 directory

* Copy internal/testdata

* Replace perspective with bool

* clone the supported version slice

---------

Co-authored-by: Marten Seemann <martenseemann@gmail.com>
2025-07-07 13:41:23 +02:00
Marten Seemann
61d2fa57ac http3: fix flaky TestConnGoAwayFailures (#5252) 2025-06-28 20:28:07 +02:00
Marten Seemann
b9d934ff8b http3: tighten checks for incorrect use of RequestStream (#5231)
The RequestStream is a low-level API that’s used by WebTransport,
CONNECT-UDP and CONNECT-IP. Methods on the RequestStream must be called
in a certain order, and we should detect misuse of the API.
2025-06-20 09:55:11 +02:00
Marten Seemann
7d5e0570c4 http3: avoid reinitilising the frame parser on the stream (#5232)
No functional change expected.
2025-06-20 07:34:03 +02:00
Marten Seemann
f27b056998 http3: remove deprecated RoundTripper (#5230) 2025-06-20 05:44:53 +02:00
Marten Seemann
66e2539b2e http3: explicitly expose all method on the RequestStream (#5216) 2025-06-19 12:16:26 +02:00
Marten Seemann
f16ffc6d16 http3: add ClientConn.Context, CloseWithError and Conn (#5219) 2025-06-17 18:29:27 +02:00
Marten Seemann
39f6e120c0 http3: remove deprecated SingleDestinationRoundTripper type (#5217) 2025-06-09 13:46:53 +02:00
Marten Seemann
6c82ac07cf http3: convert Connection interface to Conn struct (#5204) 2025-06-09 12:16:07 +02:00
Marten Seemann
5f3d617dec convert Connection interface to Conn struct (#5195) 2025-06-09 11:51:46 +02:00
Marten Seemann
9580396fa1 http3: simplify connection closing in the frame parser (#5196)
No functional change expected.
2025-06-07 07:21:53 +02:00
Marten Seemann
08be0f73c0 ci: stop using Ginkgo test command (#5194)
* ci: stop using Ginkgo test command

* ci: remove integrationtest directory for unit tests
2025-06-02 04:38:05 +02:00
Marten Seemann
1169d97e81 convert ReceiveStream interface to a struct (#5173) 2025-06-01 06:08:18 +02:00
Marten Seemann
78e77bcfdb convert SendStream to a struct (#5172) 2025-06-01 05:53:53 +02:00
Marten Seemann
eb656df2fe convert Stream interface to a struct (#5149) 2025-06-01 05:40:05 +02:00
Marten Seemann
eb427b599e http3: fix flaky TestConnControlStreamFailure (#5188) 2025-05-31 10:21:17 +02:00
Marten Seemann
f8a1711ce7 http3: fix flaky TestServerRequestHeaderTooLarge (#5186) 2025-05-31 09:58:20 +02:00
Marten Seemann
a39928c556 http3: fix flaky TestClientResponseValidation (#5183) 2025-05-31 09:48:45 +02:00
Marten Seemann
56ff2a58cc http3: use actual QUIC connection in stream tests (#5170) 2025-05-30 06:47:53 +02:00
Marten Seemann
e539fc4e88 http3: fix flaky TestClientStreamHijacking (#5169) 2025-05-30 05:11:04 +02:00
Marten Seemann
e354463e64 http3: use actual QUIC connection in frames tests (#5165)
* http3: use actual QUIC connection in frames tests

* wait for handshake completion
2025-05-30 04:54:48 +02:00
Marten Seemann
9ef305508d http3: use actual QUIC stream in state tracking stream tests (#5166)
* http3: use actual QUIC stream in state tracking stream tests

* avoid sleeps
2025-05-30 04:47:17 +02:00
Marten Seemann
d9528a5643 http3: use actual QUIC connection in transport tests (#5164) 2025-05-29 15:10:30 +02:00
Marten Seemann
4e81b28694 http3: use actual QUIC connection and stream in conn tests (#5163)
* http3: use actual QUIC connection and stream in conn tests

* add errror assertion

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-29 14:42:36 +02:00
Marten Seemann
77dff99007 http3: use actual QUIC connection and stream in client tests (#5162) 2025-05-29 13:06:36 +02:00
Marten Seemann
293d45da4b http3: use actual QUIC connection and stream in server tests (#5161) 2025-05-29 11:06:09 +02:00
Marten Seemann
5c3af443c1 http3: simplify HTTP datagram handling (#5156) 2025-05-29 06:23:05 +02:00
Marten Seemann
0b834e6f46 http3: convert Stream from an interface to a struct (#5154) 2025-05-29 05:41:40 +02:00
Marten Seemann
2675d0845f http3: convert RequestStream from an interface to a struct (#5153) 2025-05-29 05:08:39 +02:00
Marten Seemann
eb7b7df1db http3: migrate the state tracking stream tests away from Ginkgo (#5151) 2025-05-24 05:07:17 +02:00
Marten Seemann
5e5d03cf8d http3: migrate the stream tests away from Ginkgo (#5150) 2025-05-23 16:07:00 +02:00
Marten Seemann
04eab22893 http3: fix off-by-one error when processing the GOAWAY stream ID (#5145) 2025-05-20 08:43:33 +02:00
Marten Seemann
363e0ccafb http3: implement client-side GOAWAY handling (#5143)
When receiving a GOAWAY frame, the client:
* immediately closes the connection if there are no active requests
* refuses to open streams with stream IDs larger than the stream ID in
the GOAWAY frame
* closes the connection once the stream count drops to zero
2025-05-18 07:33:43 +02:00
Marten Seemann
06e8ee1bcf http3: reset stream if the server sends too many 1xx responses (#5144) 2025-05-17 06:18:18 +02:00
Marten Seemann
77c401dcbb http3: only retry requests for which it is safe to do so (#5141)
* add an integration test for HTTP/3 redialing logic

* http3: only retry requests for which it is safe to do so
2025-05-16 05:22:13 +02:00
Marten Seemann
fe02bc2b66 http3: fix flaky TestClientRequestLengthLimit (#5137) 2025-05-11 06:12:26 +02:00
Marten Seemann
50dd857c57 http3: migrate the connection tests away from Ginkgo (#5133) 2025-05-10 16:17:25 +02:00
Marten Seemann
6f8460a821 http3: keep datagram receive loop running on datagram for unknown stream (#5136) 2025-05-10 14:41:47 +02:00
Marten Seemann
3f97a011a7 http3: migrate the client tests away from Ginkgo (#5096)
* http3: migrate the client tests away from Ginkgo

* http3: add a client settings test
2025-05-10 05:24:21 +02:00
Marten Seemann
1725cb0878 http3: close QUIC listeners created by Server on graceful shutdown (#5101) 2025-05-08 08:22:11 +02:00
Marten Seemann
8296ba7d19 http3: don't close QUIC listeners created by the application (#5129) 2025-05-08 07:40:23 +02:00
Marten Seemann
44207b8e72 http3: reset request streams accepted after graceful shutdown (#5116)
* http3: reset request streams accepted after graceful shutdown

The server needs to let the client know that these streams
are not getting processed, using the H3_REQUEST_REJECTED
error code.

* add an integration test for graceful shutdown stream cancellations
2025-05-05 04:28:01 +02:00
Marten Seemann
e1a1251c84 http3: send GOAWAY frame in a new Goroutine (#5114)
Sending might block if the peer didn't grant enough flow
control credit.
2025-05-04 06:21:03 +02:00
Marten Seemann
9d06679273 http3: migrate the server tests away from Ginkgo (#5085)
* http3: migrate the server tests away from Ginkgo

* http3: add a test for server settings
2025-04-30 06:53:37 +02:00
Marten Seemann
41cc01890d http3: return http.ErrServerClosed for ServeQUICConn after Server.Close (#5095) 2025-04-29 12:05:14 +02:00
Marten Seemann
5daf5b6535 http3: remove Alt-Svc entry when Server.Serve returns (#5093) 2025-04-29 05:58:10 +02:00
Marten Seemann
dae68d7ca0 http3: use a slice instead of a map to store active listeners (#5087)
* http3: use a slice instead of a map to store active listeners

This list will be relatively short, therefore it will be
more performant to use a slice instead of a map.

No functional change expected.

* http3: rename listenerInfo to listener
2025-04-29 04:08:41 +02:00
TheoTechnicguy
a9d8093eaf http3: fix documentation for Hijacker and HTTPStreamer (#5089)
* http3: update documentation for `Hijacker`

The documentation for `Hijacker` seems to be legacy from
[v0.43.0](https://github.com/quic-go/quic-go/releases/tag/v0.43.0). This
commit updates the documentation to reflect the current API use.

* http3: update documentation for `HTTPStreamer`

The documentation for `HTTPStreamer` seems to be legacy from
[v0.43.0](https://github.com/quic-go/quic-go/releases/tag/v0.43.0). This
commit updates the documentation to reflect the current API use.
2025-04-29 03:55:43 +02:00