You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
moq-lite-05: add Path Setup Parameter for URI-less transports (#27)
Native QUIC and Qmux-over-TCP/TLS negotiate only an ALPN token and have
no request URI, so there is no way for a client to convey which path
(origin/relay/virtual host) it wants to reach. Add a Path Setup
Parameter (0x2) carrying an RFC3986 URI path, mirroring the PATH
parameter from draft-ietf-moq-transport-18.
It is client-only and required on the URI-less bindings (1 and 3),
forbidden on the bindings that already carry the path in their handshake
(WebTransport CONNECT URI, WebSocket request URI). Misuse and malformed
paths are PROTOCOL_VIOLATION; an unsupported path closes the session.
Relays do not forward it, consistent with other per-hop capabilities.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: draft-lcurley-moq-lite.md
+23Lines changed: 23 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,6 +20,7 @@ normative:
20
20
moqt: I-D.ietf-moq-transport
21
21
qmux: I-D.ietf-quic-qmux
22
22
RFC1951:
23
+
RFC3986:
23
24
RFC6455:
24
25
RFC9002:
25
26
@@ -83,6 +84,9 @@ The moq-lite version identifier is `moq-lite-xx` where `xx` is the two-digit dra
83
84
For bare QUIC, this is negotiated as an ALPN token during the QUIC handshake.
84
85
For WebTransport over HTTP/3, the QUIC ALPN remains `h3` and the moq-lite version is advertised via the `WT-Available-Protocols` and `WT-Protocol` CONNECT headers.
85
86
87
+
The bindings negotiated solely via ALPN (bare QUIC and Qmux over TCP/TLS) have no request URI, so a client conveys the request path it wishes to reach via the [Path Parameter](#path-parameter) in SETUP.
88
+
The remaining bindings carry the path in their own handshake and do not use this parameter; see [Path Parameter](#path-parameter).
89
+
86
90
When UDP is unavailable, moq-lite-05 MAY also run over reliable byte-stream transports via Qmux [qmux].
87
91
Qmux provides a length-delimited polyfill for QUIC streams on top of TCP/TLS or WebSocket; see [Transports](#transports) for the specific bindings and ALPN negotiation.
88
92
@@ -589,6 +593,8 @@ The following Setup Parameters are defined:
589
593
|-----:|:---------|:------------|
590
594
| 0x1 | Probe | Level (i) |
591
595
|------|----------|-------------|
596
+
| 0x2 | Path | Path (s) |
597
+
|------|----------|-------------|
592
598
593
599
### Probe Parameter {#probe-parameter}
594
600
The Probe Parameter advertises the sender's capability level when acting as a publisher on a [Probe Stream](#probe).
@@ -606,6 +612,23 @@ A subscriber MUST consult the publisher's advertised level before relying on a P
606
612
- At `Report`, the subscriber MAY open a Probe Stream to monitor the estimated bitrate but MUST NOT expect the publisher to pad above its current sending rate. A subscriber that needs to probe for additional bandwidth MUST use an alternative (e.g. speculatively switching to a higher rendition).
607
613
- At `Increase`, the subscriber MAY request a target bitrate and expect the publisher to actively probe up to it.
608
614
615
+
### Path Parameter {#path-parameter}
616
+
The Path Parameter carries the request path the client wishes to reach, equivalent to the path component of a moq-lite URI.
617
+
A server uses it to route the session to the correct origin, relay, or virtual host before any broadcasts are exchanged; its interpretation is otherwise application-defined and opaque to moq-lite.
618
+
Unlike the other Setup Parameters it is not a capability — it is connection metadata that rides along in SETUP because that is the first client-to-server message of the session.
619
+
620
+
The Parameter Value is a non-empty UTF-8 string that begins with `/` and uses the path syntax of a URI [RFC3986].
621
+
622
+
This parameter exists for bindings that have no request URI of their own: the native QUIC binding (binding 1 in [Transports](#transports)) and the Qmux-over-TCP/TLS binding (binding 3), both of which negotiate only an ALPN token.
623
+
The remaining bindings convey the path in their own handshake.
624
+
625
+
- A client using a binding without a request URI (binding 1 or 3) MUST send exactly one Path Parameter in its SETUP.
626
+
- The Path Parameter MUST NOT be sent on a binding that carries a request URI. The WebTransport (binding 2) and Qmux-over-WebSocket (binding 4) bindings convey the path in their handshake URI (the CONNECT request path and the WebSocket request URI, respectively). A server that receives a Path Parameter on either of these bindings MUST close the session with a PROTOCOL_VIOLATION.
627
+
- A server MUST NOT send a Path Parameter. SETUP is bidirectional, but the path is meaningful only from client to server; a client that receives a Path Parameter MUST close the session with a PROTOCOL_VIOLATION.
628
+
- A server that receives a Path that is empty or is not a valid URI path MUST close the session with a PROTOCOL_VIOLATION. A server that does not recognize or support the requested path MUST close the session.
629
+
630
+
A relay MUST NOT forward the Path Parameter; like every other negotiated capability it applies only to this hop (see [Session](#session)).
631
+
609
632
610
633
## ANNOUNCE_INTEREST
611
634
A subscriber sends an ANNOUNCE_INTEREST message to indicate it wants to receive an ANNOUNCE message for any broadcasts with a path that starts with the requested prefix.
0 commit comments