pub struct RendezvousHandshake { /* private fields */ }Expand description
A driveable, symmetric SRT Rendezvous handshake
(draft-sharabayko-srt-01 §4.3.2). See the module docs for the state
machine and the design decisions not explicit in the curated rules.
Implementations§
Source§impl RendezvousHandshake
impl RendezvousHandshake
Sourcepub fn new(own_socket_id: u32, own_cookie: u32, config: HandshakeConfig) -> Self
pub fn new(own_socket_id: u32, own_cookie: u32, config: HandshakeConfig) -> Self
Creates a fresh Rendezvous handshake in
RendezvousHandshakeState::Idle, with the 32-bit cookie this side
will offer in the cookie contest (§4.3.2, L2107-2135). This crate never
reads a clock or a socket address — see
crate::handshake_sm::derive_cookie for a ready-made,
non-standardized derivation helper.
Sourcepub fn state(&self) -> RendezvousHandshakeState
pub fn state(&self) -> RendezvousHandshakeState
The current state.
Sourcepub fn role(&self) -> Option<RendezvousRole>
pub fn role(&self) -> Option<RendezvousRole>
The role resolved by the cookie contest, once past
RendezvousHandshakeState::Waving.
Sourcepub fn negotiated(&self) -> Option<&NegotiatedParams>
pub fn negotiated(&self) -> Option<&NegotiatedParams>
The negotiated parameters, once RendezvousHandshakeState::Connected.
Sourcepub fn start(&mut self) -> Result<Vec<u8>>
pub fn start(&mut self) -> Result<Vec<u8>>
Builds the initial WAVEAHAND handshake (§4.3.2, L2100/L2153-2170:
Version 5, this side’s own cookie, no extensions) and transitions to
RendezvousHandshakeState::Waving.
§Errors
Error::HandshakeOutOfSequence if called more than once.
Sourcepub fn feed(
&mut self,
packet: &ControlPacket<'_>,
) -> Result<Vec<HandshakeOutput>>
pub fn feed( &mut self, packet: &ControlPacket<'_>, ) -> Result<Vec<HandshakeOutput>>
Feeds an inbound control packet.
A non-Handshake ControlPacket fed while this side is a Responder
stuck in RendezvousHandshakeState::Initiated is treated as
missing-packet recovery rule 3 (L2413-2422: “any control packet
normally only sent between connected parties”) rather than an error —
see Self::on_recovery_trigger for the data-packet analogue.
§Errors
Error::UnexpectedControlPacket for a non-Handshake packet outside
that one recovery case; Error::HandshakeOutOfSequence if fed before
Self::start or after a terminal state (a driver bug, not a peer
protocol failure).
Sourcepub fn feed_bytes(&mut self, bytes: &[u8]) -> Result<Vec<HandshakeOutput>>
pub fn feed_bytes(&mut self, bytes: &[u8]) -> Result<Vec<HandshakeOutput>>
Convenience wrapper: parses bytes as a ControlPacket then
Self::feeds it.
Sourcepub fn on_recovery_trigger(&mut self) -> Result<Vec<HandshakeOutput>>
pub fn on_recovery_trigger(&mut self) -> Result<Vec<HandshakeOutput>>
Missing-packet recovery rule 3 (§4.3.2.2, L2413-2422): call this when
the driver receives a data packet (SrtPacket::Data) while this side
has not yet reached RendezvousHandshakeState::Connected. A no-op
(Ok(Vec::new())) unless this side is a Responder stuck in
RendezvousHandshakeState::Initiated — the one case the draft says
is “exceptionally allowed” to promote to Connected “as if it had
received AGREEMENT”.
Sourcepub fn tick(&mut self) -> Vec<HandshakeOutput>
pub fn tick(&mut self) -> Vec<HandshakeOutput>
Advances retransmit timing by one caller-defined tick, mirroring
crate::caller::CallerHandshake::tick /
crate::listener::ListenerHandshake::tick.