Expand description
MoQT client implementation for draft-20.
Each draft lives in its own top-level module with a complete, independent implementation: connection, endpoint state machine, event types, observer trait, and per-flow state machines (subscribe, fetch, publish, namespace, track status). No code is shared across drafts — each draft carries its own copy because wire-level differences would make a shared layer leaky.
Enable via the draft20 feature.
§What changed from draft-19, in the places a caller can feel it
- FETCH was rebuilt (Section 10.13). The
Fetch Typefield, the Standalone and Joining Fetch structures and the whole joining mechanism are gone; the Track Namespace and Track Name are inline fields, and the range travels in theLOCATION_FILTERparameter. SoConnection::fetchtakes a parameter list where draft-19’s took four location varints, andjoining_fetch/absolute_joining_fetchno longer exist. A fill fetch stream is what replaces them; seefill. FILL_PARAMETERS(0x23) is new (Section 10.2.15). Its presence on a SUBSCRIBE or a REQUEST_UPDATE asks the publisher to open a fill fetch stream — a unidirectional stream beginning with a FETCH_HEADER that carries the subscription’s Request ID.fill::FillParametersbuilds the parameter andEndpoint::fill_requestedis what tells an arriving FETCH_HEADER apart from a fetch’s.PUBLISH_STATE_NOTIFY(0x22) is new (Section 10.10): a unilateral report from the publisher on a subscription’s stream, answered with nothing and not counted againstMAX_REQUEST_UPDATES. It arrives asClientEvent::PublishStateNotify.- Ranges are inclusive at both ends (Sections 5.1.2, 10.13, 10.14). Draft-19’s fetch end was “the last Object, plus 1; or 0 to indicate the entire Group”; both conventions are deleted, and nothing in this module carries the arithmetic forward.
INCLUDE_PROPERTIES(0x35) is new (Section 10.2.21): a uint8 opt-out from Track Properties on the responding OK, default 1.- Three code points went:
SUBSCRIPTION_ENDED(PUBLISH_DONE 0x3),VERSION_NEGOTIATION_FAILED(session 0x15) andINVALID_JOINING_REQUEST_ID(REQUEST_ERROR 0x32). - There is still no version on the wire. The negotiated draft is the
ALPN,
moqt-20on raw QUIC, exactly as on drafts 15 through 19.
Section numbers shifted from 10.10 on, and LOCATION_FILTER’s neighbours
shifted with them. Every citation in this module is draft-20’s own.
Modules§
- connection
- Outbound MoQT connection with MoQT framing over QUIC.
- endpoint
- Draft-20 MoQT endpoint.
- event
- Client event types emitted by a MoQT connection.
- fetch
- Fetch lifecycle state machine.
- fill
- Location filters and fill fetch streams, the two things draft-20 asks a subscriber to build that no earlier draft has.
- namespace
- Subscribe/Publish namespace state machines.
- observer
- Connection observer trait for receiving structured events.
- publish
- Publish lifecycle state machine.
- session
- MoQT session lifecycle management.
- subscription
- Subscription lifecycle state machine.
- track_
status - Track status lifecycle state machine.