Skip to main content

ChunkAssembler

Struct ChunkAssembler 

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

Stateful inbound chunk reassembler (§5.3): feed inbound bytes, get back each complete Message as soon as its last chunk arrives.

Maintains per-chunk_stream_id state, so multiple chunk streams may be interleaved on the same connection (as the wire format requires) and are each reassembled independently.

Implementations§

Source§

impl ChunkAssembler

Source

pub fn new() -> Self

New assembler, chunk size at the §5.3 default (128 bytes).

Source

pub fn set_chunk_size(&mut self, n: u32)

Update the chunk size in effect for subsequent chunks (called on receipt of a Set Chunk Size protocol control message, §5.4.1). Floored at 1 (a chunk size of 0 would never make progress splitting payload) and capped at MAX_CHUNK_SIZE, matching ChunkWriter::set_chunk_size’s floor/cap.

Source

pub fn push(&mut self, input: &[u8]) -> Result<Vec<Message>, RtmpError>

Feed inbound bytes; returns each complete Message decoded from the buffer (in arrival order), leaving any trailing partial chunk or partial message buffered internally for the next call.

Callers that need to react to a message’s side effects (e.g. a Set Chunk Size protocol control message, §5.4.1) before parsing the bytes that follow it in the same input — because the sender may switch to the new chunk size for its very next chunk — should use the crate-internal incremental feed/next_message pair instead, dispatching each message immediately. push collects every message from input under a single, unchanging chunk_size, which misparses a buffer that itself contains a Set Chunk Size followed by chunks already framed at the new size (see ServerSession, which uses the incremental form for exactly this reason).

§Errors

RtmpError::Malformed on structurally invalid input (e.g. a Type 1/2/3 chunk on a csid that has never seen a Type 0). Never errors merely because the input ends mid-chunk — that is buffered, not an error.

Trait Implementations§

Source§

impl Debug for ChunkAssembler

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for ChunkAssembler

Source§

fn default() -> Self

Returns the “default value” for a type. 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> 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, 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.