moqtap_codec/draft19/mod.rs
1//! MoQT wire codec for draft-19.
2//!
3//! Key changes from draft-18:
4//! - `Request ID` field removed from GOAWAY entirely; control-stream and
5//! request-stream GOAWAY now share one format
6//! - New Range Filter parameters (length-prefixed): SUBGROUP_FILTER (0x25),
7//! OBJECTID_FILTER (0x26), PRIORITY_FILTER (0x27), OBJECT_PROPERTY_FILTER
8//! (0x28) and TRACK_PROPERTY_FILTER (0x29)
9//! - New Setup Options MAX_FILTER_RANGES (0x06) and MAX_REQUEST_UPDATES (0x08)
10//! (even KVP types, varint values)
11//! - GROUP_ORDER (0x22) moves from PUBLISH_OK to SUBSCRIBE_TRACKS
12//! - PUBLISH_BLOCKED renamed to PUBLISH_SKIPPED (still type 0x0F, wire
13//! identical)
14//! - SUBSCRIPTION_FILTER renamed to LOCATION_FILTER (still parameter 0x21)
15//! - REQUEST_ERROR adds CONFLICTING_FILTERS (0x35) and INVALID_FILTER (0x36);
16//! DUPLICATE_SUBSCRIPTION (0x19) removed as multiple concurrent
17//! subscriptions per Track are now allowed
18//! - Session error TOO_MANY_REQUEST_UPDATES (0x1B) added
19//! - Data stream headers (subgroup, datagram, fetch) are byte-for-byte
20//! identical to draft-18
21//! - Object Status gets its own IANA registry (Section 15.9, Table 16) with a
22//! `Payload` column, and Section 11.2.1.1 defers to it: an Object has an
23//! empty payload "unless its Object Status value is registered as permitting
24//! a payload". Draft-18 stated one blanket rule for every status instead —
25//! any non-zero status means an empty payload — so the answer used to be
26//! arithmetic on the code point and is now registry data, which every future
27//! registration must supply. The three assigned code points are unchanged
28//! (0x0 Normal, 0x3 End of Group, 0x4 End of Track) and the two rules happen
29//! to agree on all three. Modelled as `types::PayloadPermission`
30//! - The control-message framing field after Message Length is renamed from
31//! Message Payload to Message Body (Section 10, Figure 3). Editorial: the
32//! bytes are unchanged
33//! - OBJECT_DELIVERY_TIMEOUT (Property Type 0x02) and
34//! SUBGROUP_DELIVERY_TIMEOUT (0x06) become Track *and* Object Properties
35//! (Section 15.8, Table 14; they were Track-only in draft-18). Section 8
36//! gives the new scope its meaning: set as an Object Property on the first
37//! object in a subgroup either value overrides the Track-level value for
38//! that subgroup, and on any other object in the subgroup it is ignored.
39//! This codec carries Object Properties as an opaque blob, so the change is
40//! recorded here rather than modelled
41//! - The 1-byte Property Type range reserved for application-specific use
42//! moves from 0x38-0x3F to 0x78-0x7F (Section 2.5). The 2-byte range
43//! 0x3800-0x3FFF is unchanged. Draft-18 had assigned PRIOR_GROUP_ID_GAP
44//! (0x3C) and PRIOR_OBJECT_ID_GAP (0x3E) inside its own reserved range;
45//! draft-19 resolves that by moving the range and leaving the two
46//! assignments where they are
47
48#[allow(missing_docs)]
49pub mod data_stream;
50pub mod error_codes;
51/// This draft's field names for a decoded control message.
52pub mod fields;
53#[allow(missing_docs)]
54pub mod message;
55#[allow(missing_docs)]
56pub mod types;