mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-30 18:21:33 +00:00
refactor(swarm)!: deprecate PollParameters
where possible (#3153)
This patch deprecates 3 out of 4 functions on `PollParameters`: - `local_peer_id` - `listened_addresses` - `external_addresses` The addresses can be obtained by inspecting the `FromSwarm` event. To make this easier, we introduce two utility structs in `libp2p-swarm`: - `ExternalAddresses` - `ListenAddresses` A node's `PeerId` is always known to the caller, thus we can require them to pass it in. Related: #3124.
This commit is contained in:
@ -34,7 +34,8 @@ use libp2p_core::identity::Keypair;
|
||||
use libp2p_core::{Multiaddr, PeerId, PeerRecord};
|
||||
use libp2p_swarm::behaviour::FromSwarm;
|
||||
use libp2p_swarm::{
|
||||
CloseConnection, NetworkBehaviour, NetworkBehaviourAction, NotifyHandler, PollParameters,
|
||||
CloseConnection, ExternalAddresses, NetworkBehaviour, NetworkBehaviourAction, NotifyHandler,
|
||||
PollParameters,
|
||||
};
|
||||
use std::collections::{HashMap, VecDeque};
|
||||
use std::iter::FromIterator;
|
||||
@ -57,6 +58,8 @@ pub struct Behaviour {
|
||||
|
||||
/// Tracks the expiry of registrations that we have discovered and stored in `discovered_peers` otherwise we have a memory leak.
|
||||
expiring_registrations: FuturesUnordered<BoxFuture<'static, (PeerId, Namespace)>>,
|
||||
|
||||
external_addresses: ExternalAddresses,
|
||||
}
|
||||
|
||||
impl Behaviour {
|
||||
@ -70,6 +73,7 @@ impl Behaviour {
|
||||
expiring_registrations: FuturesUnordered::from_iter(vec![
|
||||
futures::future::pending().boxed()
|
||||
]),
|
||||
external_addresses: Default::default(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -215,7 +219,7 @@ impl NetworkBehaviour for Behaviour {
|
||||
fn poll(
|
||||
&mut self,
|
||||
cx: &mut Context<'_>,
|
||||
poll_params: &mut impl PollParameters,
|
||||
_: &mut impl PollParameters,
|
||||
) -> Poll<NetworkBehaviourAction<Self::OutEvent, Self::ConnectionHandler>> {
|
||||
if let Some(event) = self.events.pop_front() {
|
||||
return Poll::Ready(event);
|
||||
@ -224,10 +228,8 @@ impl NetworkBehaviour for Behaviour {
|
||||
if let Some((namespace, rendezvous_node, ttl)) = self.pending_register_requests.pop() {
|
||||
// Update our external addresses based on the Swarm's current knowledge.
|
||||
// It doesn't make sense to register addresses on which we are not reachable, hence this should not be configurable from the outside.
|
||||
let external_addresses = poll_params
|
||||
.external_addresses()
|
||||
.map(|r| r.addr)
|
||||
.collect::<Vec<Multiaddr>>();
|
||||
|
||||
let external_addresses = self.external_addresses.iter().cloned().collect::<Vec<_>>();
|
||||
|
||||
if external_addresses.is_empty() {
|
||||
return Poll::Ready(NetworkBehaviourAction::GenerateEvent(
|
||||
@ -268,6 +270,8 @@ impl NetworkBehaviour for Behaviour {
|
||||
}
|
||||
|
||||
fn on_swarm_event(&mut self, event: FromSwarm<Self::ConnectionHandler>) {
|
||||
self.external_addresses.on_swarn_event(&event);
|
||||
|
||||
match event {
|
||||
FromSwarm::ConnectionEstablished(_)
|
||||
| FromSwarm::ConnectionClosed(_)
|
||||
|
Reference in New Issue
Block a user