Struct libp2p::core::transport::upgrade::Builder[][src]

pub struct Builder<T> { /* fields omitted */ }

A Builder facilitates upgrading of a Transport for use with a Network.

The upgrade process is defined by the following stages:

authenticate{1} -> apply{*} -> multiplex{1}

It thus enforces the following invariants on every transport obtained from multiplex:

  1. The transport must be authenticated and multiplexed.
  2. Authentication must precede the negotiation of a multiplexer.
  3. Applying a multiplexer is the last step in the upgrade process.
  4. The Transport::Output conforms to the requirements of a Network, namely a tuple of a ConnectionInfo (from the authentication upgrade) and a StreamMuxer (from the multiplexing upgrade).

Implementations

impl<T> Builder<T> where
    T: Transport,
    <T as Transport>::Error: 'static, 
[src]

pub fn new(inner: T, version: Version) -> Builder<T>[src]

Creates a Builder over the given (base) Transport.

pub fn authenticate<C, D, U, I, E>(
    self,
    upgrade: U
) -> Builder<AndThen<T, impl Clone + FnOnce(C, ConnectedPoint)>> where
    C: AsyncRead + AsyncWrite + Unpin,
    E: Error + 'static,
    T: Transport<Output = C>,
    U: InboundUpgrade<Negotiated<C>, Output = (I, D), Error = E> + OutboundUpgrade<Negotiated<C>, Output = (I, D), Error = E> + Clone,
    I: ConnectionInfo,
    D: AsyncRead + AsyncWrite + Unpin
[src]

Upgrades the transport to perform authentication of the remote.

The supplied upgrade receives the I/O resource C and must produce a pair (I, D), where I is a ConnectionInfo and D is a new I/O resource. The upgrade must thus at a minimum identify the remote, which typically involves the use of a cryptographic authentication protocol in the context of establishing a secure channel.

Transitions

  • I/O upgrade: C -> (I, D).
  • Transport output: C -> (I, D)

pub fn apply<C, D, U, I, E>(self, upgrade: U) -> Builder<Upgrade<T, U>> where
    C: AsyncRead + AsyncWrite + Unpin,
    E: Error + 'static,
    T: Transport<Output = (I, C)>,
    U: InboundUpgrade<Negotiated<C>, Output = D, Error = E> + OutboundUpgrade<Negotiated<C>, Output = D, Error = E> + Clone,
    I: ConnectionInfo,
    D: AsyncRead + AsyncWrite + Unpin
[src]

Applies an arbitrary upgrade on an authenticated, non-multiplexed transport.

The upgrade receives the I/O resource (i.e. connection) C and must produce a new I/O resource D. Any number of such upgrades can be performed.

Transitions

  • I/O upgrade: C -> D.
  • Transport output: (I, C) -> (I, D).

pub fn multiplex<C, M, U, I, E>(
    self,
    upgrade: U
) -> AndThen<T, impl Clone + FnOnce((I, C), ConnectedPoint)> where
    C: AsyncRead + AsyncWrite + Unpin,
    E: Error + 'static,
    T: Transport<Output = (I, C)>,
    U: InboundUpgrade<Negotiated<C>, Output = M, Error = E> + OutboundUpgrade<Negotiated<C>, Output = M, Error = E> + Clone,
    I: ConnectionInfo,
    M: StreamMuxer
[src]

Upgrades the transport with a (sub)stream multiplexer.

The supplied upgrade receives the I/O resource C and must produce a StreamMuxer M. The transport must already be authenticated. This ends the (regular) transport upgrade process, yielding the underlying, configured transport.

Transitions

  • I/O upgrade: C -> M.
  • Transport output: (I, C) -> (I, M).

pub fn multiplex_ext<C, M, U, I, E, F>(
    self,
    up: F
) -> AndThen<T, impl Clone + FnOnce((I, C), ConnectedPoint)> where
    C: AsyncRead + AsyncWrite + Unpin,
    F: for<'a> FnOnce(&'a I, &'a ConnectedPoint) -> U + Clone,
    E: Error + 'static,
    T: Transport<Output = (I, C)>,
    U: InboundUpgrade<Negotiated<C>, Output = M, Error = E> + OutboundUpgrade<Negotiated<C>, Output = M, Error = E> + Clone,
    I: ConnectionInfo,
    M: StreamMuxer
[src]

Like Builder::multiplex but accepts a function which returns the upgrade.

The supplied function is applied to ConnectionInfo and ConnectedPoint and returns an upgrade which receives the I/O resource C and must produce a StreamMuxer M. The transport must already be authenticated. This ends the (regular) transport upgrade process, yielding the underlying, configured transport.

Transitions

  • I/O upgrade: C -> M.
  • Transport output: (I, C) -> (I, M).

Auto Trait Implementations

impl<T> RefUnwindSafe for Builder<T> where
    T: RefUnwindSafe

impl<T> Send for Builder<T> where
    T: Send

impl<T> Sync for Builder<T> where
    T: Sync

impl<T> Unpin for Builder<T> where
    T: Unpin

impl<T> UnwindSafe for Builder<T> where
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Same<T> for T[src]

type Output = T

Should always be Self

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 
[src]