pub struct BillPouchBehaviour {
pub gossipsub: Behaviour,
pub kad: Behaviour<MemoryStore>,
pub identify: Behaviour,
pub mdns: Behaviour,
pub fragment_exchange: Behaviour<FragmentRequest, FragmentResponse>,
pub autonat: Behaviour,
pub relay: Behaviour,
}Expand description
Single combined behaviour injected into the libp2p Swarm.
All seven sub-behaviours are polled by the swarm in a single select!-style
event loop inside run_network_loop.
Fields§
§gossipsub: BehaviourFlooding pub/sub: used to broadcast NodeInfo announcements.
kad: Behaviour<MemoryStore>Kademlia DHT: distributed peer discovery and content addressing.
identify: BehaviourIdentify: exchange protocol version string and listen addresses with peers.
mdns: BehaviourmDNS: zero-configuration local-network peer discovery via multicast DNS.
fragment_exchange: Behaviour<FragmentRequest, FragmentResponse>Direct fragment fetch/push between Pouch nodes.
autonat: BehaviourAutoNAT: probes remote peers to detect whether this node is publicly reachable.
Reports [autonat::NatStatus] changes so the daemon can decide whether to
activate relay-assisted connectivity.
relay: BehaviourRelay client: allows this node to route connections through a relay peer when a direct connection is not possible (e.g. behind symmetric NAT).
Implementations§
Source§impl BillPouchBehaviour
impl BillPouchBehaviour
Sourcepub fn new(keypair: &Keypair, relay_client: Behaviour) -> Result<Self>
pub fn new(keypair: &Keypair, relay_client: Behaviour) -> Result<Self>
Build the combined behaviour from a keypair and a relay client handle.
The relay_client is obtained from the SwarmBuilder::with_relay_client()
step and must be passed in rather than constructed here.
Configures:
- Gossipsub with strict message signing and a 10-second heartbeat.
- Kademlia with an in-memory record store.
- Identify with the
/billpouch/id/1.0.0protocol string. - mDNS with default settings.
- RequestResponse with the
/billpouch/fragment/1.1.0protocol. - AutoNAT with default probe config.
- Relay client (handle passed by the SwarmBuilder).
§Errors
Returns an error if gossipsub config validation fails or mDNS cannot bind its multicast socket.
Trait Implementations§
Source§impl NetworkBehaviour for BillPouchBehaviourwhere
Behaviour: NetworkBehaviour,
Behaviour<MemoryStore>: NetworkBehaviour,
Behaviour: NetworkBehaviour,
Behaviour: NetworkBehaviour,
Behaviour<FragmentRequest, FragmentResponse>: NetworkBehaviour,
Behaviour: NetworkBehaviour,
Behaviour: NetworkBehaviour,
impl NetworkBehaviour for BillPouchBehaviourwhere
Behaviour: NetworkBehaviour,
Behaviour<MemoryStore>: NetworkBehaviour,
Behaviour: NetworkBehaviour,
Behaviour: NetworkBehaviour,
Behaviour<FragmentRequest, FragmentResponse>: NetworkBehaviour,
Behaviour: NetworkBehaviour,
Behaviour: NetworkBehaviour,
Source§type ConnectionHandler = ConnectionHandlerSelect<ConnectionHandlerSelect<ConnectionHandlerSelect<ConnectionHandlerSelect<ConnectionHandlerSelect<ConnectionHandlerSelect<<Behaviour as NetworkBehaviour>::ConnectionHandler, <Behaviour<MemoryStore> as NetworkBehaviour>::ConnectionHandler>, <Behaviour as NetworkBehaviour>::ConnectionHandler>, <Behaviour<Tokio> as NetworkBehaviour>::ConnectionHandler>, <Behaviour<Codec<FragmentRequest, FragmentResponse>> as NetworkBehaviour>::ConnectionHandler>, <Behaviour as NetworkBehaviour>::ConnectionHandler>, <Behaviour as NetworkBehaviour>::ConnectionHandler>
type ConnectionHandler = ConnectionHandlerSelect<ConnectionHandlerSelect<ConnectionHandlerSelect<ConnectionHandlerSelect<ConnectionHandlerSelect<ConnectionHandlerSelect<<Behaviour as NetworkBehaviour>::ConnectionHandler, <Behaviour<MemoryStore> as NetworkBehaviour>::ConnectionHandler>, <Behaviour as NetworkBehaviour>::ConnectionHandler>, <Behaviour<Tokio> as NetworkBehaviour>::ConnectionHandler>, <Behaviour<Codec<FragmentRequest, FragmentResponse>> as NetworkBehaviour>::ConnectionHandler>, <Behaviour as NetworkBehaviour>::ConnectionHandler>, <Behaviour as NetworkBehaviour>::ConnectionHandler>
Source§type ToSwarm = BillPouchBehaviourEvent
type ToSwarm = BillPouchBehaviourEvent
NetworkBehaviour and that the swarm will report back.Source§fn handle_pending_inbound_connection(
&mut self,
connection_id: ConnectionId,
local_addr: &Multiaddr,
remote_addr: &Multiaddr,
) -> Result<(), ConnectionDenied>
fn handle_pending_inbound_connection( &mut self, connection_id: ConnectionId, local_addr: &Multiaddr, remote_addr: &Multiaddr, ) -> Result<(), ConnectionDenied>
Source§fn handle_established_inbound_connection(
&mut self,
connection_id: ConnectionId,
peer: PeerId,
local_addr: &Multiaddr,
remote_addr: &Multiaddr,
) -> Result<THandler<Self>, ConnectionDenied>
fn handle_established_inbound_connection( &mut self, connection_id: ConnectionId, peer: PeerId, local_addr: &Multiaddr, remote_addr: &Multiaddr, ) -> Result<THandler<Self>, ConnectionDenied>
Source§fn handle_pending_outbound_connection(
&mut self,
connection_id: ConnectionId,
maybe_peer: Option<PeerId>,
addresses: &[Multiaddr],
effective_role: Endpoint,
) -> Result<Vec<Multiaddr>, ConnectionDenied>
fn handle_pending_outbound_connection( &mut self, connection_id: ConnectionId, maybe_peer: Option<PeerId>, addresses: &[Multiaddr], effective_role: Endpoint, ) -> Result<Vec<Multiaddr>, ConnectionDenied>
Source§fn handle_established_outbound_connection(
&mut self,
connection_id: ConnectionId,
peer: PeerId,
addr: &Multiaddr,
role_override: Endpoint,
port_use: PortUse,
) -> Result<THandler<Self>, ConnectionDenied>
fn handle_established_outbound_connection( &mut self, connection_id: ConnectionId, peer: PeerId, addr: &Multiaddr, role_override: Endpoint, port_use: PortUse, ) -> Result<THandler<Self>, ConnectionDenied>
Source§fn on_connection_handler_event(
&mut self,
peer_id: PeerId,
connection_id: ConnectionId,
event: THandlerOutEvent<Self>,
)
fn on_connection_handler_event( &mut self, peer_id: PeerId, connection_id: ConnectionId, event: THandlerOutEvent<Self>, )
ConnectionHandler]
dedicated to the peer identified by peer_id. for the behaviour. Read moreSource§fn poll(
&mut self,
cx: &mut Context<'_>,
) -> Poll<ToSwarm<Self::ToSwarm, THandlerInEvent<Self>>>
fn poll( &mut self, cx: &mut Context<'_>, ) -> Poll<ToSwarm<Self::ToSwarm, THandlerInEvent<Self>>>
Source§fn on_swarm_event(&mut self, event: FromSwarm<'_>)
fn on_swarm_event(&mut self, event: FromSwarm<'_>)
Swarm.Auto Trait Implementations§
impl Freeze for BillPouchBehaviour
impl !RefUnwindSafe for BillPouchBehaviour
impl Send for BillPouchBehaviour
impl !Sync for BillPouchBehaviour
impl Unpin for BillPouchBehaviour
impl !UnwindSafe for BillPouchBehaviour
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more