Endpoint

Struct Endpoint 

Source
pub struct Endpoint { /* private fields */ }
Expand description

The main entry point to the library

This object performs no I/O whatsoever. Instead, it consumes incoming packets and connection-generated events via handle and handle_event.

Implementations§

Source§

impl Endpoint

Source

pub fn new( config: Arc<EndpointConfig>, server_config: Option<Arc<ServerConfig>>, allow_mtud: bool, rng_seed: Option<[u8; 32]>, ) -> Self

Create a new endpoint

allow_mtud enables path MTU detection when requested by Connection configuration for better performance. This requires that outgoing packets are never fragmented, which can be achieved via e.g. the IPV6_DONTFRAG socket option.

If rng_seed is provided, it will be used to initialize the endpoint’s rng (having priority over the rng seed configured in EndpointConfig). Note that the rng_seed parameter will be removed in a future release, so prefer setting it to None and configuring rng seeds using EndpointConfig::rng_seed.

Source

pub fn set_server_config(&mut self, server_config: Option<Arc<ServerConfig>>)

Replace the server configuration, affecting new incoming connections only

Source

pub fn register_peer( &mut self, peer_id: PeerId, connection_handle: ConnectionHandle, )

Register a peer ID with a connection handle for relay functionality

Source

pub fn unregister_peer(&mut self, peer_id: &PeerId)

Unregister a peer ID from the connection mapping

Source

pub fn lookup_peer_connection( &self, peer_id: &PeerId, ) -> Option<ConnectionHandle>

Look up a connection handle for a given peer ID

Source

pub fn set_connection_peer_id( &mut self, connection_handle: ConnectionHandle, peer_id: PeerId, )

Set the peer ID for an existing connection

Source

pub fn process_relay_queue(&mut self)

Process pending relay requests (should be called periodically)

Source

pub fn relay_stats(&self) -> &RelayStats

Get relay statistics for monitoring

Source

pub fn comprehensive_relay_stats(&self) -> RelayStatistics

Get comprehensive relay statistics for monitoring and analysis

Source

pub fn relay_stats_collector(&self) -> &RelayStatisticsCollector

Get relay statistics collector for external registration of components

Source

pub fn relay_queue_len(&self) -> usize

Get relay queue length

Source

pub fn handle_event( &mut self, ch: ConnectionHandle, event: EndpointEvent, ) -> Option<ConnectionEvent>

Process EndpointEvents emitted from related Connections

In turn, processing this event may return a ConnectionEvent for the same Connection.

Source

pub fn handle( &mut self, now: Instant, remote: SocketAddr, local_ip: Option<IpAddr>, ecn: Option<EcnCodepoint>, data: BytesMut, buf: &mut Vec<u8>, ) -> Option<DatagramEvent>

Process an incoming UDP datagram

Source

pub fn connect( &mut self, now: Instant, config: ClientConfig, remote: SocketAddr, server_name: &str, ) -> Result<(ConnectionHandle, Connection), ConnectError>

Initiate a connection

Source

pub fn accept( &mut self, incoming: Incoming, now: Instant, buf: &mut Vec<u8>, server_config: Option<Arc<ServerConfig>>, ) -> Result<(ConnectionHandle, Connection), AcceptError>

Attempt to accept this incoming connection (an error may still occur)

Source

pub fn refuse(&mut self, incoming: Incoming, buf: &mut Vec<u8>) -> Transmit

Reject this incoming connection attempt

Source

pub fn retry( &mut self, incoming: Incoming, buf: &mut Vec<u8>, ) -> Result<Transmit, RetryError>

Respond with a retry packet, requiring the client to retry with address validation

Errors if incoming.may_retry() is false.

Source

pub fn ignore(&mut self, incoming: Incoming)

Ignore this incoming connection attempt, not sending any packet in response

Doing this actively, rather than merely dropping the Incoming, is necessary to prevent memory leaks due to state within Endpoint tracking the incoming connection.

Source

pub fn config(&self) -> &EndpointConfig

Access the configuration used by this endpoint

Source

pub fn enable_address_discovery(&mut self, enabled: bool)

Enable or disable address discovery for this endpoint

Address discovery is enabled by default. When enabled, the endpoint will:

  • Send OBSERVED_ADDRESS frames to peers to inform them of their reflexive addresses
  • Process received OBSERVED_ADDRESS frames to learn about its own reflexive addresses
  • Integrate discovered addresses with NAT traversal for improved connectivity
Source

pub fn address_discovery_enabled(&self) -> bool

Check if address discovery is enabled

Source

pub fn discovered_addresses(&self) -> Vec<SocketAddr>

Get all discovered addresses across all connections

Returns a list of unique socket addresses that have been observed by remote peers and reported via OBSERVED_ADDRESS frames.

Note: This returns an empty vector in the current implementation. Applications should track discovered addresses at the connection level.

Source

pub fn set_address_change_callback<F>(&mut self, callback: F)
where F: Fn(Option<SocketAddr>, SocketAddr) + Send + Sync + 'static,

Set a callback to be invoked when an address change is detected

The callback receives the old address (if any) and the new address. Only one callback can be set at a time; setting a new callback replaces the previous one.

Source

pub fn clear_address_change_callback(&mut self)

Clear the address change callback

Source

pub fn address_discovery_stats(&self) -> AddressDiscoveryStats

Get address discovery statistics

Note: This returns default statistics in the current implementation. Applications should track statistics at the connection level.

Source

pub fn open_connections(&self) -> usize

Number of connections that are currently open

Source

pub fn incoming_buffer_bytes(&self) -> u64

Counter for the number of bytes currently used in the buffers for Initial and 0-RTT messages for pending incoming connections

Trait Implementations§

Source§

impl Debug for Endpoint

Source§

fn fmt(&self, fmt: &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> From<T> for T

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 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> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = Infallible

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

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

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.
Source§

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

Source§

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