mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-28 01:01:34 +00:00
[identify] Add configurable automatic push on listen addr changes. (#2004)
* Add configurable automatic push of listen addr changes. * Update changelog and cleanup.
This commit is contained in:
@ -107,6 +107,16 @@ pub struct IdentifyConfig {
|
||||
///
|
||||
/// Defaults to 5 minutes.
|
||||
pub interval: Duration,
|
||||
|
||||
/// Whether new or expired listen addresses of the local node should
|
||||
/// trigger an active push of an identify message to all connected peers.
|
||||
///
|
||||
/// Enabling this option can result in connected peers being informed
|
||||
/// earlier about new or expired listen addresses of the local node,
|
||||
/// i.e. before the next periodic identify request with each peer.
|
||||
///
|
||||
/// Disabled by default.
|
||||
pub push_listen_addr_updates: bool,
|
||||
}
|
||||
|
||||
impl IdentifyConfig {
|
||||
@ -119,6 +129,7 @@ impl IdentifyConfig {
|
||||
local_public_key,
|
||||
initial_delay: Duration::from_millis(500),
|
||||
interval: Duration::from_secs(5 * 60),
|
||||
push_listen_addr_updates: false,
|
||||
}
|
||||
}
|
||||
|
||||
@ -141,6 +152,14 @@ impl IdentifyConfig {
|
||||
self.interval = d;
|
||||
self
|
||||
}
|
||||
|
||||
/// Configures whether new or expired listen addresses of the local
|
||||
/// node should trigger an active push of an identify message to all
|
||||
/// connected peers.
|
||||
pub fn with_push_listen_addr_updates(mut self, b: bool) -> Self {
|
||||
self.push_listen_addr_updates = b;
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl Identify {
|
||||
@ -194,7 +213,7 @@ impl NetworkBehaviour for Identify {
|
||||
ConnectedPoint::Listener { send_back_addr, .. } => send_back_addr.clone(),
|
||||
};
|
||||
|
||||
self.connected.entry(*peer_id).or_default().insert(*conn, addr.clone());
|
||||
self.connected.entry(*peer_id).or_default().insert(*conn, addr);
|
||||
}
|
||||
|
||||
fn inject_connection_closed(&mut self, peer_id: &PeerId, conn: &ConnectionId, _: &ConnectedPoint) {
|
||||
@ -214,6 +233,18 @@ impl NetworkBehaviour for Identify {
|
||||
self.pending_push.remove(peer_id);
|
||||
}
|
||||
|
||||
fn inject_new_listen_addr(&mut self, _addr: &Multiaddr) {
|
||||
if self.config.push_listen_addr_updates {
|
||||
self.pending_push.extend(self.connected.keys());
|
||||
}
|
||||
}
|
||||
|
||||
fn inject_expired_listen_addr(&mut self, _addr: &Multiaddr) {
|
||||
if self.config.push_listen_addr_updates {
|
||||
self.pending_push.extend(self.connected.keys());
|
||||
}
|
||||
}
|
||||
|
||||
fn inject_event(
|
||||
&mut self,
|
||||
peer_id: PeerId,
|
||||
@ -341,7 +372,7 @@ impl NetworkBehaviour for Identify {
|
||||
Poll::Ready(Err(err)) => {
|
||||
let event = IdentifyEvent::Error {
|
||||
peer_id: peer,
|
||||
error: ProtocolsHandlerUpgrErr::Upgrade(UpgradeError::Apply(err.into()))
|
||||
error: ProtocolsHandlerUpgrErr::Upgrade(UpgradeError::Apply(err))
|
||||
};
|
||||
return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event));
|
||||
},
|
||||
|
Reference in New Issue
Block a user