P2pEndpoint

Struct P2pEndpoint 

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

P2P endpoint - the primary API for ant-quic

This struct provides the main interface for P2P communication with NAT traversal, connection management, and secure messaging.

Implementations§

Source§

impl P2pEndpoint

Source

pub async fn new(config: P2pConfig) -> Result<Self, EndpointError>

Create a new P2P endpoint with the given configuration

Source

pub fn peer_id(&self) -> PeerId

Get the local peer ID

Source

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

Get the local bind address

Source

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

Get observed external address (if discovered)

Source

pub fn public_key_bytes(&self) -> [u8; 32]

Get the public key bytes

Source

pub async fn connect( &self, addr: SocketAddr, ) -> Result<PeerConnection, EndpointError>

Connect to a peer by address (direct connection)

Source

pub async fn connect_to_peer( &self, peer_id: PeerId, coordinator: Option<SocketAddr>, ) -> Result<PeerConnection, EndpointError>

Connect to a peer by ID using NAT traversal

Source

pub async fn accept(&self) -> Option<PeerConnection>

Accept incoming connections

Source

pub async fn disconnect(&self, peer_id: &PeerId) -> Result<(), EndpointError>

Disconnect from a peer

Source

pub async fn send( &self, peer_id: &PeerId, data: &[u8], ) -> Result<(), EndpointError>

Send data to a peer

Source

pub async fn recv( &self, timeout: Duration, ) -> Result<(PeerId, Vec<u8>), EndpointError>

Receive data from any peer (with timeout)

This function first checks the pending data buffer for data that was buffered during authentication, then polls streams from connected peers. The timeout is properly distributed across all peers to avoid O(n*timeout) delays.

Source

pub fn subscribe(&self) -> Receiver<P2pEvent>

Subscribe to endpoint events

Source

pub async fn stats(&self) -> EndpointStats

Get endpoint statistics

Source

pub async fn connection_metrics( &self, peer_id: &PeerId, ) -> Option<ConnectionMetrics>

Get metrics for a specific connection

Source

pub fn nat_stats(&self) -> Result<NatTraversalStatistics, EndpointError>

Get NAT traversal statistics

Source

pub async fn connect_known_peers(&self) -> Result<usize, EndpointError>

Connect to configured known peers

Source

pub async fn add_bootstrap(&self, addr: SocketAddr)

Add a bootstrap node dynamically

Source

pub async fn connected_peers(&self) -> Vec<PeerConnection>

Get list of connected peers

Source

pub async fn is_connected(&self, peer_id: &PeerId) -> bool

Check if a peer is connected

Source

pub async fn is_authenticated(&self, peer_id: &PeerId) -> bool

Check if a peer is authenticated

Source

pub async fn shutdown(&self)

Shutdown the endpoint gracefully

Source

pub fn is_running(&self) -> bool

Check if endpoint is running

Trait Implementations§

Source§

impl Clone for P2pEndpoint

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for P2pEndpoint

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

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

§

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
§

impl<T> From<T> for T

§

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
§

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

§

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
§

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

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

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

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

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

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

§

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

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

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