Skip to main content

ProtocolDispatcher

Struct ProtocolDispatcher 

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

Dispatches a connection to the appropriate protocol handler based on sniffed initial bytes.

Implementations§

Source§

impl ProtocolDispatcher

Source

pub fn new( detectors: Vec<Box<dyn ProtocolDetector>>, max_sniff: usize, handshake_timeout: Duration, ) -> Self

Creates a new ProtocolDispatcher.

§Arguments
  • detectors - Ordered list of protocol detectors. The first match wins.
  • max_sniff - Maximum number of bytes to buffer for protocol detection.
  • handshake_timeout - Maximum time to spend on protocol detection.
Source

pub fn with_defaults( detectors: Vec<Box<dyn ProtocolDetector>>, handshake_timeout: Duration, ) -> Self

Creates a new ProtocolDispatcher with default sniff buffer size.

Source

pub fn protocol_ids(&self) -> Vec<ProtocolId>

Returns the list of registered protocol IDs.

Source

pub async fn dispatch( &self, stream: BoxStream, ) -> Result<(ProtocolId, ReplayStream), DispatchError>

Dispatches a connection by sniffing its initial bytes and matching against registered protocol detectors.

Returns the matched protocol ID and a ReplayStream positioned at the start of the connection (all sniffed bytes are preserved in the buffer and will be replayed to the protocol handler on first read).

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.