pub struct DiemNetTransport<TTransport> { /* private fields */ }
Expand description

The common DiemNet Transport.

The base transport layer is pluggable, so long as it provides a reliable, ordered, connection-oriented, byte-stream abstraction (e.g., TCP). We currently use either MemoryTransport or TcpTransport as this base layer.

Inbound and outbound connections are first established with the base_transport and then negotiate a secure, authenticated transport layer (currently Noise protocol). Finally, we negotiate common supported application protocols with the Handshake protocol.

Implementations§

source§

impl<TTransport> DiemNetTransport<TTransport>where TTransport: Transport<Error = Error>, TTransport::Output: TSocket, TTransport::Outbound: Send + 'static, TTransport::Inbound: Send + 'static, TTransport::Listener: Send + 'static,

source

pub fn new( base_transport: TTransport, network_context: Arc<NetworkContext>, time_service: TimeService, identity_key: PrivateKey, auth_mode: HandshakeAuthMode, handshake_version: u8, chain_id: ChainId, application_protocols: SupportedProtocols, enable_proxy_protocol: bool ) -> Self

source

pub fn dial( &self, peer_id: PeerId, addr: NetworkAddress ) -> Result<impl Future<Output = Result<Connection<NoiseStream<TTransport::Output>>>> + Send + 'static>

Dial a peer at addr. If the addr is not supported or formatted correctly, return Err. Otherwise, return a Future that resolves to Err if there was some issue dialing the peer and Ok with a fully upgraded connection to that peer if our dial was successful.

Dialing NetworkAddress format

We parse the dial address like:

/<base_transport> + /ln-noise-ik/<pubkey>/ln-handshake/<version>

If the base transport is MemoryTransport, then /<base_transport> is:

/memory/<port>

If the base transport is TcpTransport, then /<base_transport> is:

/ip4/<ipaddr>/tcp/<port> or /ip6/<ipaddr>/tcp/<port> or /dns/<ipaddr>/tcp/<port> or /dns4/<ipaddr>/tcp/<port> or /dns6/<ipaddr>/tcp/<port>

source

pub fn listen_on( &self, addr: NetworkAddress ) -> Result<(impl Stream<Item = Result<(impl Future<Output = Result<Connection<NoiseStream<TTransport::Output>>>> + Send + 'static, NetworkAddress)>> + Send + 'static, NetworkAddress)>

Listen on address addr. If the addr is not supported or formatted correctly, return Err. Otherwise, return a Stream of fully upgraded inbound connections and the dialer’s observed network address.

Listening NetworkAddress format

When listening, we only expect the base transport format. For example, if the base transport is MemoryTransport, then we expect:

/memory/<port>

If the base transport is TcpTransport, then we expect:

/ip4/<ipaddr>/tcp/<port> or /ip6/<ipaddr>/tcp/<port>

Trait Implementations§

source§

impl<TTransport> Transport for DiemNetTransport<TTransport>where TTransport: Transport<Error = Error> + Send + 'static + Transport, TTransport::Output: TSocket, TTransport::Outbound: Send + 'static, TTransport::Inbound: Send + 'static, TTransport::Listener: Send + 'static,

§

type Output = Connection<NoiseStream<<TTransport as Transport>::Output>>

The result of establishing a connection. Read more
§

type Error = Error

The Error type of errors which can happen while establishing a connection.
§

type Inbound = Pin<Box<dyn Future<Output = Result<<DiemNetTransport<TTransport> as Transport>::Output, Error>> + Send + 'static, Global>>

A pending Output for an inbound connection, obtained from the Listener stream. Read more
§

type Outbound = Pin<Box<dyn Future<Output = Result<<DiemNetTransport<TTransport> as Transport>::Output, Error>> + Send + 'static, Global>>

A pending Output for an outbound connection, obtained from dialing stream.
§

type Listener = Pin<Box<dyn Stream<Item = Result<(<DiemNetTransport<TTransport> as Transport>::Inbound, NetworkAddress), Error>> + Send + 'static, Global>>

A stream of Inbound connections and the address of the dialer. Read more
source§

fn dial(&self, peer_id: PeerId, addr: NetworkAddress) -> Result<Self::Outbound>

Dials the given [NetworkAddress], returning a future for a pending outbound connection.
source§

fn listen_on( &self, addr: NetworkAddress ) -> Result<(Self::Listener, NetworkAddress)>

Listens on the given [NetworkAddress], returning a stream of incoming connections. Read more

Auto Trait Implementations§

§

impl<TTransport> RefUnwindSafe for DiemNetTransport<TTransport>where TTransport: RefUnwindSafe,

§

impl<TTransport> Send for DiemNetTransport<TTransport>where TTransport: Send,

§

impl<TTransport> Sync for DiemNetTransport<TTransport>where TTransport: Sync,

§

impl<TTransport> Unpin for DiemNetTransport<TTransport>where TTransport: Unpin,

§

impl<TTransport> UnwindSafe for DiemNetTransport<TTransport>where TTransport: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · 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.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> TransportExt for Twhere T: Transport + ?Sized,

§

fn boxed(self) -> BoxedTransport<Self::Output, Self::Error>where Self: Sized + Send + 'static, Self::Listener: Send + 'static, Self::Inbound: Send + 'static, Self::Outbound: Send + 'static,

Turns a [Transport] into an abstract boxed transport.
§

fn and_then<F, Fut, O>(self, f: F) -> AndThen<Self, F>where Self: Sized, F: FnOnce(Self::Output, NetworkAddress, ConnectionOrigin) -> Fut + Clone, Fut: Future<Output = Result<O, Self::Error>>,

Applies a function producing an asynchronous result to every connection created by this transport. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more