* 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>
* 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
* 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
The previous logic allowed for setting different ALPN
values depending on the QUIC version in use. This was
needed to set the draft ALPN value before publication of
the RFC.
* close connHandlingDone once only when the server is shutting down
* close underlying listeners during graceful shutdown when there is no connection
* remove connDoneOnce
* send goaway when server is shutting down
* http3: track next stream ID instead of last stream ID for GOAWAYs
* refactor the graceful shutdown integration tests
* http3: improve GOAWAY frame parsing tests
* http3: simplify server graceful shutdown logic
* http3: simplify parsing of GOAWAY frames
* http3: clean up initialization of server contexts
* http3: fix race condition in graceful shutdown logic
---------
Co-authored-by: WeidiDeng <weidi_deng@icloud.com>
* http3: add HTTP Trailer support for clients
This change only adds support to read HTTP trailers sent to clients.
* chore: add protection against some out-of-spec behavior + tests
* chore: re-add test accidentally overwtitten
* chore: empty commit to re-trigger ci
* fix: address some review notes (wip)
* fix: simplify code in stream.Read by using a callback from requestStream.ReadResponse
* restructure where trailers are read and parsed
* WIP simplify trailer parsing design
* chore: refactor to use simpler trailer parsing strategy
* make gofumpt happy
* Update http3/headers.go
Co-authored-by: Marten Seemann <martenseemann@gmail.com>
* remove stray TODO
---------
Co-authored-by: Marten Seemann <martenseemann@gmail.com>
* http3: implement server idle timeout support
This update introduces the ability for an HTTP/3 server to enforce an idle
timeout on connections. This timeout will trigger when no new requests are
received on a connection, irrespective of any PING frames received at the
QUIC level.
* fix deadlock when http3 idle timeout is not enabled
* fix typo
* Switch to a more efficient implementation
* Avoid a goroutine
* Avoid constent re-adjusting of a timer
* Works with hijacked streams
* Generalize the idle timeout description
* Add an integration test for http server idle timeout
* Attempt to fix other tests impacted by the new idle timeout test
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.