aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport/libp2p/driver.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-01 05:00:43 +0100
committertv <tv@krebsco.de>2026-11-01 05:00:43 +0100
commit67a476525bf23fec7aa10a962668cc77cce6c685 (patch)
treea259ef08154e1bc11efee95b22d3f615f564538b /src/transport/libp2p/driver.rs
parentc08574fac02c781b615969943e3d0d95ee402537 (diff)
libp2p: dial newly announced peer addresses
Diffstat (limited to 'src/transport/libp2p/driver.rs')
-rw-r--r--src/transport/libp2p/driver.rs22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/transport/libp2p/driver.rs b/src/transport/libp2p/driver.rs
index 145592d..9b4259f 100644
--- a/src/transport/libp2p/driver.rs
+++ b/src/transport/libp2p/driver.rs
@@ -220,6 +220,7 @@ pub(super) async fn run(
book.rtts.remove(&connection_id);
if book.connection(&peer_id).is_none() {
book.identified.remove(&peer_id);
+ book.explored.remove(&peer_id);
}
}
let cause = match cause {
@@ -267,9 +268,23 @@ pub(super) async fn run(
if serving && !left_out && !is_local(&address) && !is_relayed(&address) {
swarm.add_external_address(address.clone());
}
- let mut book = lock(&book);
- if !book.listening.contains(&address) {
- book.listening.push(address);
+ let new_path = !left_out && !is_local(&address) && !is_relayed(&address);
+ {
+ let mut book = lock(&book);
+ if !book.listening.contains(&address) {
+ book.listening.push(address);
+ }
+ // A new interface (ethernet besides the WLAN, say): every
+ // address may be reached better now.
+ if new_path {
+ book.explored.clear();
+ }
+ }
+ if new_path {
+ let peers: Vec<PeerId> = swarm.connected_peers().copied().collect();
+ for peer in peers {
+ explore(&mut swarm, &book, peer, true);
+ }
}
}
SwarmEvent::ExpiredListenAddr { address, .. } => {
@@ -501,6 +516,7 @@ pub(super) async fn run(
}
}
upgrade(&mut swarm, &book, peer_id, relaying.local);
+ explore(&mut swarm, &book, peer_id, false);
}
SwarmEvent::Behaviour(BehaviourEvent::Mdns(
::libp2p::mdns::Event::Discovered(found),