pub struct TcpFrameDecoder { /* private fields */ }Expand description
A stateful decoder for RFC 4571 framed TCP packets.
This decoder buffers incoming TCP data and extracts complete framed packets. It handles partial reads gracefully - you can feed it data in any chunk size.
§Example
use rtc_shared::tcp_framing::TcpFrameDecoder;
let mut decoder = TcpFrameDecoder::new();
// Simulate receiving data in chunks
let chunk1 = &[0, 5, b'H', b'e']; // Partial: header + 2 bytes
let chunk2 = &[b'l', b'l', b'o']; // Remaining 3 bytes
decoder.extend_from_slice(chunk1);
assert!(decoder.next_packet().is_none()); // Not complete yet
decoder.extend_from_slice(chunk2);
assert_eq!(decoder.next_packet(), Some(b"Hello".to_vec()));Implementations§
Source§impl TcpFrameDecoder
impl TcpFrameDecoder
Sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Creates a new decoder with pre-allocated buffer capacity.
Sourcepub fn extend_from_slice(&mut self, data: &[u8])
pub fn extend_from_slice(&mut self, data: &[u8])
Appends data to the internal buffer.
Sourcepub fn next_packet(&mut self) -> Option<Vec<u8>>
pub fn next_packet(&mut self) -> Option<Vec<u8>>
Attempts to extract the next complete packet from the buffer.
Returns Some(packet) if a complete packet is available,
or None if more data is needed.
The returned packet does not include the 2-byte length header.
Sourcepub fn buffered_len(&self) -> usize
pub fn buffered_len(&self) -> usize
Returns the number of buffered bytes.
Trait Implementations§
Source§impl Debug for TcpFrameDecoder
impl Debug for TcpFrameDecoder
Source§impl Default for TcpFrameDecoder
impl Default for TcpFrameDecoder
Source§fn default() -> TcpFrameDecoder
fn default() -> TcpFrameDecoder
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl Freeze for TcpFrameDecoder
impl RefUnwindSafe for TcpFrameDecoder
impl Send for TcpFrameDecoder
impl Sync for TcpFrameDecoder
impl Unpin for TcpFrameDecoder
impl UnwindSafe for TcpFrameDecoder
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Mutably borrows from an owned value. Read more