Commit Graph

39 Commits

Author SHA1 Message Date
Marten Seemann
da410a7b59 http3: expose a SingleDestinationRoundTripper (#4424) 2024-04-11 09:55:05 -07:00
Marten Seemann
eb310a6db8 http3: expose an OpenStream method on the RoundTripper (#4409)
The stream exposes two methods required for doing an HTTP request:
SendRequestHeader and ReadResponse. This can be used by applications
that wish to use the stream for non-HTTP content afterwards. This will
lead to a simplification in the API we need to expose for WebTransport,
and will make it easier to send HTTP Datagrams associated with this
stream.
2024-04-09 13:14:14 -07:00
Marten Seemann
183d42a729 http3: pass tracing ID instead of quic.Connection to stream hijackers (#4401)
The stream hijackers only need to be able to associate the stream with
the underlying QUIC connection. They are not supposed to call any
functions on the quic.Connection. As such, the better API is to just
pass them a unique identifier.
2024-04-01 21:23:40 -07:00
Marten Seemann
f389b638d2 http3: reference the correct RFCs in doc comments (#4399) 2024-04-01 15:56:23 -07:00
Marten Seemann
49b9965525 http3: rename RoundTripper.QuicConfig to RoundTripper.QUICConfig (#4385) 2024-03-23 15:29:39 -07:00
Marten Seemann
497d3f58a5 http3: add a RoundTripOpt to check the server's SETTINGS frame (#4355)
For some requests, the client is required to check the server's HTTP/3
SETTINGS. For example, a client is only allowed to send HTTP/3 datagrams
if the server explicitly enabled support.

SETTINGS are sent asynchronously on a control stream (usually the first
unidirectional stream). This means that the SETTINGS might not be
available at the beginning of the connection. This is not expected to be
the common case, since the server can send the SETTINGS in 0.5-RTT data,
but we have to be able to deal with arbitrary delays.

For WebTransport, there are even more SETTINGS values that the client
needs to check. By making CheckSettings a callback on the RoundTripOpt,
this entire validation logic can live at the WebTransport layer.
2024-03-12 01:03:00 -07:00
Marten Seemann
0405634108 http3: don't automatically set RoundTripper.QuicConfig.EnableDatagrams (#4340)
If the user provides a quic.Config, we shouldn't modify it. Instead, we
should return an error if the user enables HTTP Datagrams but fails to
enable datagrams on the QUIC layer.
2024-03-02 22:39:21 -08:00
Marten Seemann
9b40c50a73 http3: use the AdditionalSettings for requests (#4156) 2023-12-06 06:22:23 -08:00
Ondrej Kokes
05db808f72 http3: change code point for HTTP datagrams to RFC 9297 (#3588)
* HTTP/3 Datagrams are now RFC 9297

* Use datatracker htmlized docs rather than rfc-editor (to be consistent)
2023-08-09 06:30:46 -07:00
Glonee
9237dbb167 http3: close the connection when closing the roundtripper (#3873) 2023-06-01 01:06:13 -07:00
Glonee
c96fbd2e4a http3: correctly use the quic.Transport (#3869)
* use quic.Transport in http3

* add intergrationtests to dial server with different server names

* update test
2023-05-31 23:31:20 -07:00
Glonee
cec79d338c implement http3.RoundTripper.CloseIdleConnections (#3820)
* implement CloseIdleConnections

* nit

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

---------

Co-authored-by: Marten Seemann <martenseemann@gmail.com>
2023-05-15 00:12:00 -07:00
Marten Seemann
aee7706d5d clean up dial functions
* add a context to all Dial functions
* remove the explicit Dial{*}Context functions
2023-05-01 13:59:54 +02:00
Marten Seemann
d683b841c4 remove the host parameter from all dial functions 2023-05-01 13:59:54 +02:00
Jean-Francois Giorgi
3f06880917 http3: check scheme before host to be consistent with net/http (#3774)
* check scheme before host so the error is comprehensible  and consistent with net/http

* Update http3/roundtrip.go

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

---------

Co-authored-by: Marten Seemann <martenseemann@gmail.com>
2023-04-17 02:34:51 -07:00
Glonee
6d7280b7dc http3: use a single UDPConn in RoundTripper (#3720)
* http3: use a single UDPConn in RoundTripper

* update

* add tests
2023-03-14 18:58:26 -07:00
Marten Seemann
89769f409f http3: correctly handle closed clients (#3684)
* http3: use a mock roundTripCloser in tests

* http3: correctly handle failed clients

Specifically,
* immediately remove a client when a request errored
* if that error was an idle error, and the client was a reused client
(from an earlier request that already completed the handshake),
re-dial the connection
2023-01-28 00:49:52 -08:00
Marten Seemann
58cedf7a4f rename module, adjust import paths to quic-go/quic-go (#3680) 2023-01-21 19:53:57 -08:00
Avi Rosenberg
cf1aff0492 http3: simplify if condition in roundtripper (#3658)
Signed-off-by: Avi Rosenberg <avrumi96@gmail.com>

Signed-off-by: Avi Rosenberg <avrumi96@gmail.com>
2023-01-01 12:20:44 -08:00
Marten Seemann
61ca8e89fe http3: ignore context after response when using DontCloseRequestStream (#3473) 2022-07-24 11:58:12 -07:00
Marten Seemann
96c0daceca pass frame / stream type parsing errors to the hijacker callbacks
When a stream is reset, we might not have received the frame / stream
type yet. The callback might be able to identify if it was a stream
intended for that application by analyzing the stream reset error.
2022-05-27 17:53:54 +02:00
Marten Seemann
5cb2e8265c fix handling of unknown frames in the stream hijacker 2022-05-27 17:35:00 +02:00
Marten Seemann
de5f08171b introduce a http3.RoundTripOpt to prevent closing of request stream (#3411) 2022-05-20 02:54:31 -07:00
hareku
1a0d577854 implement HTTP/3 unidirectional stream hijacking (#3389)
* implement HTTP/3 unistream hijacking

* Apply suggestions from code review

Fixed name consistency.

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

* rename unistream to unidirectional stream

Co-authored-by: Marten Seemann <martenseemann@gmail.com>
2022-04-21 09:51:18 -07:00
Marten Seemann
a983db0301 pass the connection to the client's StreamHijacker callback 2022-04-03 14:28:15 +01:00
Marten Seemann
48a2cce9df implement HTTP/3 stream hijacking 2022-04-03 14:28:15 +01:00
Marten Seemann
a54816867f make it possible to set settings unknown to the http3 package 2022-04-03 14:28:15 +01:00
Marten Seemann
332473668a remove unneeded network from custom dial function used in HTTP/3 (#3368) 2022-04-03 06:27:55 -07:00
Marten Seemann
6aaa9a817c rename the EarlySession to EarlyConnection 2022-03-27 11:27:25 +01:00
Marten Seemann
42f3159497 Merge pull request #3359 from lucas-clemente/http3-dial-context
respect the request context when dialing
2022-03-25 10:27:43 +01:00
Marten Seemann
137491916b respect the request context when dialing 2022-03-25 09:47:05 +01:00
Marten Seemann
85b495445e remove the SkipSchemeCheck RoundTripOpt (#3353)
This option was needed for an early draft version of MASQUE.
MASQUE now uses the https scheme.
2022-03-25 09:38:17 +01:00
folbrich
ea33fc95df Update doc for dialer in http3.RoundTripper 2021-06-20 08:47:18 -06:00
Marten Seemann
c78634df38 add a http3.RoundTripOpt to skip the request scheme check
Otherwise, we'll only be able to issue https requests. This is what we
usually want, but for MASQUE support, the URL will be of the form
masque://example.org.
2021-01-02 10:21:18 +08:00
Marten Seemann
3cb07d8f00 add a http3.RoundTripper.EnableDatagram option 2020-12-23 15:06:04 +07:00
Marten Seemann
898f484d0a only allow the HTTP/3 client to dial with a single QUIC version 2020-11-02 11:29:42 +07:00
Marten Seemann
1372e5dd5e use 0-RTT to open the H3 client's control stream 2020-01-29 11:06:44 +07:00
Marten Seemann
363de010ca reject http3 responses that exceeded the header size limit 2019-08-22 12:08:02 +07:00
Marten Seemann
4f6d0e651a implement HTTP/3 2019-04-11 09:06:10 +09:00