use crate::{
Multiaddr,
connection::{
ConnectionId,
ConnectedPoint,
ConnectionError,
ConnectionHandler,
Connected,
EstablishedConnection,
IntoConnectionHandler,
ListenerId,
PendingConnectionError,
},
transport::Transport,
};
use std::{fmt, num::NonZeroU32};
pub enum NetworkEvent<'a, TTrans, TInEvent, TOutEvent, THandler, TConnInfo, TPeerId>
where
TTrans: Transport,
THandler: IntoConnectionHandler<TConnInfo>,
{
ListenerClosed {
listener_id: ListenerId,
addresses: Vec<Multiaddr>,
reason: Result<(), TTrans::Error>,
},
ListenerError {
listener_id: ListenerId,
error: TTrans::Error
},
NewListenerAddress {
listener_id: ListenerId,
listen_addr: Multiaddr
},
ExpiredListenerAddress {
listener_id: ListenerId,
listen_addr: Multiaddr
},
IncomingConnection {
listener_id: ListenerId,
connection: IncomingConnection<TTrans::ListenerUpgrade>,
},
IncomingConnectionError {
local_addr: Multiaddr,
send_back_addr: Multiaddr,
error: PendingConnectionError<TTrans::Error>,
},
ConnectionEstablished {
connection: EstablishedConnection<'a, TInEvent, TConnInfo>,
num_established: NonZeroU32,
},
ConnectionClosed {
id: ConnectionId,
connected: Connected<TConnInfo>,
error: Option<ConnectionError<<THandler::Handler as ConnectionHandler>::Error>>,
num_established: u32,
},
DialError {
attempts_remaining: u32,
peer_id: TPeerId,
multiaddr: Multiaddr,
error: PendingConnectionError<TTrans::Error>,
},
UnknownPeerDialError {
multiaddr: Multiaddr,
error: PendingConnectionError<TTrans::Error>,
},
ConnectionEvent {
connection: EstablishedConnection<'a, TInEvent, TConnInfo>,
event: TOutEvent,
},
AddressChange {
connection: EstablishedConnection<'a, TInEvent, TConnInfo>,
new_endpoint: ConnectedPoint,
old_endpoint: ConnectedPoint,
},
}
impl<TTrans, TInEvent, TOutEvent, THandler, TConnInfo, TPeerId> fmt::Debug for
NetworkEvent<'_, TTrans, TInEvent, TOutEvent, THandler, TConnInfo, TPeerId>
where
TInEvent: fmt::Debug,
TOutEvent: fmt::Debug,
TTrans: Transport,
TTrans::Error: fmt::Debug,
THandler: IntoConnectionHandler<TConnInfo>,
<THandler::Handler as ConnectionHandler>::Error: fmt::Debug,
TConnInfo: fmt::Debug,
TPeerId: fmt::Debug,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
match self {
NetworkEvent::NewListenerAddress { listener_id, listen_addr } => {
f.debug_struct("NewListenerAddress")
.field("listener_id", listener_id)
.field("listen_addr", listen_addr)
.finish()
}
NetworkEvent::ExpiredListenerAddress { listener_id, listen_addr } => {
f.debug_struct("ExpiredListenerAddress")
.field("listener_id", listener_id)
.field("listen_addr", listen_addr)
.finish()
}
NetworkEvent::ListenerClosed { listener_id, addresses, reason } => {
f.debug_struct("ListenerClosed")
.field("listener_id", listener_id)
.field("addresses", addresses)
.field("reason", reason)
.finish()
}
NetworkEvent::ListenerError { listener_id, error } => {
f.debug_struct("ListenerError")
.field("listener_id", listener_id)
.field("error", error)
.finish()
}
NetworkEvent::IncomingConnection { connection, .. } => {
f.debug_struct("IncomingConnection")
.field("local_addr", &connection.local_addr)
.field("send_back_addr", &connection.send_back_addr)
.finish()
}
NetworkEvent::IncomingConnectionError { local_addr, send_back_addr, error } => {
f.debug_struct("IncomingConnectionError")
.field("local_addr", local_addr)
.field("send_back_addr", send_back_addr)
.field("error", error)
.finish()
}
NetworkEvent::ConnectionEstablished { connection, .. } => {
f.debug_struct("ConnectionEstablished")
.field("connection", connection)
.finish()
}
NetworkEvent::ConnectionClosed { id, connected, error, .. } => {
f.debug_struct("ConnectionClosed")
.field("id", id)
.field("connected", connected)
.field("error", error)
.finish()
}
NetworkEvent::DialError { attempts_remaining, peer_id, multiaddr, error } => {
f.debug_struct("DialError")
.field("attempts_remaining", attempts_remaining)
.field("peer_id", peer_id)
.field("multiaddr", multiaddr)
.field("error", error)
.finish()
}
NetworkEvent::UnknownPeerDialError { multiaddr, error, .. } => {
f.debug_struct("UnknownPeerDialError")
.field("multiaddr", multiaddr)
.field("error", error)
.finish()
}
NetworkEvent::ConnectionEvent { connection, event } => {
f.debug_struct("ConnectionEvent")
.field("connection", connection)
.field("event", event)
.finish()
}
NetworkEvent::AddressChange { connection, new_endpoint, old_endpoint } => {
f.debug_struct("AddressChange")
.field("connection", connection)
.field("new_endpoint", new_endpoint)
.field("old_endpoint", old_endpoint)
.finish()
}
}
}
}
pub struct IncomingConnection<TUpgrade> {
pub(crate) upgrade: TUpgrade,
pub local_addr: Multiaddr,
pub send_back_addr: Multiaddr,
}