Skip to main content

moqtap_client/draft23/
mod.rs

1//! MoQT client implementation for draft-23.
2//!
3//! Each draft lives in its own top-level module with a complete, independent
4//! implementation: connection, endpoint state machine, event types, observer
5//! trait, and per-flow state machines (subscribe, fetch, publish, namespace,
6//! track status). Enable via the `draft23` feature. The negotiated draft is
7//! the ALPN, `moqt-23` on raw QUIC; there is no version on the wire.
8//!
9//! # What a caller feels
10//!
11//! * **A FETCH is answered by REQUEST_OK** (Section 1.5 and Section 9.3). Type
12//!   0x18 is reserved, so
13//!   [`Connection::respond_ok`](connection::Connection::respond_ok) answers a
14//!   FETCH, and the first REQUEST_OK on a FETCH's stream is its FETCH_OK; a
15//!   later one answers a REQUEST_UPDATE.
16//! * **`PAUSED` (0x11) carries the pause**, 1 for paused (Section 9.19.18).
17//!   The facade's `Forward` choice is written as PAUSED.
18//! * **Overlapping namespace subscriptions are accepted**: draft-23 has no
19//!   PREFIX_OVERLAP (Section 3.6, Section 4.2 and Section 12.3).
20//! * **Session close codes are the draft-23 ones** (Section 12.2):
21//!   [`EndpointError::session_error_code`](endpoint::EndpointError::session_error_code)
22//!   and
23//!   [`Connection::codec_session_error_code`](connection::Connection::codec_session_error_code)
24//!   give the code each rule's sentence names.
25//! * **Control messages are bounded by MAX_CONTROL_MESSAGE_SIZE** (Section
26//!   9.1.8): what this endpoint reads is held to the value its own SETUP
27//!   advertised, 65535 unless it advertised more, and what it writes after
28//!   SETUP to the value the server's SETUP advertised.
29//! * **An Object both received and signalled as not existing makes its Track
30//!   malformed** (Section 12.1). The signals recorded are Prior Group ID Gap
31//!   and Prior Object ID Gap properties and, on the stream answering a FETCH
32//!   this endpoint sent, End of Non-Existent Range and the gaps between two
33//!   entries of a FETCH with no Range Filter (Section 3.2.2).
34//!
35//! # What this module does not enforce
36//!
37//! Draft-23 lists the parameters a REQUEST_UPDATE (Section 9.5) may carry per
38//! kind of request. The codec holds each message to the union of its lists,
39//! and this endpoint does not narrow an update to the list for its request's
40//! kind. A REQUEST_OK this endpoint receives is held to its request's own list
41//! (Section 9.3).
42//!
43//! Fill fetch streams record nothing about which Objects exist, and neither do
44//! the gaps before a FETCH stream's first entry and after its last: those are
45//! measured against Section 3.2.2's End Location, the LARGEST_OBJECT in a
46//! FETCH_OK that can arrive after the stream has ended.
47
48/// Outbound MoQT connection with MoQT framing over QUIC.
49pub mod connection;
50pub mod endpoint;
51pub mod event;
52/// Fetch lifecycle state machine.
53pub mod fetch;
54pub mod fill;
55/// Subscribe/Publish namespace state machines.
56pub mod namespace;
57pub mod observer;
58/// Publish lifecycle state machine.
59pub mod publish;
60pub mod session;
61/// Subscription lifecycle state machine.
62pub mod subscription;
63/// Track status lifecycle state machine.
64pub mod track_status;