pub struct DiscoveryBehaviour { /* private fields */ }
Expand description
Implementation of NetworkBehaviour
that discovers the nodes on the network.
Implementations§
Source§impl DiscoveryBehaviour
impl DiscoveryBehaviour
Sourcepub fn known_peers(&mut self) -> HashSet<PeerId>
pub fn known_peers(&mut self) -> HashSet<PeerId>
Returns the list of nodes that we know exist in the network.
Sourcepub fn add_known_address(&mut self, peer_id: PeerId, addr: Multiaddr)
pub fn add_known_address(&mut self, peer_id: PeerId, addr: Multiaddr)
Adds a hard-coded address for the given peer, that never expires.
This adds an entry to the parameter that was passed to new
.
If we didn’t know this address before, also generates a Discovered
event.
Sourcepub fn add_self_reported_address(
&mut self,
peer_id: &PeerId,
supported_protocols: &[StreamProtocol],
addr: Multiaddr,
)
pub fn add_self_reported_address( &mut self, peer_id: &PeerId, supported_protocols: &[StreamProtocol], addr: Multiaddr, )
Add a self-reported address of a remote peer to the k-buckets of the DHT
if it has compatible supported_protocols
.
Note: It is important that you call this method. The discovery mechanism will not automatically add connecting peers to the Kademlia k-buckets.
Sourcepub fn get_value(&mut self, key: RecordKey)
pub fn get_value(&mut self, key: RecordKey)
Start fetching a record from the DHT.
A corresponding ValueFound
or ValueNotFound
event will later be generated.
Sourcepub fn put_value(&mut self, key: RecordKey, value: Vec<u8>)
pub fn put_value(&mut self, key: RecordKey, value: Vec<u8>)
Start putting a record into the DHT. Other nodes can later fetch that value with
get_value
.
A corresponding ValuePut
or ValuePutFailed
event will later be generated.
Sourcepub fn put_record_to(
&mut self,
record: Record,
peers: HashSet<PeerId>,
update_local_storage: bool,
)
pub fn put_record_to( &mut self, record: Record, peers: HashSet<PeerId>, update_local_storage: bool, )
Puts a record into the DHT on the provided peers
If update_local_storage
is true, the local storage is update as well.
Sourcepub fn store_record(
&mut self,
record_key: RecordKey,
record_value: Vec<u8>,
publisher: Option<PeerId>,
expires: Option<Instant>,
)
pub fn store_record( &mut self, record_key: RecordKey, record_value: Vec<u8>, publisher: Option<PeerId>, expires: Option<Instant>, )
Store a record in the Kademlia record store.
Sourcepub fn num_entries_per_kbucket(&mut self) -> Option<Vec<(u32, usize)>>
pub fn num_entries_per_kbucket(&mut self) -> Option<Vec<(u32, usize)>>
Returns the number of nodes in each Kademlia kbucket for each Kademlia instance.
Identifies Kademlia instances by their ProtocolId
and kbuckets by the base 2 logarithm
of their lower bound.
Sourcepub fn num_kademlia_records(&mut self) -> Option<usize>
pub fn num_kademlia_records(&mut self) -> Option<usize>
Returns the number of records in the Kademlia record stores.
Sourcepub fn kademlia_records_total_size(&mut self) -> Option<usize>
pub fn kademlia_records_total_size(&mut self) -> Option<usize>
Returns the total size in bytes of all the records in the Kademlia record stores.
Sourcepub fn can_add_to_dht(addr: &Multiaddr) -> bool
pub fn can_add_to_dht(addr: &Multiaddr) -> bool
Can the given Multiaddr
be put into the DHT?
This test is successful only for global IP addresses and DNS names.
Trait Implementations§
Source§impl NetworkBehaviour for DiscoveryBehaviour
impl NetworkBehaviour for DiscoveryBehaviour
Source§type ConnectionHandler = ToggleConnectionHandler<<Behaviour<MemoryStore> as NetworkBehaviour>::ConnectionHandler>
type ConnectionHandler = ToggleConnectionHandler<<Behaviour<MemoryStore> as NetworkBehaviour>::ConnectionHandler>
Source§type ToSwarm = DiscoveryOut
type ToSwarm = DiscoveryOut
NetworkBehaviour
and that the swarm will report back.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_established_outbound_connection(
&mut self,
connection_id: ConnectionId,
peer: PeerId,
addr: &Multiaddr,
role_override: Endpoint,
) -> Result<THandler<Self>, ConnectionDenied>
fn handle_established_outbound_connection( &mut self, connection_id: ConnectionId, peer: PeerId, addr: &Multiaddr, role_override: Endpoint, ) -> Result<THandler<Self>, ConnectionDenied>
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_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 on_swarm_event(&mut self, event: FromSwarm<'_, Self::ConnectionHandler>)
fn on_swarm_event(&mut self, event: FromSwarm<'_, Self::ConnectionHandler>)
Swarm
.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<'_>,
params: &mut impl PollParameters,
) -> Poll<ToSwarm<Self::ToSwarm, THandlerInEvent<Self>>>
fn poll( &mut self, cx: &mut Context<'_>, params: &mut impl PollParameters, ) -> Poll<ToSwarm<Self::ToSwarm, THandlerInEvent<Self>>>
Auto Trait Implementations§
impl Freeze for DiscoveryBehaviour
impl !RefUnwindSafe for DiscoveryBehaviour
impl Send for DiscoveryBehaviour
impl !Sync for DiscoveryBehaviour
impl Unpin for DiscoveryBehaviour
impl !UnwindSafe for DiscoveryBehaviour
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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 moreSource§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
Source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
Source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T
. Read moreSource§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
Source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from
.Source§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
Source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.