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
//! SRT for sapflow: live receiver/listener and bounded paced caller/sender.
//!
//! Written from the SRT specification (draft-sharabayko-srt-01) and from
//! watching real sessions on the wire (libsrt 1.5.4's `srt-live-transmit`
//! and the encoders in `docs/interop.md`); where the two differ, the wire
//! wins and `docs/reference.md` says so.
//!
//! Sans-IO, no async runtime: [`Listener`] takes datagrams with their
//! source address and the time, and gives back datagrams to send,
//! [`Event`]s (a caller asking to connect, payloads in order, a connection
//! closing) and when it next needs the time. The server owns the socket.
//!
//! Layers:
//!
//! - [`seq`]: 31-bit sequence numbers and 32-bit timestamps, both wrapping.
//! - [`packet`]: every packet type, parsed from and encoded to bytes.
//! - [`loss`]: the receiver's loss list and when to ask again.
//! - [`rtt`]: round-trip time from ACK/ACKACK pairs.
//! - [`receiver`]: one connection: buffer, timestamp-based delivery with
//! too-late drop, ACKs, NAKs, keepalives, idle timeout.
//! - [`listener`]: handshakes (version 5, SYN cookies keyed per process),
//! stream ids, limits, and the connections.
//!
//! [`Caller`] adds bounded, paced live sending. Live mode only: no file
//! mode, rendezvous, groups or packet filters. Optional AES-128/256-CTR uses
//! strict key negotiation and refresh. CTR does not authenticate media;
//! control/stream IDs remain clear. See [`crypto`] for the supported profile.
//!
//! Every byte that arrives is hostile until the application accepts the
//! caller: nothing here indexes without a bound or trusts a length, and
//! it is fuzzed (`own_srt_packet`, `own_srt_listener`).
pub use ;
pub use ;
pub use ;
pub use ;