pub struct ReceiverState { /* private fields */ }Expand description
Per-peer receiver-side MMP state.
Accumulates per-frame observations and produces ReceiverReport snapshots.
Implementations§
Source§impl ReceiverState
impl ReceiverState
pub fn new(owd_window_size: usize) -> Self
Sourcepub fn new_with_cold_start(owd_window_size: usize, cold_start_ms: u64) -> Self
pub fn new_with_cold_start(owd_window_size: usize, cold_start_ms: u64) -> Self
Create with a custom cold-start interval (ms).
Used by session-layer MMP which needs a longer initial interval since reports consume bandwidth on every transit link.
Sourcepub fn reset_for_rekey(&mut self, now: Instant)
pub fn reset_for_rekey(&mut self, now: Instant)
Reset counter-dependent state for rekey cutover.
After cutover, the new session starts with counter 0 and reset
timestamps. Without resetting, the old highest_counter and
GapTracker.expected_next cause false reorder/loss detection.
Sourcepub fn record_recv(
&mut self,
counter: u64,
sender_timestamp_ms: u32,
bytes: usize,
ce_flag: bool,
now: Instant,
)
pub fn record_recv( &mut self, counter: u64, sender_timestamp_ms: u32, bytes: usize, ce_flag: bool, now: Instant, )
Record a received frame from this peer.
Called on the RX path after AEAD decryption, before message dispatch.
counter: AEAD counter from outer headersender_timestamp_ms: session-relative timestamp from inner header (ms)bytes: wire payload sizece_flag: CE bit from flags bytenow: current local time
Sourcepub fn build_report(&mut self, now: Instant) -> Option<ReceiverReport>
pub fn build_report(&mut self, now: Instant) -> Option<ReceiverReport>
Build a ReceiverReport from current state and reset the interval.
Returns None if no frames have been received since the last report.
Sourcepub fn should_send_report(&self, now: Instant) -> bool
pub fn should_send_report(&self, now: Instant) -> bool
Check if it’s time to send a report.
Sourcepub fn update_report_interval_from_srtt(&mut self, srtt_us: i64)
pub fn update_report_interval_from_srtt(&mut self, srtt_us: i64)
Update the report interval based on SRTT (link-layer defaults).
Receiver reports at 1× SRTT clamped to [floor, MAX]. During cold-start
(first COLD_START_SAMPLES updates), the floor is the cold-start
interval (200ms) for fast SRTT convergence. After that, it rises to
MIN_REPORT_INTERVAL_MS (1000ms) for steady-state efficiency.
Sourcepub fn update_report_interval_with_bounds(
&mut self,
srtt_us: i64,
min_ms: u64,
max_ms: u64,
)
pub fn update_report_interval_with_bounds( &mut self, srtt_us: i64, min_ms: u64, max_ms: u64, )
Update the report interval based on SRTT with custom bounds.
Used by session-layer MMP which needs higher clamp values since each report consumes bandwidth on every transit link.
pub fn cumulative_packets_recv(&self) -> u64
pub fn cumulative_bytes_recv(&self) -> u64
pub fn highest_counter(&self) -> u64
pub fn jitter_us(&self) -> u32
pub fn report_interval(&self) -> Duration
pub fn last_recv_time(&self) -> Option<Instant>
pub fn ecn_ce_count(&self) -> u32
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ReceiverState
impl RefUnwindSafe for ReceiverState
impl Send for ReceiverState
impl Sync for ReceiverState
impl Unpin for ReceiverState
impl UnsafeUnpin for ReceiverState
impl UnwindSafe for ReceiverState
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more