Trait libp2p::OutboundUpgrade
source · pub trait OutboundUpgrade<C>: UpgradeInfo {
type Output;
type Error;
type Future: Future<Output = Result<Self::Output, Self::Error>>;
// Required method
fn upgrade_outbound(self, socket: C, info: Self::Info) -> Self::Future;
}
Expand description
Possible upgrade on an outbound connection or substream.
Required Associated Types§
Required Methods§
sourcefn upgrade_outbound(self, socket: C, info: Self::Info) -> Self::Future
fn upgrade_outbound(self, socket: C, info: Self::Info) -> Self::Future
After we have determined that the remote supports one of the protocols we support, this method is called to start the handshake.
The info
is the identifier of the protocol, as produced by protocol_info
.
Implementations on Foreign Types§
source§impl<C, A, B, TA, TB, EA, EB> OutboundUpgrade<C> for Either<A, B>where
A: OutboundUpgrade<C, Output = TA, Error = EA>,
B: OutboundUpgrade<C, Output = TB, Error = EB>,
impl<C, A, B, TA, TB, EA, EB> OutboundUpgrade<C> for Either<A, B>where A: OutboundUpgrade<C, Output = TA, Error = EA>, B: OutboundUpgrade<C, Output = TB, Error = EB>,
type Output = Either<TA, TB>
type Error = Either<EA, EB>
type Future = EitherFuture<<A as OutboundUpgrade<C>>::Future, <B as OutboundUpgrade<C>>::Future>
fn upgrade_outbound( self, sock: C, info: <Either<A, B> as UpgradeInfo>::Info ) -> <Either<A, B> as OutboundUpgrade<C>>::Future ⓘ
Implementors§
source§impl<C> OutboundUpgrade<C> for DeniedUpgrade
impl<C> OutboundUpgrade<C> for DeniedUpgrade
type Output = Void
type Error = Void
type Future = Pending<Result<<DeniedUpgrade as OutboundUpgrade<C>>::Output, <DeniedUpgrade as OutboundUpgrade<C>>::Error>>
source§impl<C> OutboundUpgrade<C> for KademliaProtocolConfigwhere
C: AsyncRead + AsyncWrite + Unpin,
impl<C> OutboundUpgrade<C> for KademliaProtocolConfigwhere C: AsyncRead + AsyncWrite + Unpin,
type Output = AndThen<With<ErrInto<Framed<C, UviBytes<Cursor<Vec<u8, Global>>>>, Error>, Cursor<Vec<u8, Global>>, KadRequestMsg, Ready<Result<Cursor<Vec<u8, Global>>, Error>>, fn(_: KadRequestMsg) -> Ready<Result<Cursor<Vec<u8, Global>>, Error>>>, Ready<Result<KadResponseMsg, Error>>, fn(_: BytesMut) -> Ready<Result<KadResponseMsg, Error>>>
type Future = Ready<Result<<KademliaProtocolConfig as OutboundUpgrade<C>>::Output, Error>>
type Error = Error
source§impl<C> OutboundUpgrade<C> for libp2p::yamux::Configwhere
C: AsyncRead + AsyncWrite + Send + Unpin + 'static,
impl<C> OutboundUpgrade<C> for libp2p::yamux::Configwhere C: AsyncRead + AsyncWrite + Send + Unpin + 'static,
source§impl<C> OutboundUpgrade<C> for LocalConfigwhere
C: AsyncRead + AsyncWrite + Unpin + 'static,
impl<C> OutboundUpgrade<C> for LocalConfigwhere C: AsyncRead + AsyncWrite + Unpin + 'static,
type Output = Muxer<LocalIncoming<C>>
type Error = Error
type Future = Ready<Result<<LocalConfig as OutboundUpgrade<C>>::Output, <LocalConfig as OutboundUpgrade<C>>::Error>>
source§impl<C, A, B, TA, TB, EA, EB> OutboundUpgrade<C> for SelectUpgrade<A, B>where
A: OutboundUpgrade<C, Output = TA, Error = EA>,
B: OutboundUpgrade<C, Output = TB, Error = EB>,
impl<C, A, B, TA, TB, EA, EB> OutboundUpgrade<C> for SelectUpgrade<A, B>where A: OutboundUpgrade<C, Output = TA, Error = EA>, B: OutboundUpgrade<C, Output = TB, Error = EB>,
type Output = Either<TA, TB>
type Error = Either<EA, EB>
type Future = EitherFuture<<A as OutboundUpgrade<C>>::Future, <B as OutboundUpgrade<C>>::Future>
source§impl<C, P> OutboundUpgrade<C> for PendingUpgrade<P>where
P: ProtocolName + Clone,
impl<C, P> OutboundUpgrade<C> for PendingUpgrade<P>where P: ProtocolName + Clone,
type Output = Void
type Error = Void
type Future = Pending<Result<<PendingUpgrade<P> as OutboundUpgrade<C>>::Output, <PendingUpgrade<P> as OutboundUpgrade<C>>::Error>>
source§impl<C, P> OutboundUpgrade<C> for ReadyUpgrade<P>where
P: ProtocolName + Clone,
impl<C, P> OutboundUpgrade<C> for ReadyUpgrade<P>where P: ProtocolName + Clone,
type Output = C
type Error = Void
type Future = Ready<Result<<ReadyUpgrade<P> as OutboundUpgrade<C>>::Output, <ReadyUpgrade<P> as OutboundUpgrade<C>>::Error>>
source§impl<C, P, F, Fut, Err, Out> OutboundUpgrade<C> for FromFnUpgrade<P, F>where
P: ProtocolName + Clone,
F: FnOnce(C, Endpoint) -> Fut,
Fut: Future<Output = Result<Out, Err>>,
impl<C, P, F, Fut, Err, Out> OutboundUpgrade<C> for FromFnUpgrade<P, F>where P: ProtocolName + Clone, F: FnOnce(C, Endpoint) -> Fut, Fut: Future<Output = Result<Out, Err>>,
source§impl<C, T> OutboundUpgrade<C> for OptionalUpgrade<T>where
T: OutboundUpgrade<C>,
impl<C, T> OutboundUpgrade<C> for OptionalUpgrade<T>where T: OutboundUpgrade<C>,
type Output = <T as OutboundUpgrade<C>>::Output
type Error = <T as OutboundUpgrade<C>>::Error
type Future = <T as OutboundUpgrade<C>>::Future
source§impl<C, U, F> OutboundUpgrade<C> for MapInboundUpgrade<U, F>where
U: OutboundUpgrade<C>,
impl<C, U, F> OutboundUpgrade<C> for MapInboundUpgrade<U, F>where U: OutboundUpgrade<C>,
type Output = <U as OutboundUpgrade<C>>::Output
type Error = <U as OutboundUpgrade<C>>::Error
type Future = <U as OutboundUpgrade<C>>::Future
source§impl<C, U, F> OutboundUpgrade<C> for MapInboundUpgradeErr<U, F>where
U: OutboundUpgrade<C>,
impl<C, U, F> OutboundUpgrade<C> for MapInboundUpgradeErr<U, F>where U: OutboundUpgrade<C>,
type Output = <U as OutboundUpgrade<C>>::Output
type Error = <U as OutboundUpgrade<C>>::Error
type Future = <U as OutboundUpgrade<C>>::Future
source§impl<C, U, F, T> OutboundUpgrade<C> for MapOutboundUpgrade<U, F>where
U: OutboundUpgrade<C>,
F: FnOnce(<U as OutboundUpgrade<C>>::Output) -> T,
impl<C, U, F, T> OutboundUpgrade<C> for MapOutboundUpgrade<U, F>where U: OutboundUpgrade<C>, F: FnOnce(<U as OutboundUpgrade<C>>::Output) -> T,
type Output = T
type Error = <U as OutboundUpgrade<C>>::Error
type Future = MapFuture<<U as OutboundUpgrade<C>>::Future, F>
source§impl<C, U, F, T> OutboundUpgrade<C> for MapOutboundUpgradeErr<U, F>where
U: OutboundUpgrade<C>,
F: FnOnce(<U as OutboundUpgrade<C>>::Error) -> T,
impl<C, U, F, T> OutboundUpgrade<C> for MapOutboundUpgradeErr<U, F>where U: OutboundUpgrade<C>, F: FnOnce(<U as OutboundUpgrade<C>>::Error) -> T,
type Output = <U as OutboundUpgrade<C>>::Output
type Error = T
type Future = MapErrFuture<<U as OutboundUpgrade<C>>::Future, F>
source§impl<T> OutboundUpgrade<Negotiated<SubstreamBox>> for SendWrapper<T>where
T: OutboundUpgradeSend,
impl<T> OutboundUpgrade<Negotiated<SubstreamBox>> for SendWrapper<T>where T: OutboundUpgradeSend,
type Output = <T as OutboundUpgradeSend>::Output
type Error = <T as OutboundUpgradeSend>::Error
type Future = <T as OutboundUpgradeSend>::Future
source§impl<T> OutboundUpgrade<T> for libp2p::noise::Configwhere
T: AsyncRead + AsyncWrite + Unpin + Send + 'static,
impl<T> OutboundUpgrade<T> for libp2p::noise::Configwhere T: AsyncRead + AsyncWrite + Unpin + Send + 'static,
source§impl<T, C> OutboundUpgrade<T> for NoiseConfig<IK, C, (PublicKey<C>, PublicKey)>where
NoiseConfig<IK, C, (PublicKey<C>, PublicKey)>: UpgradeInfo,
T: AsyncRead + AsyncWrite + Unpin + Send + 'static,
C: Protocol<C> + AsRef<[u8]> + Zeroize + Clone + Send + 'static,
impl<T, C> OutboundUpgrade<T> for NoiseConfig<IK, C, (PublicKey<C>, PublicKey)>where NoiseConfig<IK, C, (PublicKey<C>, PublicKey)>: UpgradeInfo, T: AsyncRead + AsyncWrite + Unpin + Send + 'static, C: Protocol<C> + AsRef<[u8]> + Zeroize + Clone + Send + 'static,
Implements the initiator part of the IK
handshake pattern.
IK
is a single round-trip (2 messages) handshake.
In the IK
handshake, the initiator knows and pre-configures the remote’s identity in the
HandshakeState
.
initiator -{id}-> responder
initiator <-{id}- responder
source§impl<T, C> OutboundUpgrade<T> for NoiseConfig<IX, C, ()>where
NoiseConfig<IX, C, ()>: UpgradeInfo,
T: AsyncRead + AsyncWrite + Unpin + Send + 'static,
C: Protocol<C> + AsRef<[u8]> + Zeroize + Clone + Send + 'static,
impl<T, C> OutboundUpgrade<T> for NoiseConfig<IX, C, ()>where NoiseConfig<IX, C, ()>: UpgradeInfo, T: AsyncRead + AsyncWrite + Unpin + Send + 'static, C: Protocol<C> + AsRef<[u8]> + Zeroize + Clone + Send + 'static,
Implements the initiator part of the IX
noise handshake pattern.
IX
is a single round-trip (2 messages) handshake in which each party sends their identity over to the other party.
initiator -{id}-> responder
initiator <-{id}- responder
source§impl<T, C> OutboundUpgrade<T> for NoiseConfig<XX, C, ()>where
NoiseConfig<XX, C, ()>: UpgradeInfo,
T: AsyncRead + AsyncWrite + Unpin + Send + 'static,
C: Protocol<C> + AsRef<[u8]> + Zeroize + Clone + Send + 'static,
impl<T, C> OutboundUpgrade<T> for NoiseConfig<XX, C, ()>where NoiseConfig<XX, C, ()>: UpgradeInfo, T: AsyncRead + AsyncWrite + Unpin + Send + 'static, C: Protocol<C> + AsRef<[u8]> + Zeroize + Clone + Send + 'static,
Implements the initiator part of the XX
noise handshake pattern.
XX
is a 1.5 round-trip (3 messages) handshake.
The first message in a noise handshake is unencrypted. In the XX
handshake pattern, that message
is empty and thus does not leak any information. The identities are then exchanged in the second
and third message.
initiator --{}--> responder
initiator <-{id}- responder
initiator -{id}-> responder