Skip to main content

ConnectionInfo

Struct ConnectionInfo 

Source
#[non_exhaustive]
pub struct ConnectionInfo {
Show 14 fields pub id: ConnectionId, pub listener: Option<ListenerId>, pub worker: WorkerId, pub transport: Transport, pub origin: Origin, pub local: Endpoint, pub peer: Endpoint, pub real_peer: Option<SocketAddr>, pub proxy: Option<Arc<ProxyFacts>>, pub peer_credentials: Option<PeerCredentials>, pub tls: Option<Arc<TlsInfo>>, pub lane: Lane, pub gate: GateTag, pub accepted_at: Instant,
}
Expand description

What net-io knows about one connection, built at accept and completed as the handshake reveals more. It holds no heap memory.

§Examples

let info = net_io::ConnectionInfo::for_testing("192.0.2.1:5000".parse().unwrap());
assert_eq!(info.client_addr().unwrap().port(), 5000);
let key = info.client_key(net_io::PrefixPolicy::DEFAULT).unwrap();
assert_eq!(key.to_string(), "192.0.2.1/32");

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§id: ConnectionId

The connection’s id.

§listener: Option<ListenerId>

The listener that accepted it, if any.

§worker: WorkerId

The worker that owns it.

§transport: Transport

The kind of socket.

§origin: Origin

How it came to exist.

§local: Endpoint

Our end.

§peer: Endpoint

The socket peer, normalized.

§real_peer: Option<SocketAddr>

The real client from a trusted PROXY header, normalized.

§proxy: Option<Arc<ProxyFacts>>

Facts copied from a trusted PROXY header (pooled per worker, no allocation after warm-up).

§peer_credentials: Option<PeerCredentials>

Who is on the other end of a local socket.

§tls: Option<Arc<TlsInfo>>

TLS facts after the handshake (pooled per worker, no allocation after warm-up).

§lane: Lane

The lane the gate assigned.

§gate: GateTag

The gate’s tag for this connection.

§accepted_at: Instant

When the connection was accepted or dialed.

Implementations§

Source§

impl ConnectionInfo

Source

pub fn client_addr(&self) -> Option<SocketAddr>

The client address: the real peer from a trusted PROXY header when set, otherwise the IP peer.

Source

pub fn client_key(&self, policy: PrefixPolicy) -> Option<PrefixKey>

The client address grouped under policy.

Source

pub fn socket_peer(&self) -> Option<SocketAddr>

The socket peer, ignoring any PROXY header.

Source

pub fn for_testing(peer: SocketAddr) -> ConnectionInfo

A connection fact set attached to no socket, for testing gates and sessions.

The id comes from the process counter, so it never collides with a real connection. Fields are public to adjust.

Trait Implementations§

Source§

impl Clone for ConnectionInfo

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

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.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.