#[non_exhaustive]#[repr(usize)]pub enum Slot {
Show 14 variants
CongestionControl = 1_000,
TwccSender = 2_000,
Pacer = 3_000,
NackResponder = 4_000,
FecEncoder = 5_000,
FecDecoder = 6_000,
NackGenerator = 7_000,
TwccReceiver = 8_000,
Rfc8888 = 9_000,
ReceiverReport = 10_000,
SenderReport = 11_000,
IntervalPli = 12_000,
JitterBuffer = 13_000,
Custom(usize),
}Expand description
Where an interceptor belongs in the chain, measured by distance from the wire.
This is the chain contract’s ordering table expressed as data, so that one place decides it and a test can check a builder against it. The doc comments carry that table’s indices; the gaps are slots nothing fills yet.
Read walks the list forwards and write walks it in reverse, so a smaller slot is closer to the network in both directions.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
CongestionControl = 1_000
Congestion control: send history and feedback ingest.
The only position that sees every byte that leaves, because nothing exits the chain except through the interceptors ahead of it. Named here so an estimator of your own has a landmark.
TwccSender = 2_000
TwccSenderInterceptor — assigns the transport-wide sequence number the send history keys on.
Pacer = 3_000
PacerInterceptor — gates departures. Everything that generates a packet sits above it, so
retransmissions, FEC repair and generated RTCP are all metered.
NackResponder = 4_000
NackResponderInterceptor — buffers sent RTP; its retransmissions still reach 3_000, 2_000, 1_000.
FecEncoder = 5_000
FlexFec03SendInterceptor — its repair packets still reach everything below.
FecDecoder = 6_000
FlexFec03ReceiveInterceptor — recovery before anything inspects sequence numbers.
NackGenerator = 7_000
NackGeneratorInterceptor — loss detected from arrivals, not from released packets.
TwccReceiver = 8_000
TwccReceiverInterceptor — records arrivals and reports them to the remote sender’s
congestion controller. An arrival recorder, so it precedes the jitter buffer.
Rfc8888 = 9_000
Rfc8888Interceptor — the same job as Slot::TwccReceiver in a different format, and
registering both double-counts, so a chain carries one or the other.
ReceiverReport = 10_000
ReceiverReportInterceptor — RFC 3550 reception quality, not congestion-control feedback.
Still an arrival recorder, so it precedes the jitter buffer.
SenderReport = 11_000
SenderReportInterceptor — a generator with no read-side ordering constraint.
IntervalPli = 12_000
IntervalPliInterceptor — a generator with no read-side ordering constraint.
JitterBuffer = 13_000
JitterBufferInterceptor — delays and re-stamps, so every arrival recorder precedes it.
A recorder below this would report local playout instants to the remote as arrival times, and the remote’s congestion controller would read this endpoint’s buffering depth as network delay variation.
Custom(usize)
Anywhere else, for an interceptor this crate knows nothing about.
The named slots are spaced a thousand apart so that one of your own fits between any two of
them without renumbering anything: Slot::from(6_500) sits after the FEC decoder and before
the NACK generator. Reach it through From<usize> rather than
by naming the variant, so the spelling stays the same if this gains a richer representation.