Trait libp2p::core::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
.
Implementors§
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 MplexConfigwhere
C: AsyncRead + AsyncWrite + Unpin,
impl<C> OutboundUpgrade<C> for MplexConfigwhere C: AsyncRead + AsyncWrite + Unpin,
source§impl<C> OutboundUpgrade<C> for YamuxConfigwhere
C: AsyncRead + AsyncWrite + Send + Unpin + 'static,
impl<C> OutboundUpgrade<C> for YamuxConfigwhere C: AsyncRead + AsyncWrite + Send + Unpin + 'static,
type Output = Yamux<Incoming<C>>
type Error = Error
type Future = Ready<Result<<YamuxConfig as OutboundUpgrade<C>>::Output, <YamuxConfig as OutboundUpgrade<C>>::Error>>
source§impl<C> OutboundUpgrade<C> for YamuxLocalConfigwhere
C: AsyncRead + AsyncWrite + Unpin + 'static,
impl<C> OutboundUpgrade<C> for YamuxLocalConfigwhere C: AsyncRead + AsyncWrite + Unpin + 'static,
type Output = Yamux<LocalIncoming<C>>
type Error = Error
type Future = Ready<Result<<YamuxLocalConfig as OutboundUpgrade<C>>::Output, <YamuxLocalConfig as OutboundUpgrade<C>>::Error>>
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, A, B, TA, TB, EA, EB> OutboundUpgrade<C> for EitherUpgrade<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 EitherUpgrade<A, B>where A: OutboundUpgrade<C, Output = TA, Error = EA>, B: OutboundUpgrade<C, Output = TB, Error = EB>,
type Output = EitherOutput<TA, TB>
type Error = EitherError<EA, EB>
type Future = EitherFuture2<<A as OutboundUpgrade<C>>::Future, <B as OutboundUpgrade<C>>::Future>
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 = EitherOutput<TA, TB>
type Error = EitherError<EA, EB>
type Future = EitherFuture2<<A as OutboundUpgrade<C>>::Future, <B as OutboundUpgrade<C>>::Future>
source§impl<C, F, O, A, E> OutboundUpgrade<C> for SimpleProtocol<F>where
C: AsyncRead + AsyncWrite,
F: Fn(C) -> O,
O: Future<Output = Result<A, E>>,
impl<C, F, O, A, E> OutboundUpgrade<C> for SimpleProtocol<F>where C: AsyncRead + AsyncWrite, F: Fn(C) -> O, O: Future<Output = Result<A, E>>,
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, 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
type Output = (RemoteIdentity<C>, NoiseOutput<T>)
type Error = NoiseError
type Future = Pin<Box<dyn Future<Output = Result<(RemoteIdentity<C>, NoiseOutput<T>), NoiseError>> + Send, Global>>
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
type Output = (RemoteIdentity<C>, NoiseOutput<T>)
type Error = NoiseError
type Future = Pin<Box<dyn Future<Output = Result<(RemoteIdentity<C>, NoiseOutput<T>), NoiseError>> + Send, Global>>
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