Enum ConnectedPoint
pub enum ConnectedPoint {
Dialer {
address: Multiaddr,
role_override: Endpoint,
port_use: PortUse,
},
Listener {
local_addr: Multiaddr,
send_back_addr: Multiaddr,
},
}
Expand description
The endpoint roles associated with an established peer-to-peer connection.
Variants§
Dialer
We dialed the node.
Fields
role_override: Endpoint
Whether the role of the local node on the connection should be overridden. I.e. whether the local node should act as a listener on the outgoing connection.
This option is needed for NAT and firewall hole punching.
-
Endpoint::Dialer
represents the default non-overriding option. -
Endpoint::Listener
represents the overriding option. Realization depends on the transport protocol. E.g. in the case of TCP, both endpoints dial each other, resulting in a simultaneous open TCP connection. On this new connection both endpoints assume to be the dialer of the connection. This is problematic during the connection upgrade process where an upgrade assumes one side to be the listener. With the help of this option, both peers can negotiate the roles (dialer and listener) for the new connection ahead of time, through some external channel, e.g. the DCUtR protocol, and thus have one peer dial the other and upgrade the connection as a dialer and one peer dial the other and upgrade the connection as a listener overriding its role.
port_use: PortUse
Whether the port for the outgoing connection was reused from a listener or a new port was allocated. This is useful for address translation.
The port use is implemented on a best-effort basis. It is not guaranteed
that PortUse::Reuse
actually reused a port. A good example is the case
where there is no listener available to reuse a port from.
Listener
We received the node.
Implementations§
§impl ConnectedPoint
impl ConnectedPoint
pub fn to_endpoint(&self) -> Endpoint
pub fn to_endpoint(&self) -> Endpoint
Turns the ConnectedPoint
into the corresponding Endpoint
.
pub fn is_listener(&self) -> bool
pub fn is_listener(&self) -> bool
Returns true if we are Listener
.
pub fn is_relayed(&self) -> bool
pub fn is_relayed(&self) -> bool
Returns true if the connection is relayed.
pub fn get_remote_address(&self) -> &Multiaddr
pub fn get_remote_address(&self) -> &Multiaddr
Returns the address of the remote stored in this struct.
For Dialer
, this returns address
. For Listener
, this returns send_back_addr
.
Note that the remote node might not be listening on this address and hence the address might not be usable to establish new connections.
pub fn set_remote_address(&mut self, new_address: Multiaddr)
pub fn set_remote_address(&mut self, new_address: Multiaddr)
Modifies the address of the remote stored in this struct.
For Dialer
, this modifies address
. For Listener
, this modifies send_back_addr
.
Trait Implementations§
§impl Clone for ConnectedPoint
impl Clone for ConnectedPoint
§fn clone(&self) -> ConnectedPoint
fn clone(&self) -> ConnectedPoint
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Debug for ConnectedPoint
impl Debug for ConnectedPoint
§impl From<&ConnectedPoint> for Endpoint
impl From<&ConnectedPoint> for Endpoint
§fn from(endpoint: &ConnectedPoint) -> Endpoint
fn from(endpoint: &ConnectedPoint) -> Endpoint
§impl From<ConnectedPoint> for Endpoint
impl From<ConnectedPoint> for Endpoint
§fn from(endpoint: ConnectedPoint) -> Endpoint
fn from(endpoint: ConnectedPoint) -> Endpoint
§impl Hash for ConnectedPoint
impl Hash for ConnectedPoint
§impl PartialEq for ConnectedPoint
impl PartialEq for ConnectedPoint
impl Eq for ConnectedPoint
impl StructuralPartialEq for ConnectedPoint
Auto Trait Implementations§
impl Freeze for ConnectedPoint
impl RefUnwindSafe for ConnectedPoint
impl Send for ConnectedPoint
impl Sync for ConnectedPoint
impl Unpin for ConnectedPoint
impl UnwindSafe for ConnectedPoint
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more