Skip to main content

ReliableStreamState

Struct ReliableStreamState 

Source
pub struct ReliableStreamState { /* private fields */ }
Expand description

State-Machine eines reliable XRCE-Streams.

Implementations§

Source§

impl ReliableStreamState

Source

pub fn new(stream_id: StreamId, config: ReliableConfig) -> Self

Konstruktor.

§Panics

stream_id muss reliable sein (is_reliable()).

Source

pub fn stream_id(&self) -> StreamId

StreamId.

Source

pub fn in_flight_count(&self) -> usize

Anzahl in-flight Samples auf der Sender-Seite.

Source

pub fn out_of_order_count(&self) -> usize

Anzahl out-of-order Samples auf der Receiver-Seite.

Source

pub fn expected(&self) -> SerialNumber16

Aktuelle Empfangs-Erwartungs-Seqnr (Receiver).

Source

pub fn submit(&mut self, payload: Vec<u8>) -> Result<SerialNumber16, XrceError>

Submit eines neuen Sample. Liefert die zugewiesene Seqnr.

§Errors
  • PayloadTooLarge, wenn payload.len() > RELIABLE_MAX_PAYLOAD.
  • ValueOutOfRange, wenn das Sender-Window voll ist (sender_window in-flight Samples). Caller muss vorher ACKNACKs verarbeiten.
Source

pub fn get_in_flight(&self, seq: SerialNumber16) -> Option<&[u8]>

Lookup eines in-flight Payloads (z.B. fuer Resend).

Source

pub fn pending_heartbeat(&mut self, now: Duration) -> Option<HeartbeatPayload>

Tick: liefert Some(HEARTBEAT), falls die Heartbeat-Periode abgelaufen ist und in-flight Samples existieren.

Source

pub fn recv_acknack(&mut self, payload: AckNackPayload)

Verarbeitet eingehendes ACKNACK auf der Sender-Seite.

first_unacked ist die kleinste seqnr, die der Receiver noch erwartet; alles strikt davor wird als bestaetigt entfernt. nack_bitmap ist 16-Bit; Bit i = “seqnr first_unacked + i fehlt noch”. Wir entfernen also alle Samples < first_unacked und alle Samples in [first_unacked, first_unacked+16), deren Bit nicht gesetzt ist.

Source

pub fn recv_data( &mut self, seq: SerialNumber16, payload: Vec<u8>, ) -> Result<(), XrceError>

Receiver: ein Sample mit seq + payload ist eingelaufen. Speichert es im Out-Of-Order-Buffer (oder verwirft als Duplikat).

§Errors

ValueOutOfRange, wenn der Receiver-Buffer voll ist (DoS-Schutz).

Source

pub fn drain_in_order(&mut self) -> Vec<(SerialNumber16, Vec<u8>)>

Receiver: liefert alle in-Order verfuegbaren Samples ab expected_seq und schiebt expected_seq weiter.

Source

pub fn pending_acknack( &self, hint_last_seen: Option<SerialNumber16>, ) -> AckNackPayload

Receiver: berechnet das passende ACKNACK-Payload, das die fehlenden Seqnrs ab expected_seq markiert. Liefert Some(ACKNACK), wenn out-of-order Samples vorliegen ODER last_recv_seen (HEARTBEAT-Hint) eine Luecke offenlegt.

Source

pub fn reset(&mut self)

Setzt den Stream-State zurueck (z.B. nach RESET-Submessage).

Trait Implementations§

Source§

impl Clone for ReliableStreamState

Source§

fn clone(&self) -> ReliableStreamState

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ReliableStreamState

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.