Commit 88808c6
Add moqt extension drafts: relay hops, object timestamps, payload compression (#30)
* Add moq-transport extension drafts for relay hops, timestamps, compression
moq-lite has grown features with no equivalent in draft-ietf-moq-transport-18.
Extract them as standalone moqt extension drafts (modeled on moq-probe) so they
can be adopted upstream independently:
- relay-hops: Hop ID path list (loop detection + shortest-path tiebreak) and
Exclude Hop, via PUBLISH_NAMESPACE / SUBSCRIBE_NAMESPACE parameters.
- timestamp: track Timescale + per-object Timestamp/Duration as Key-Value-Pair
properties, enabling consistent age-based dropping across relays.
- compression: per-object DEFLATE negotiated via Setup Option + track property,
with a new algorithm registry and relay transcoding rules.
Negotiation uses moqt Setup Options; data rides on the native Key-Value-Pair
mechanism. Codepoints are distinctive provisional values to be finalized.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* CLAUDE.md: document that `make` self-bootstraps its toolchain
`make` clones the i-d-template submodule and installs xml2rfc (pip venv) and
kramdown-rfc (bundler) on first run, so the drafts build without manually
installing the toolchain. Note that there is no separate format step.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Address review: hops bridging, empty EXCLUDE_HOP, IANA registry names
- relay-hops: bridging from a non-supporting peer now SHOULD synthesize a
leading 0 hop (was MAY/omit) so path lengths stay comparable.
- relay-hops: an empty EXCLUDE_HOP (Length 0) is now a permitted no-op instead
of a PROTOCOL_VIOLATION, matching the empty-HOP_PATH behavior.
- IANA: register in the correct moqt-18 registries — message parameters under
"MOQT Message Parameters" (Section 15.7) for HOP_PATH/EXCLUDE_HOP, and object/
track properties under "MOQT Properties" (Section 15.8) for the timestamp and
compression drafts; align Setup Options naming to "MOQT Setup Options".
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Address review feedback on hops, timestamp, compression
relay-hops:
- Hop IDs are now random integers; drop the reserved 0 "unknown hop" (a
moq-lite-04 legacy). Bridging a non-supporting upstream synthesizes a random
stand-in ID so loop detection still works.
- HOP_PATH always has >=1 entry; the first is the origin publisher's own ID,
enabling broadcast-identity (same first ID = same broadcast).
- Relay MUST include HOP_PATH and MUST honor EXCLUDE_HOP (was SHOULD).
- EXCLUDE_HOP is now a single Hop ID (even Type, bare varint), matching
moq-lite; removes the empty-list and large-list edge cases.
- Reorder intro (path selection first), add broadcast-identity use.
- Security: topology hiding is now advisory (MAY coalesce/strip, like BGP
confederations) not MUST; clarify a relay can only append hops, not shorten a
path, so forgery impact is limited to advisory tie-breaks. Drop EXCLUDE_HOP
DoS note (single value now).
timestamp:
- Note the demuxed nature of MoQ makes timestamps near-universal per track.
- Note Timescale is required to interpret units, so timing can't be resolved
until track properties arrive (SUBSCRIBE_OK / TRACK_STATUS).
- Duration MAY now refine age-based dropping (object end = timestamp+duration).
compression:
- Reframe as hop-by-hop wire optimization (HTTP Transfer-Encoding analogy), not
an end-to-end publisher track property; the origin need not opt in.
- COMPRESSION moves from a track property to a per-subscription property in
SUBSCRIBE_OK / FETCH_OK; register under MOQT Message Parameters (15.7).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* compression: revert COMPRESSION to a publisher track property
Per review: COMPRESSION is the original publisher's end-to-end signal that a
track's payloads are worth compressing (and which algorithm), not a per-hop
choice. Actual on-wire compression stays hop-by-hop and is gated by negotiation:
a payload is compressed only on a hop that negotiated the extension and whose
receiver advertised the algorithm; otherwise it travels verbatim. The
property is forwarded unchanged by relays, making the on-wire state
unambiguous without per-object signaling. Re-register under MOQT Properties
(Section 15.8, Track scope).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* compression: clarify decompression-bomb reset scope; tighten pronoun
Per review: the decompression-bomb guard now explicitly resets only the affected
Subscribe/Fetch stream (and MAY close the session with PROTOCOL_VIOLATION only
if the peer is abusive), so one bad object doesn't tear down unrelated
subscriptions. Also clarify the relay-behavior pronoun.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* compression: clarify the track property is the sole enabler
- A relay MUST forward the COMPRESSION track property unchanged even on hops
that did not negotiate the extension, so a further-downstream hop that does
negotiate it can still act on the publisher's signal.
- State explicitly that compression is enabled only by the track property plus a
negotiated hop: a publisher MUST NOT compress without the property, and there
is no per-object enabling. (The .json relay heuristic was already removed in
6f59a40.)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent bacaaa2 commit 88808c6
4 files changed
Lines changed: 561 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
15 | 26 | | |
16 | 27 | | |
17 | 28 | | |
18 | 29 | | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
19 | 33 | | |
20 | 34 | | |
21 | 35 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
0 commit comments