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
impl Endpoint
Sourcepub fn new(
config: Arc<EndpointConfig>,
server_config: Option<Arc<ServerConfig>>,
allow_mtud: bool,
rng_seed: Option<[u8; 32]>,
) -> Self
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
.
Sourcepub fn set_server_config(&mut self, server_config: Option<Arc<ServerConfig>>)
pub fn set_server_config(&mut self, server_config: Option<Arc<ServerConfig>>)
Replace the server configuration, affecting new incoming connections only
Sourcepub fn register_peer(
&mut self,
peer_id: PeerId,
connection_handle: ConnectionHandle,
)
pub fn register_peer( &mut self, peer_id: PeerId, connection_handle: ConnectionHandle, )
Register a peer ID with a connection handle for relay functionality
Sourcepub fn unregister_peer(&mut self, peer_id: &PeerId)
pub fn unregister_peer(&mut self, peer_id: &PeerId)
Unregister a peer ID from the connection mapping
Sourcepub fn lookup_peer_connection(
&self,
peer_id: &PeerId,
) -> Option<ConnectionHandle>
pub fn lookup_peer_connection( &self, peer_id: &PeerId, ) -> Option<ConnectionHandle>
Look up a connection handle for a given peer ID
Sourcepub fn set_connection_peer_id(
&mut self,
connection_handle: ConnectionHandle,
peer_id: PeerId,
)
pub fn set_connection_peer_id( &mut self, connection_handle: ConnectionHandle, peer_id: PeerId, )
Set the peer ID for an existing connection
Sourcepub fn process_relay_queue(&mut self)
pub fn process_relay_queue(&mut self)
Process pending relay requests (should be called periodically)
Sourcepub fn relay_stats(&self) -> &RelayStats
pub fn relay_stats(&self) -> &RelayStats
Get relay statistics for monitoring
Sourcepub fn comprehensive_relay_stats(&self) -> RelayStatistics
pub fn comprehensive_relay_stats(&self) -> RelayStatistics
Get comprehensive relay statistics for monitoring and analysis
Sourcepub fn relay_stats_collector(&self) -> &RelayStatisticsCollector
pub fn relay_stats_collector(&self) -> &RelayStatisticsCollector
Get relay statistics collector for external registration of components
Sourcepub fn relay_queue_len(&self) -> usize
pub fn relay_queue_len(&self) -> usize
Get relay queue length
Sourcepub fn handle_event(
&mut self,
ch: ConnectionHandle,
event: EndpointEvent,
) -> Option<ConnectionEvent>
pub fn handle_event( &mut self, ch: ConnectionHandle, event: EndpointEvent, ) -> Option<ConnectionEvent>
Process EndpointEvent
s emitted from related Connection
s
In turn, processing this event may return a ConnectionEvent
for the same Connection
.
Sourcepub fn handle(
&mut self,
now: Instant,
remote: SocketAddr,
local_ip: Option<IpAddr>,
ecn: Option<EcnCodepoint>,
data: BytesMut,
buf: &mut Vec<u8>,
) -> Option<DatagramEvent>
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
Sourcepub fn connect(
&mut self,
now: Instant,
config: ClientConfig,
remote: SocketAddr,
server_name: &str,
) -> Result<(ConnectionHandle, Connection), ConnectError>
pub fn connect( &mut self, now: Instant, config: ClientConfig, remote: SocketAddr, server_name: &str, ) -> Result<(ConnectionHandle, Connection), ConnectError>
Initiate a connection
Sourcepub fn accept(
&mut self,
incoming: Incoming,
now: Instant,
buf: &mut Vec<u8>,
server_config: Option<Arc<ServerConfig>>,
) -> Result<(ConnectionHandle, Connection), AcceptError>
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)
Sourcepub fn refuse(&mut self, incoming: Incoming, buf: &mut Vec<u8>) -> Transmit
pub fn refuse(&mut self, incoming: Incoming, buf: &mut Vec<u8>) -> Transmit
Reject this incoming connection attempt
Sourcepub fn retry(
&mut self,
incoming: Incoming,
buf: &mut Vec<u8>,
) -> Result<Transmit, RetryError>
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.
Sourcepub fn config(&self) -> &EndpointConfig
pub fn config(&self) -> &EndpointConfig
Access the configuration used by this endpoint
Sourcepub fn enable_address_discovery(&mut self, enabled: bool)
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
Sourcepub fn address_discovery_enabled(&self) -> bool
pub fn address_discovery_enabled(&self) -> bool
Check if address discovery is enabled
Sourcepub fn discovered_addresses(&self) -> Vec<SocketAddr>
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.
Sourcepub fn set_address_change_callback<F>(&mut self, callback: F)
pub fn set_address_change_callback<F>(&mut self, callback: F)
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.
Sourcepub fn clear_address_change_callback(&mut self)
pub fn clear_address_change_callback(&mut self)
Clear the address change callback
Sourcepub fn address_discovery_stats(&self) -> AddressDiscoveryStats
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.
Sourcepub fn open_connections(&self) -> usize
pub fn open_connections(&self) -> usize
Number of connections that are currently open
Sourcepub fn incoming_buffer_bytes(&self) -> u64
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