pub struct P2pNetworkYamuxState {
pub message_size_limit: Limit<usize>,
pub pending_outgoing_limit: Limit<usize>,
pub buffer: Vec<u8>,
pub incoming: VecDeque<YamuxFrame>,
pub streams: BTreeMap<u32, YamuxStreamState>,
pub terminated: Option<Result<Result<(), YamuxSessionError>, YamuxFrameParseError>>,
pub init: bool,
}
Fields§
§message_size_limit: Limit<usize>
§pending_outgoing_limit: Limit<usize>
§buffer: Vec<u8>
§incoming: VecDeque<YamuxFrame>
§streams: BTreeMap<u32, YamuxStreamState>
§terminated: Option<Result<Result<(), YamuxSessionError>, YamuxFrameParseError>>
§init: bool
Implementations§
Source§impl P2pNetworkYamuxState
impl P2pNetworkYamuxState
Sourcepub fn next_stream_id(
&self,
kind: YamuxStreamKind,
incoming: bool,
) -> Option<u32>
pub fn next_stream_id( &self, kind: YamuxStreamKind, incoming: bool, ) -> Option<u32>
Calculates and returns the next available stream ID for outgoing communication.
pub fn consume(&mut self, len: usize)
pub fn limit(&self) -> usize
pub fn set_err(&mut self, err: YamuxFrameParseError)
pub fn set_res(&mut self, res: Result<(), YamuxSessionError>)
Sourcepub fn try_parse_frame(&mut self, offset: usize) -> Option<usize>
pub fn try_parse_frame(&mut self, offset: usize) -> Option<usize>
Attempts to parse a Yamux frame from the buffer starting at the given offset. Returns the number of bytes consumed if a frame was successfully parsed.
Sourcepub fn parse_frames(&mut self)
pub fn parse_frames(&mut self)
Attempts to parse all available complete frames from the buffer, then shifts and compacts the buffer as needed.
Sourcepub fn extend_buffer(&mut self, data: &[u8])
pub fn extend_buffer(&mut self, data: &[u8])
Extends the internal buffer with new data, ensuring it has appropriate capacity. On first use, reserves the initial capacity.
Sourcepub fn incoming_frame_count(&self) -> usize
pub fn incoming_frame_count(&self) -> usize
Returns the number of incoming frames that have been parsed and are ready for processing.
Source§impl P2pNetworkYamuxState
impl P2pNetworkYamuxState
Sourcepub fn reducer<State, Action>(
state_context: Substate<'_, Action, State, P2pNetworkSchedulerState>,
action: ActionWithMeta<P2pNetworkYamuxAction>,
) -> Result<(), String>where
State: P2pStateTrait,
Action: P2pActionTrait<State>,
pub fn reducer<State, Action>(
state_context: Substate<'_, Action, State, P2pNetworkSchedulerState>,
action: ActionWithMeta<P2pNetworkYamuxAction>,
) -> Result<(), String>where
State: P2pStateTrait,
Action: P2pActionTrait<State>,
Handles the main reducer logic for Yamux protocol actions. It processes incoming and outgoing data, selects appropriate behavior based on frame types, and manages the state of streams within a Yamux session.
§High-Level Overview
- When data arrives, it is appended to an internal buffer. The buffer is then parsed for valid Yamux frames (using protocol-specific header fields and logic). Incomplete data remains in the buffer for future parsing.
- On successful parsing, frames are enqueued for further handling (e.g., dispatching actions to notify higher-level protocols or responding to pings).
- If protocol inconsistencies or invalid headers are encountered, it marks an error or terminates gracefully, preventing further processing of unexpected data.
- Outgoing data is prepared as frames that respect the window constraints and established flags (e.g., SYN, ACK, FIN), and they are dispatched for transmission.
- Once frames are processed, the function checks if the buffer has grown beyond a certain threshold relative to its initial capacity. If so, and if the remaining data is small, it resets the buffer capacity to a default size to avoid excessive memory usage.
- The function also manages streams and their states, ensuring that proper handshake flags are set (SYN, ACK) when a new stream is opened or accepted, enforcing limits on the number of streams, and notifying higher-level components about events like incoming data or connection errors.
Trait Implementations§
Source§impl Clone for P2pNetworkYamuxState
impl Clone for P2pNetworkYamuxState
Source§fn clone(&self) -> P2pNetworkYamuxState
fn clone(&self) -> P2pNetworkYamuxState
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for P2pNetworkYamuxState
impl Debug for P2pNetworkYamuxState
Source§impl Default for P2pNetworkYamuxState
impl Default for P2pNetworkYamuxState
Source§fn default() -> P2pNetworkYamuxState
fn default() -> P2pNetworkYamuxState
Source§impl<'de> Deserialize<'de> for P2pNetworkYamuxState
impl<'de> Deserialize<'de> for P2pNetworkYamuxState
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<P2pNetworkYamuxState, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<P2pNetworkYamuxState, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl MallocSizeOf for P2pNetworkYamuxState
impl MallocSizeOf for P2pNetworkYamuxState
Source§impl Serialize for P2pNetworkYamuxState
impl Serialize for P2pNetworkYamuxState
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for P2pNetworkYamuxState
impl RefUnwindSafe for P2pNetworkYamuxState
impl Send for P2pNetworkYamuxState
impl Sync for P2pNetworkYamuxState
impl Unpin for P2pNetworkYamuxState
impl UnwindSafe for P2pNetworkYamuxState
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
§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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.