caddy/modules/caddyhttp/reverseproxy
tomholford 35ab5de5e3 reverseproxy: add WebTransport session pump
runWebTransportPump bridges two WebTransport sessions so every
bidirectional stream, unidirectional stream, and datagram opened on one
side is mirrored on the other. Uses six goroutines (bidi both ways, uni
both ways, datagrams both ways) and blocks until both sessions end.

Close propagation: when either session ends, the peer is closed via
CloseWithError. The code/message are read from the closing session's
stored close state (by probing AcceptStream with a short timeout),
since Receive{Datagram,UniStream} return the underlying stream error
rather than the SessionError and can win the propagation race. Close
propagation is best-effort for client-initiated close through a
Dialer-dedicated QUIC conn: webtransport-go tears down the QUIC
connection immediately after CloseWithError, so the upstream may
observe a QUIC ApplicationError before the WT_CLOSE_SESSION capsule is
parsed. The pump still closes the peer session; only the specific
error code may not survive.

Not yet wired into ServeHTTP.

Tests: topology of client -> frontend -> upstream where frontend runs
the pump. Exercises bidi both ways, uni client-to-upstream, datagram
round-trip, CloseWithError propagation both ways, and a basic
goroutine-leak check.
2026-06-23 19:04:23 +09:00
..
fastcgi Merge commit from fork 2026-05-29 11:37:17 -06:00
forwardauth forwardauth: error on duplicate uri subdirective (#7814) 2026-06-10 23:31:04 -04:00
addresses.go core: Implement socket activation listeners (#6573) 2024-09-30 10:55:03 -06:00
addresses_test.go reverseproxy: do not parse upstream address too early if it contains replaceble parts (#5695) 2023-08-05 23:30:02 +02:00
admin.go reverseproxy: Track dynamic upstreams, enable passive healthchecking (#7539) 2026-03-04 15:05:26 -05:00
admin_test.go reverseproxy: Track dynamic upstreams, enable passive healthchecking (#7539) 2026-03-04 15:05:26 -05:00
ascii.go reverseproxy: Sync up handleUpgradeResponse with stdlib (#4664) 2022-04-11 12:49:56 -06:00
ascii_test.go filesystem: Globally declared filesystems, fs directive (#5833) 2024-01-13 20:12:43 +00:00
buffering_test.go reverseproxy: more comments about buffering and add new tests (#6778) 2025-03-07 11:22:43 -07:00
caddyfile.go reverseproxy: add lb_retry_match condition on response status (#7569) 2026-04-21 14:59:31 -04:00
client_disconnect_test.go reverseproxy: log status 499 instead of 0 when client disconnects (#7827) 2026-06-18 13:31:02 +10:00
command.go cmd: prevent commas in header values from being split (#7268) 2025-09-22 21:12:06 -06:00
copyresponse.go reverseproxy: Fix double headers in response handlers (#4847) 2022-06-22 15:10:14 -04:00
dynamic_upstreams_test.go reverseproxy: Track dynamic upstreams, enable passive healthchecking (#7539) 2026-03-04 15:05:26 -05:00
headers_test.go chore: replace interface{} with any for modernization (#7571) 2026-04-11 19:53:12 +03:00
healthchecks.go chore: clean up wording and typo fixes (#7745) 2026-05-20 16:36:30 +10:00
hopheaders_test.go Merge commit from fork 2026-06-12 12:39:01 -06:00
hosts.go admin: Redact sensitive request headers in API logs (#7578) 2026-04-17 14:56:42 -06:00
httptransport.go reverseproxy: replace placeholders specified for sni while using http3 (#7737) 2026-06-02 21:49:00 -06:00
httptransport_test.go reverseproxy: Add regression test for DialInfo network override (#7758) 2026-05-20 09:43:58 -04:00
metrics.go reverseproxy: ignore duplicate collector registration error (#6820) 2025-02-04 10:55:30 +03:00
passive_health_test.go reverseproxy: Track dynamic upstreams, enable passive healthchecking (#7539) 2026-03-04 15:05:26 -05:00
retries_test.go reverseproxy: further prevent body closes from dial errors (#7715) 2026-05-12 12:05:50 -06:00
reverseproxy.go reverseproxy: log status 499 instead of 0 when client disconnects (#7827) 2026-06-18 13:31:02 +10:00
selectionpolicies.go reverseproxy: validate on weighted_round_robin loadbalancing policy (#7807) 2026-06-08 02:18:20 +10:00
selectionpolicies_test.go reverseproxy: validate on weighted_round_robin loadbalancing policy (#7807) 2026-06-08 02:18:20 +10:00
streaming.go reverseproxy: make stream copy buffer size configurable (#7627) 2026-04-10 14:49:32 -06:00
streaming_test.go reverseproxy: make stream copy buffer size configurable (#7627) 2026-04-10 14:49:32 -06:00
upstreams.go reverseproxy: Add ability to clear dynamic upstreams cache during retries (#7662) 2026-04-28 09:16:18 -06:00
upstreams_test.go chore: upgrade .golangci.yml and workflow to v2 (#6924) 2025-06-03 02:24:32 +03:00
webtransport_pump.go reverseproxy: add WebTransport session pump 2026-06-23 19:04:23 +09:00
webtransport_pump_test.go reverseproxy: add WebTransport session pump 2026-06-23 19:04:23 +09:00
webtransport_transport.go reverseproxy: add WebTransport upstream dialer helper 2026-06-23 19:04:23 +09:00
webtransport_transport_test.go reverseproxy: add WebTransport upstream dialer helper 2026-06-23 19:04:23 +09:00