README
¶
End-to-end tests
This directory contains end-to-end tests for the rstream Go SDK. Each subdirectory pairs a server binary and a client binary. The test runner exercises every supported protocol and transport combination against a live rstream engine instance.
Coverage
| Suite | Cases | What it covers |
|---|---|---|
websocket |
9 | All upstream × downstream HTTP version combinations (H1, H2C, H3), including public authority and browser Origin preservation |
webtransport |
2 | Private SDK-dialer and published HTTP/3 reverse-proxy runs covering bidirectional streams, unidirectional streams, datagrams, multi-stream, close codes, and same-origin validation |
http |
3 | HTTP tunnels over H1, H2C, and H3, including GET and SSE streaming |
stream |
8 | Bytestream tunnel: plain (unpublished), raw TCP and TLS via engine listeners (published), TLS via SDK dialer (unpublished), TLS passthrough, TLS with upstream TLS, and ALPN rejection checks |
datagram |
13 | Datagram tunnel: DTLS via SDK dialer (unpublished), DTLS via engine listener (published, with and without upstream DTLS), QUIC via SDK dialer (unpublished), QUIC via engine listener (published), SCTP via pion/sctp over SDK datagrams and published DTLS, and ALPN rejection checks |
masque |
2 | Published HTTP/3 datagram tunnels carrying CONNECT-UDP and CONNECT-IP Extended CONNECT sessions end-to-end, including public authority preservation |
connect |
9 | All upstream × downstream HTTP version combinations for published authority-form CONNECT (H1, H2C, H3) |
The primary run-e2e.sh matrix executes 34 cases. Each WebTransport runner case
contains multiple protocol subcases internally. Additional runtime suites cover
MASQUE, the nine-case CONNECT matrix, and the six bandwidth-limit cases described below.
The HTTP upgrade and CONNECT coverage follows the versions each protocol permits:
| Protocol | Downstream | Upstream | Runtime matrix |
|---|---|---|---|
| WebSocket | H1, H2, H3 | H1, H2C, H3 | All 9 translations |
| WebTransport | H3 | H3 | Private SDK dialer and published reverse proxy |
| Plain CONNECT | H1, H2, H3 | H1, H2C, H3 | All 9 translations |
| CONNECT-UDP | H3 | H3 | Published reverse proxy |
| CONNECT-IP | H3 | H3 | Published reverse proxy |
WebTransport, CONNECT-UDP, and CONNECT-IP have no H1 or H2 variant in this matrix because the supported protocols require HTTP/3. Engine unit tests cover rejection when those requests or their configured upstream tunnel use another HTTP version.
The stream and datagram suites each cover two connectivity modes:
- Unpublished: the SDK internal dialer (
client.Dial/client.PacketDial) is used. The engine relays bytes between the two SDK endpoints without exposing a public socket. - Published: the tunnel is registered on the engine's TLS, DTLS, or QUIC listener with an explicit
Protocol. The client connects directly to the engine's edge endpoint, bypassing the SDK dialer entirely.
Running
Prerequisites
- A running rstream engine accessible via the SDK.
- The
RSTREAM_CONTEXTenvironment variable set to the target context name, orRSTREAM_ENGINEplus the matching authentication environment. - All test binaries built (see below).
- A project plan that supports the feature under test. The full
runtime-forward.shsuite uses private tunnels, custom ALPN, DTLS, published QUIC, CONNECT-UDP, CONNECT-IP, and published TLS/HTTP paths, so run it against a Pro or Enterprise project.
Runtime credential and permission suites also require:
- A running Control plane API passed explicitly with
RSTREAM_RUNTIME_API_URL. - A PAT in
RSTREAM_RUNTIME_CONTROL_TOKENwithaccount.projects.read-only,account.tokens.create,account.credentials.read-write,tunnels.resources.read-only,tunnels.tunnels.create-delete, andtunnels.streams.create-delete. The tunnel permissions are required because the suites mint narrower child tokens and mTLS credentials. Use an unrestricted admin/dev PAT for the most complete runtime pass. The Control plane setup scripts do not reuse the engine context token implicitly. RSTREAM_CONTROL_PLANE_HEADERSset to the same JSON object used by the CLI when the Control plane is protected by an upstream access gateway.- At least one Basic project for token/grant runtime checks. Set
RSTREAM_RUNTIME_BASIC_PROJECT_ENDPOINTorRSTREAM_RUNTIME_PROJECT_ENDPOINTto make the selection explicit. - One Pro project for published tunnel mTLS checks. Set
RSTREAM_RUNTIME_PRO_PROJECT_ENDPOINT. - An engine build with mTLS support enabled when running mTLS suites.
Build
From the repository root:
make rstream
make test-bins
Equivalent manual commands:
make rstream
mkdir -p out/test/{websocket,webtransport,http,stream,datagram,masque,connect,bandwidth}
go build -o out/test/websocket/server ./test/websocket/server
go build -o out/test/websocket/client ./test/websocket/client
go build -o out/test/webtransport/server ./test/webtransport/server
go build -o out/test/webtransport/client ./test/webtransport/client
go build -o out/test/http/server ./test/http/server
go build -o out/test/http/client ./test/http/client
go build -o out/test/stream/server ./test/stream/server
go build -o out/test/stream/client ./test/stream/client
go build -o out/test/datagram/server ./test/datagram/server
go build -o out/test/datagram/client ./test/datagram/client
go build -o out/test/masque/server ./test/masque/server
go build -o out/test/masque/client ./test/masque/client
go build -o out/test/connect/server ./test/connect/server
go build -o out/test/connect/client ./test/connect/client
go build -o out/test/bandwidth/server ./test/bandwidth/server
go build -o out/test/bandwidth/client ./test/bandwidth/client
Run
The runtime scripts are split into two families:
- Engine-only suites use the selected
RSTREAM_CONTEXTor explicitRSTREAM_ENGINEand do not call the Control plane API. - Control-plane setup suites require
RSTREAM_RUNTIME_API_URLandRSTREAM_RUNTIME_CONTROL_TOKENbecause they create or verify API resources before connecting to the engine.
Set BIN to the directory containing the built binaries and execute the protocol matrix runner from the repository root:
export RSTREAM_CONTEXT=<context>
export BIN=out/test
bash run-e2e.sh
The script exits with status 0 if all cases pass, non-zero otherwise.
Before running cases, the script checks that all required binaries are executable and that either RSTREAM_CONTEXT or RSTREAM_ENGINE is set.
Private datagram cases also assert the selected tunnel packet path: stream framing over TLS transport, QUIC datagrams over QUIC transport, and stream framing when guaranteed delivery is requested. Nested QUIC and WebTransport cases use a 1200-byte initial packet size so their packets fit the QUIC datagram tunnel budget.
The baseline command pins TLS so packet-path assertions remain deterministic. Use bash run-e2e.sh --quic for strict QUIC and bash run-e2e.sh --auto to verify that automatic selection prefers QUIC on a reachable local engine.
To verify routing between distinct engines in the same regional pool, keep the normal context pointed at the regional ingress and explicitly select the tunnel owner for server processes:
export RSTREAM_E2E_OWNER_ENGINE=b43462b4.owner.example.com:8443
export RSTREAM_E2E_OWNER_AUTHENTICATION_TOKEN="..."
export RSTREAM_E2E_OWNER_STABLE_DOMAIN_ENGINE=b43462b4.pool.example.com:8443
bash run-e2e.sh
bash test/e2e/runtime-forward.sh --auto-transport
The explicit token is required so the harness cannot send stored credentials to an engine selected through an override. Client processes continue to use the normal context and therefore enter through the regional endpoint. The stable domain override is needed only by the CLI runtime matrix when the forced node endpoint differs from the regional serving endpoint.
Set RSTREAM_E2E_ALLOW_CROSS_REGION_ROUTING=true or false to override the
engine default for every matrix tunnel. Leave it unset to exercise the engine
default.
Run the runtime forwarding smoke suite:
export RSTREAM_CONTEXT=<context>
export BIN=out/test
bash test/e2e/runtime-forward.sh
The forwarding suite covers private bytestreams, published TCP, TLS, HTTP, DTLS, QUIC, CONNECT-UDP, and CONNECT-IP tunnels. Published TCP is exercised both as a raw byte round trip and with a real SSH client and server, including rejected password and host-key checks. The suite also validates published HTTP sub-path forwarding over HTTP/2 and HTTP/3, and verifies that reused HTTP/2 and HTTP/3 connections route each request by its current authority. Published TCP requires an eligible project with its explicit security policy enabled on an engine configured with an ephemeral TCP port range.
Run the same runtime forwarding checks over QUIC control-channel transport:
export RSTREAM_CONTEXT=<context>
export BIN=out/test
bash test/e2e/runtime-forward.sh --quic-transport
Use --auto-transport for the same matrix with automatic selection. The script pins TLS when neither option is provided.
Run the reserved TCP address lifecycle against a Control plane and its local engine:
export RSTREAM_CONTEXT=<context>
export RSTREAM_RUNTIME_API_URL=<control-plane-api-url>
export RSTREAM_RUNTIME_CONTROL_TOKEN='<token allowed to manage the project>'
export RSTREAM_RUNTIME_PROJECT_ID=<pro-or-enterprise-project-id>
export BIN=out/test
bash test/e2e/runtime-published-tcp-reservation.sh
The suite first issues two concurrent reservations and verifies that PostgreSQL serialization returns distinct addresses. It then reserves an address through the Control plane, opens a tunnel on its port, performs a raw TCP round trip, closes the tunnel, and releases the address into quarantine.
Use --release-active to release the address while its tunnel is online and
verify that the engine revokes the tunnel after its bounded authorization
lease:
bash test/e2e/runtime-published-tcp-reservation.sh --release-active
Run the published TCP policy and invalid-address checks with the same environment:
bash test/e2e/runtime-published-tcp-policy.sh
This suite restores the original project settings after checking explicit
opt-in, forbidden and authentication-required public access policies, invalid
ports, and a port that is not reserved by the project. Set
RSTREAM_RUNTIME_UNRESERVED_TCP_PORT when the cluster reserved range does not
include port 10000.
Run the EE bandwidth-limit matrix against an engine configured with 1 Mbps upstream and downstream limits for every plan used by the test context:
export RSTREAM_CONTEXT=<context>
export BIN=out/test
bash test/e2e/runtime-bandwidth-limit.sh
The matrix transfers 256 kB in each direction and checks a bounded duration.
It covers bytestream over TLS and QUIC, framed datagrams over TLS, the QUIC
datagram fast path with mixed and all-QUIC legs, and guaranteed datagrams over
QUIC streams. Override RSTREAM_BANDWIDTH_MIN_DURATION and
RSTREAM_BANDWIDTH_MAX_DURATION when intentionally testing another configured
rate.
To verify direction mapping independently, run the matrix once with only
upstream_mbps set to 1, then once with only downstream_mbps set to 1.
The default duration bounds apply to both passes.
The runtime transport proxy suite exercises the agent-to-engine proxy matrix with live local servers and proxies:
| Engine transport | Proxy path | Runtime path covered |
|---|---|---|
| TLS/TCP | HTTP CONNECT and HTTPS CONNECT | TCP proxy connection, CONNECT response handling, proxy authentication headers, end-to-end TLS to the engine target |
| TLS/TCP | SOCKS5 CONNECT | SOCKS5 negotiation, username/password authentication, and end-to-end TLS to the engine target |
| QUIC | HTTPS MASQUE CONNECT-UDP | HTTP/3 Extended CONNECT, HTTP datagrams, custom DNS for proxy and target, local bind/address-family selection, and end-to-end QUIC to the engine target |
| QUIC | SOCKS5 UDP ASSOCIATE | SOCKS5 control channel, UDP relay framing, local bind/address-family selection, and end-to-end QUIC to the engine target |
Run it with:
export RSTREAM_CONTEXT=<context>
export RSTREAM_AUTHENTICATION_TOKEN='<pat or auth token valid for the selected project>'
export RSTREAM_RUNTIME_MASQUE_PROXY_CERT_FILE=/path/to/masque-proxy.crt
export RSTREAM_RUNTIME_MASQUE_PROXY_KEY_FILE=/path/to/masque-proxy.key
export BIN=out/test
bash test/e2e/runtime-transport-proxy.sh
Run the challenge mode runtime suite:
export RSTREAM_CONTEXT=<context>
export RSTREAM_RUNTIME_API_URL=<control-plane-api-url>
export BIN=out/test
bash test/e2e/runtime-challenge-mode.sh
The challenge suite expects the engine challenge backend to point at the same Control plane API URL. It verifies that the challenge API route exists, then checks the first browser redirect over HTTP/2 and HTTP/3.
Run the token, permission, scope, and Tunnel access runtime suite:
export RSTREAM_RUNTIME_API_URL=<control-plane-api-url>
export RSTREAM_RUNTIME_CONTROL_TOKEN='<pat with account.projects.read-only account.tokens.create account.credentials.read-write>'
export RSTREAM_RUNTIME_BASIC_PROJECT_ENDPOINT='<basic-project-endpoint>'
bash test/e2e/runtime-token-permissions.sh
Run the mTLS runtime suite:
export RSTREAM_RUNTIME_API_URL=<control-plane-api-url>
export RSTREAM_RUNTIME_CONTROL_TOKEN='<pat with account.projects.read-only account.tokens.create account.credentials.read-write>'
export RSTREAM_RUNTIME_BASIC_PROJECT_ENDPOINT='<basic-project-endpoint>'
export RSTREAM_RUNTIME_PRO_PROJECT_ENDPOINT='<pro-project-endpoint>'
bash test/e2e/runtime-mtls-permissions.sh
Run the WebTTY CLI workflow suite:
bash test/e2e/webtty-cli-workflows.sh
This suite validates local WebTTY identities, trust-store files, registered server config parsing, workspace-managed device config, public help output, runtime E2E inference, WebDAV sidecar rejection when E2E is active, and non-interactive stdin semantics including empty input, large input, non-zero remote exits, and parallel clients.
Run the WebTTY runtime matrix:
bash test/e2e/webtty-runtime-matrix.sh
Exercise the real MCP stdio process with eight simultaneous WebTTY inventory calls per round, using both line-delimited and Content-Length framing:
python3 test/e2e/mcp-stdio-concurrency.py \
--binary ./out/cmd/rstream/dev/main/macos/arm64/release/bin/rstream \
--context <non-production-context> \
--url rstrm://<test-webtty-server>
Omit --url to exercise only the MCP dispatcher and inventory API. Supplying a
dedicated test server also runs eight simultaneous, output-verified shell
commands per round; do not target a production shell for this stress test.
The matrix starts live WebTTY servers and clients and covers direct Go
transports, JavaScript browser WebTransport, C++ client/server interop when the
C++ binaries are available, explicit-key E2E, connection setup, command
execution, and expected failure paths. It resolves companion repositories from
sibling checkouts named rstream-js and rstream-cpp; override with
RSTREAM_JS_REPO or RSTREAM_CPP_REPO when testing a different checkout.
WebTTY coverage is organized by behavioral boundaries rather than by repeating every CLI flag combination:
| Boundary | Runtime coverage |
|---|---|
| Transport | WebSocket, plain TCP, plain TLS, and WebTransport |
| Security | unauthenticated local development, token rejection, explicit-key E2E, and workspace-managed E2E |
| Session mode | interactive, non-interactive, spectator, control transfer, and recorded replay |
| Input lifecycle | terminal input, reader input, piped input, EOF, large payloads, early remote exit, and parallel clients |
| Runtime integration | direct servers, lightweight rstream tunnels, registered servers, engine reconnect, and parallel engine inventory resolution |
| Interoperability | Go, JavaScript, C++, and Windows when their runtime prerequisites are available |
The engine repository's test/e2e/webtty-managed-engine-runtime.sh complements
this matrix with the local Enterprise Edition engine, PostgreSQL projections,
managed sessions, and concurrent lightweight /api/tunnels resolution.
The runtime scripts resolve the CLI in this order: RSTREAM_BIN, a built repository binary under out/cmd/rstream, then rstream from PATH. Set RSTREAM_BIN when you need to test a specific binary.
Run the Windows WebTTY runtime suite from a Windows host or VM:
powershell -NoProfile -ExecutionPolicy Bypass `
-File test\e2e\webtty-windows-runtime.ps1 `
-Rstream C:\path\to\rstream.exe
From another machine, cross-compile the CLI first, copy both the binary and the script to the Windows host, then run the same command there:
GOOS=windows GOARCH=arm64 go build -o /tmp/rstream.exe ./cmd/rstream
scp /tmp/rstream.exe test/e2e/webtty-windows-runtime.ps1 winhost:C:/Temp/rstream-webtty/
ssh winhost 'powershell -NoProfile -ExecutionPolicy Bypass -File C:\Temp\rstream-webtty\webtty-windows-runtime.ps1 -Rstream C:\Temp\rstream-webtty\rstream.exe'
Use GOARCH=amd64 for an x64 Windows VM. The Windows runtime suite covers
WebSocket, plain transport, plain-over-TLS, WebTransport, current-user login
mode, explicit-key E2E, unauthorized client rejection, and duplicate-error-log
prevention. The script generates its local test certificate with Go, so it does
not require OpenSSL on the Windows host.
Pass C++ WebTTY binaries when validating Go/C++ interop on Windows:
powershell -NoProfile -ExecutionPolicy Bypass `
-File C:\Temp\rstream-webtty\webtty-windows-runtime.ps1 `
-Rstream C:\Temp\rstream-webtty\rstream.exe `
-CppServer C:\Temp\rstream-webtty\rstream-webtty-server.exe `
-CppClient C:\Temp\rstream-webtty\rstream-webtty-client.exe
With those binaries, the Windows suite also covers Go client to C++ server, C++ client to C++ server, C++ client to Go server, E2E authorized and unauthorized C++ paths, and known-server client identity resolution.
For the standard local stack, keep the public inputs explicit:
export RSTREAM_CONTEXT=tests
export RSTREAM_RUNTIME_API_URL=<control-plane-api-url>
export RSTREAM_RUNTIME_PROJECT_ENDPOINT=<project-endpoint>
export RSTREAM_RUNTIME_BASIC_PROJECT_ENDPOINT=<basic-project-endpoint>
export RSTREAM_RUNTIME_PRO_PROJECT_ENDPOINT=<pro-project-endpoint>
export RSTREAM_RUNTIME_CONTROL_TOKEN='<pat with account.projects.read-only account.tokens.create account.credentials.read-write>'
If you need to select a specific local CLI binary without hard-coding platform-specific output paths:
export RSTREAM_BIN="$(find out/cmd/rstream -type f -name rstream | sort | tail -n 1)"
For a full local validation pass:
go test ./...
make rstream
make test-bins
export RSTREAM_CONTEXT=<context>
export BIN=out/test
bash run-e2e.sh
bash test/e2e/runtime-forward.sh
bash test/e2e/runtime-forward.sh --quic-transport
export RSTREAM_RUNTIME_API_URL=<control-plane-api-url>
bash test/e2e/runtime-challenge-mode.sh
export RSTREAM_RUNTIME_CONTROL_TOKEN='<pat with account.projects.read-only account.tokens.create account.credentials.read-write>'
export RSTREAM_RUNTIME_BASIC_PROJECT_ENDPOINT='<basic-project-endpoint>'
export RSTREAM_RUNTIME_PRO_PROJECT_ENDPOINT='<pro-project-endpoint>'
bash test/e2e/runtime-token-permissions.sh
bash test/e2e/runtime-mtls-permissions.sh
Runtime suites create temporary auth tokens, temporary mTLS credentials, local upstream servers, and live tunnels. The scripts clean up temporary credentials and child processes on exit.
Direct real-Engine SDK integration
The opt-in integration build tag adds direct SDK tests against a running Engine. They create private bytestream tunnels, resolve them by name and ID, exercise normal and zero-RTT handshakes, run concurrent dialers, stay connected across negotiated heartbeats, and verify cleanup. A pausing TCP proxy also interrupts both directions of a live control connection for several heartbeat periods, restores the link, and requires the same connection to create a tunnel and relay data. The tests deliberately fail instead of skipping when their required environment is incomplete.
RSTREAM_GO_E2E_ENGINE=localhost:55443 \
RSTREAM_GO_E2E_TOKEN="$RSTREAM_AUTHENTICATION_TOKEN" \
RSTREAM_GO_E2E_TLS_INSECURE=1 \
go test -race -tags integration \
-run '^TestRealEngine(PrivateBytestreamLivenessAndConcurrency|ControlChannelSurvivesTemporaryNetworkPartition)$' .
RSTREAM_GO_E2E_TLS_INSECURE=1 is only for a local Engine using a generated certificate. It disables certificate verification but does not change TLS SNI routing: use the configured Engine hostname, such as localhost, rather than its numeric loopback address.
Set RSTREAM_GO_E2E_TUNNEL_TRANSPORT=tls or quic to qualify one transport
explicitly; the default is auto. The partition proxy always uses TLS and
retains the original Engine hostname for certificate verification and SNI, so
the same test can target a local or remote Engine without weakening TLS.
Set RSTREAM_GO_E2E_CONTROL_TRANSPORT to force the transport used by the
tunnel-owning control client independently. When unset, it follows
RSTREAM_GO_E2E_TUNNEL_TRANSPORT; setting both variables enables a directional
TLS/QUIC matrix that localizes multiplexing and relay failures.
Structure
test/
├── e2e/
│ ├── runtime-forward.sh — runtime TLS, HTTP, DTLS, QUIC, plain CONNECT, CONNECT-UDP/IP, sub-path forwarding, and HTTP/2/HTTP/3 connection reuse checks
│ ├── runtime-challenge-mode.sh — challenge API route and published HTTP challenge redirects over HTTP/2 and HTTP/3
│ ├── runtime-token-permissions.sh — Control plane API, Engine API, scopes, grants, watch, and published HTTP token checks
│ ├── runtime-mtls-permissions.sh — mTLS agent auth, mTLS published tunnel auth, and mTLS permission checks
│ └── runtime_harness.py — local TCP/TLS/HTTP/UDP helpers used by runtime scripts
├── websocket/
│ ├── server/ — WS echo server, supports h1/h2c/h3 upstream
│ └── client/ — WS client, supports h1/h2/h3 downstream
├── webtransport/
│ ├── server/ — WebTransport echo server
│ └── client/ — runs all 10 test cases sequentially
├── http/
│ ├── server/ — HTTP tunnel server (h1/h2c/h3, GET and SSE)
│ └── client/ — HTTP client exercising GET and SSE for each variant
├── stream/
│ ├── server/ — Bytestream echo server (plain / tls, published or not)
│ └── client/ — Bytestream client (plain / tls, direct or via SDK dialer)
├── datagram/
│ ├── server/ — Datagram echo server (dtls / quic / sctp, published or not)
│ └── client/ — Datagram client (dtls / quic / sctp, direct or via SDK dialer)
├── masque/
│ ├── server/ — CONNECT-UDP / CONNECT-IP server behind a published HTTP/3 datagram tunnel
│ └── client/ — MASQUE clients using quic-go/masque-go and quic-go/connect-ip-go
└── connect/
├── server/ — HTTP forward proxy CONNECT server behind h1, h2c, or h3 rstream tunnels
└── client/ — CONNECT client for h1, h2, and h3 downstream sessions
Flags
stream/server
| Flag | Default | Description |
|---|---|---|
--variant |
plain |
plain or tls |
--publish |
false | Register on engine's TLS listener |
--host |
— | Requested Stable domain hostname |
--tls-mode |
— | TLS mode for published TLS tunnels (terminated or passthrough) |
--tls-alpn |
— | Custom ALPN for published TLS tunnels |
--upstream-tls |
false | Use TLS between the edge and the server |
--name |
auto | Tunnel name |
stream/client
| Flag | Default | Description |
|---|---|---|
--variant |
plain |
plain or tls |
--addr |
— | Engine edge address for direct (published) connections |
--tls-alpn |
— | Custom ALPN for TLS connections |
--tunnel |
stream-matrix |
Tunnel name prefix for SDK dialer |
datagram/server
| Flag | Default | Description |
|---|---|---|
--variant |
dtls |
dtls, quic, or sctp |
--publish |
false | Register on engine's DTLS/QUIC listener |
--host |
— | Requested Stable domain hostname |
--tls-alpn |
— | Custom ALPN for published DTLS, QUIC, or SCTP tunnels |
--upstream-tls |
false | Use DTLS between the edge and the server for published DTLS tunnels |
--name |
auto | Tunnel name |
datagram/client
| Flag | Default | Description |
|---|---|---|
--variant |
dtls |
dtls, quic, or sctp |
--addr |
— | Engine edge address for direct (published) connections |
--tls-alpn |
— | Custom ALPN for published DTLS, QUIC, or SCTP connections |
--tunnel |
datagram-matrix |
Tunnel name prefix for SDK dialer |
masque/server
| Flag | Default | Description |
|---|---|---|
--variant |
connect-udp |
connect-udp, connect-ip, or all |
--name |
masque-runtime |
Tunnel name |
--hostname |
— | Requested Stable domain hostname |
masque/client
| Flag | Default | Description |
|---|---|---|
--variant |
connect-udp |
connect-udp or connect-ip |
--addr |
— | Published rstream forwarding address |
--target |
— | UDP target host:port for connect-udp |
--timeout |
20s |
Test timeout |
connect/server
| Flag | Default | Description |
|---|---|---|
--upstream |
h1 |
Upstream proxy protocol: h1, h2c, or h3 |
--name |
connect-runtime |
Tunnel name |
connect/client
| Flag | Default | Description |
|---|---|---|
--downstream |
h1 |
Downstream protocol to the published tunnel: h1, h2, or h3 |
--addr |
— | Published rstream forwarding address |
--target |
— | TCP target host:port for the CONNECT tunnel |
Directories
¶
| Path | Synopsis |
|---|---|
|
bandwidth
|
|
|
client
command
|
|
|
server
command
|
|
|
connect
|
|
|
client
command
|
|
|
server
command
|
|
|
datagram
|
|
|
client
command
|
|
|
server
command
|
|
|
http
|
|
|
client
command
|
|
|
server
command
|
|
|
masque
|
|
|
client
command
|
|
|
server
command
|
|
|
proxy
|
|
|
server
command
|
|
|
stream
|
|
|
client
command
|
|
|
server
command
|
|
|
websocket
|
|
|
client
command
|
|
|
server
command
|
|
|
webtransport
|
|
|
client
command
|
|
|
server
command
|