What's Changed
Relay and interop fixes
- Draft 16: accept the SUBSCRIBE_NAMESPACE bidirectional stream and count its Request ID, so a relay such as moq-relay that opens it before its first SUBSCRIBE no longer gets the session closed with INVALID_REQUEST_ID (#118, fixes #83).
--retryand endpoint failover now reconnect after the relay disappears. A connection the peer dropped is reported as failed instead of still connected, so the failure is retryable (#119, fixes #95).- Drafts 18 and later answer TRACK_STATUS: a published track gets TRACK_STATUS_OK with LARGEST_OBJECT once it has objects, an unknown track gets DOES_NOT_EXIST, and the stream ends with a FIN. This lets a relay that asks before it subscribes start a track (#120, fixes #94).
- Draft 18 serves a Joining FETCH of the catalog, so a late catalog subscriber gets the catalog object it missed. A standalone FETCH or a Joining FETCH of another track gets NOT_SUPPORTED (#120).
- Draft 16 answers FETCH and TRACK_STATUS with NOT_SUPPORTED instead of skipping them (#120).
- REQUEST_OK decodes LARGEST_OBJECT as a bare Location on drafts 17 and later, matching what moqxr encodes (#109).
Draft 23 interop tester findings
- Session termination codes follow section 12.2: protocol violations now close with the specific code (for example 0x300 to 0x306, 0x400, 0x401, and 0x200 to 0x202 for datagrams) instead of a generic PROTOCOL_VIOLATION.
- A second request-stream answer that arrives in the same read as the first is now examined instead of ignored.
- A subscription's stream now ends with a FIN on request-stream drafts.
- The reserved subgroup ID mode is rejected.
- New opt-in flag
--moq-impl-idsends the MOQT_IMPLEMENTATION setup option (0x07). It is off by default. See the quickstart.
Fixes #110, #111, #112, #113, #114, #115 and #116 (#117).
Notes
- Not verified against a live relay: TRACK_STATUS (the relay build available did not send one) and the three live-input session loops, which share the new handler but are covered by the file-input session test only.
- A Joining FETCH may join a catalog subscription that has already completed, since the fetch reaches the publisher after the catalog object was sent on it. Draft 18 strictly says INVALID_JOINING_REQUEST_ID for that case.
- A peer-initiated close for a deterministic reason, such as an authorization rejection, is now also retried, bounded by
--retry.
Full Changelog: v0.4.12...v0.4.13