diff options
| author | tv <tv@krebsco.de> | 2026-11-01 13:30:12 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-01 13:30:12 +0100 |
| commit | 7a6eda9ca3abcb64bd41a6b85ea56a5b3f8b0b51 (patch) | |
| tree | 7b95ad34c96da254a3672ba680e81df0280805af /src/transport/libp2p/relays.rs | |
| parent | fec2900523cba5a70b7f0f67f2b132c7a655a926 (diff) | |
libp2p: one Book::usable for all dials
Diffstat (limited to 'src/transport/libp2p/relays.rs')
| -rw-r--r-- | src/transport/libp2p/relays.rs | 17 |
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)]; |
