aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport/libp2p/relays.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-01 13:30:12 +0100
committertv <tv@krebsco.de>2026-11-01 13:30:12 +0100
commit7a6eda9ca3abcb64bd41a6b85ea56a5b3f8b0b51 (patch)
tree7b95ad34c96da254a3672ba680e81df0280805af /src/transport/libp2p/relays.rs
parentfec2900523cba5a70b7f0f67f2b132c7a655a926 (diff)
libp2p: one Book::usable for all dials
Diffstat (limited to 'src/transport/libp2p/relays.rs')
-rw-r--r--src/transport/libp2p/relays.rs17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/transport/libp2p/relays.rs b/src/transport/libp2p/relays.rs
index 81a97fe..1a57635 100644
--- a/src/transport/libp2p/relays.rs
+++ b/src/transport/libp2p/relays.rs
@@ -137,18 +137,12 @@ pub(super) fn upgrade(
local: PeerId,
) {
let (direct, now, wait) = {
- let book = lock(book);
+ let mut book = lock(book);
if book.connection(&peer) != Some(Connection::Relayed) {
return;
}
- let direct: Vec<Multiaddr> = book
- .addresses
- .get(&peer)
- .map(|known| dialable(known, local))
- .unwrap_or_default()
- .into_iter()
- .filter(|address| !is_relayed(address) && !ignored(&book.ignored, address))
- .collect();
+ let mut direct = book.usable(&peer, local);
+ direct.retain(|address| !is_relayed(address));
if direct.is_empty() {
return;
}
@@ -227,13 +221,16 @@ pub(super) fn retry_punches(swarm: &mut Swarm<Behaviour>, book: &Mutex<Book>, lo
Some(Connection::Relayed) if now < *next => return true,
Some(Connection::Relayed) => {}
}
+ // As `Book::usable`, by parts: `punching` is borrowed.
let through: Vec<Multiaddr> = book
.addresses
.get(peer)
.map(|known| dialable(known, local))
.unwrap_or_default()
.into_iter()
- .filter(is_relayed)
+ .filter(|address| {
+ is_relayed(address) && !excluded(&book.ignored, &mut book.routes, address)
+ })
.collect();
// Until its punch fails again (or the peer tries from its side).
*next = now + PUNCH_RETRIES[(*failed).min(PUNCH_RETRIES.len() - 1)];