@@ -26,7 +26,8 @@ use libp2p_core::{
26
26
use libp2p_swarm:: behaviour:: { ConnectionClosed , ConnectionEstablished , DialFailure , FromSwarm } ;
27
27
use libp2p_swarm:: {
28
28
dial_opts:: DialOpts , AddressScore , ConnectionHandler , ConnectionHandlerUpgrErr , DialError ,
29
- IntoConnectionHandler , NetworkBehaviour , NetworkBehaviourAction , NotifyHandler , PollParameters ,
29
+ ExternalAddresses , IntoConnectionHandler , ListenAddresses , NetworkBehaviour ,
30
+ NetworkBehaviourAction , NotifyHandler , PollParameters ,
30
31
} ;
31
32
use lru:: LruCache ;
32
33
use std:: num:: NonZeroUsize ;
@@ -56,6 +57,9 @@ pub struct Behaviour {
56
57
events : VecDeque < NetworkBehaviourAction < Event , Proto > > ,
57
58
/// The addresses of all peers that we have discovered.
58
59
discovered_peers : PeerCache ,
60
+
61
+ listen_addresses : ListenAddresses ,
62
+ external_addresses : ExternalAddresses ,
59
63
}
60
64
61
65
/// A `Behaviour` request to be fulfilled, either `Handler` requests for `Behaviour` info
@@ -177,6 +181,8 @@ impl Behaviour {
177
181
requests : Vec :: new ( ) ,
178
182
events : VecDeque :: new ( ) ,
179
183
discovered_peers,
184
+ listen_addresses : Default :: default ( ) ,
185
+ external_addresses : Default :: default ( ) ,
180
186
}
181
187
}
182
188
@@ -318,7 +324,12 @@ impl NetworkBehaviour for Behaviour {
318
324
peer_id,
319
325
handler : NotifyHandler :: Any ,
320
326
event : InEvent {
321
- listen_addrs : listen_addrs ( params) ,
327
+ listen_addrs : self
328
+ . listen_addresses
329
+ . iter ( )
330
+ . chain ( self . external_addresses . iter ( ) )
331
+ . cloned ( )
332
+ . collect ( ) ,
322
333
supported_protocols : supported_protocols ( params) ,
323
334
protocol : Protocol :: Push ,
324
335
} ,
@@ -330,7 +341,12 @@ impl NetworkBehaviour for Behaviour {
330
341
peer_id,
331
342
handler : NotifyHandler :: One ( connection_id) ,
332
343
event : InEvent {
333
- listen_addrs : listen_addrs ( params) ,
344
+ listen_addrs : self
345
+ . listen_addresses
346
+ . iter ( )
347
+ . chain ( self . external_addresses . iter ( ) )
348
+ . cloned ( )
349
+ . collect ( ) ,
334
350
supported_protocols : supported_protocols ( params) ,
335
351
protocol : Protocol :: Identify ( connection_id) ,
336
352
} ,
@@ -344,6 +360,9 @@ impl NetworkBehaviour for Behaviour {
344
360
}
345
361
346
362
fn on_swarm_event ( & mut self , event : FromSwarm < Self :: ConnectionHandler > ) {
363
+ self . listen_addresses . on_swarm_event ( & event) ;
364
+ self . external_addresses . on_swarn_event ( & event) ;
365
+
347
366
match event {
348
367
FromSwarm :: ConnectionEstablished ( connection_established) => {
349
368
self . on_connection_established ( connection_established)
@@ -453,12 +472,6 @@ fn supported_protocols(params: &impl PollParameters) -> Vec<String> {
453
472
. collect ( )
454
473
}
455
474
456
- fn listen_addrs ( params : & impl PollParameters ) -> Vec < Multiaddr > {
457
- let mut listen_addrs: Vec < _ > = params. external_addresses ( ) . map ( |r| r. addr ) . collect ( ) ;
458
- listen_addrs. extend ( params. listened_addresses ( ) ) ;
459
- listen_addrs
460
- }
461
-
462
475
/// If there is a given peer_id in the multiaddr, make sure it is the same as
463
476
/// the given peer_id. If there is no peer_id for the peer in the mutiaddr, this returns true.
464
477
fn multiaddr_matches_peer_id ( addr : & Multiaddr , peer_id : & PeerId ) -> bool {
0 commit comments