@@ -326,7 +326,7 @@ where
326
326
/// reachable addresses, if any.
327
327
connected : HashMap < PeerId , SmallVec < [ Connection ; 2 ] > > ,
328
328
/// Externally managed addresses via `add_address` and `remove_address`.
329
- addresses : HashMap < PeerId , SmallVec < [ Multiaddr ; 6 ] > > ,
329
+ addresses : HashMap < PeerId , HashSet < Multiaddr > > ,
330
330
/// Requests that have not yet been sent and are waiting for a connection
331
331
/// to be established.
332
332
pending_outbound_requests : HashMap < PeerId , SmallVec < [ RequestProtocol < TCodec > ; 10 ] > > ,
@@ -437,8 +437,11 @@ where
437
437
/// by [`NetworkBehaviour::handle_pending_outbound_connection`].
438
438
///
439
439
/// Addresses added in this way are only removed by `remove_address`.
440
- pub fn add_address ( & mut self , peer : & PeerId , address : Multiaddr ) {
441
- self . addresses . entry ( * peer) . or_default ( ) . push ( address) ;
440
+ ///
441
+ /// Returns true if the address was added, false otherwise (i.e. if the
442
+ /// address is already in the list).
443
+ pub fn add_address ( & mut self , peer : & PeerId , address : Multiaddr ) -> bool {
444
+ self . addresses . entry ( * peer) . or_default ( ) . insert ( address)
442
445
}
443
446
444
447
/// Removes an address of a peer previously added via `add_address`.
@@ -731,7 +734,7 @@ where
731
734
addresses. extend ( connections. iter ( ) . filter_map ( |c| c. remote_address . clone ( ) ) )
732
735
}
733
736
if let Some ( more) = self . addresses . get ( & peer) {
734
- addresses. extend ( more. into_iter ( ) . cloned ( ) ) ;
737
+ addresses. extend ( more. iter ( ) . cloned ( ) ) ;
735
738
}
736
739
737
740
Ok ( addresses)
0 commit comments