Skip to main content

StreamDemultiplexer

Struct StreamDemultiplexer 

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

A lightweight stream demultiplexer that routes packets to registered streams.

§Design

  UDP Socket → StreamDemultiplexer → Stream[0] (reliable)
                                   → Stream[1] (reliable)
                                   → Stream[2] (unreliable)
                                   → control channel

Each stream is identified by a u32 stream ID extracted from the packet header. Unrecognized stream IDs are dropped (with a log warning).

Implementations§

Source§

impl StreamDemultiplexer

Source

pub fn new(control_buffer: usize) -> (Self, Receiver<Bytes>)

Create a new demultiplexer with a control channel.

The control channel (stream_id = 0) receives session-level packets such as keepalives, migration signals, and stream management.

Source

pub fn open_stream(&self, buffer_size: usize) -> StreamHandle

Register a new stream and get back a handle with the assigned ID.

buffer_size controls the depth of the per-stream receive buffer.

Source

pub fn register_stream( &self, stream_id: u32, buffer_size: usize, ) -> StreamHandle

Register a stream with a specific ID (e.g., for accepting remote-initiated streams).

Source

pub fn close_stream(&self, stream_id: u32)

Remove a stream from the routing table.

Source

pub fn route_data(&self, stream_id: u32, payload: Bytes) -> bool

Route data payload to the appropriate stream.

Returns true if the packet was successfully delivered, false if the stream was not found or the buffer was full.

Source

pub async fn route_data_async(&self, stream_id: u32, payload: Bytes) -> bool

Route data asynchronously (waits if buffer is full).

Source

pub fn route_ack(&self, stream_id: u32, seq: SequenceNumber) -> bool

Route an ACK signal to a stream without blocking. Returns false if the stream is unknown or its buffer is full — the recv pump uses this on its never-block path, where a vestigial/absent stream consumer must not stall inbound ACK/control processing.

Source

pub fn route_close(&self, stream_id: u32) -> bool

Route a stream-closure signal without blocking (see Self::route_ack).

Source

pub async fn route_ack_async(&self, stream_id: u32, seq: SequenceNumber) -> bool

Route an ACK signal to a stream asynchronously.

Source

pub async fn route_close_async(&self, stream_id: u32) -> bool

Route a stream closure signal asynchronously.

Source

pub fn active_stream_count(&self) -> usize

Number of active streams (excluding control channel).

Source

pub fn has_stream(&self, stream_id: u32) -> bool

Check if a stream is registered.

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CompatExt for T

Source§

fn compat(self) -> Compat<T>
where T: Sized,

Applies the Compat adapter by value. Read more
Source§

fn compat_ref(&self) -> Compat<&T>

Applies the Compat adapter by shared reference. Read more
Source§

fn compat_mut(&mut self) -> Compat<&mut T>

Applies the Compat adapter by mutable reference. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, UT> HandleAlloc<UT> for T
where T: Send + Sync,

Source§

fn new_handle(value: Arc<T>) -> Handle

Create a new handle for an Arc value Read more
Source§

unsafe fn clone_handle(handle: Handle) -> Handle

Clone a handle Read more
Source§

unsafe fn consume_handle(handle: Handle) -> Arc<T>

Consume a handle, getting back the initial Arc<> Read more
Source§

unsafe fn get_arc(handle: Handle) -> Arc<Self>

Get a clone of the Arc<> using a “borrowed” handle. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more