@@ -734,20 +734,26 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
734
734
}
735
735
}
736
736
737
- /// Get the list of node ids for peers which have completed the initial handshake.
737
+ /// Get a list of tuples mapping from node id to network addresses for peers which have
738
+ /// completed the initial handshake.
738
739
///
739
- /// For outbound connections, this will be the same as the their_node_id parameter passed in to
740
- /// new_outbound_connection, however entries will only appear once the initial handshake has
741
- /// completed and we are sure the remote peer has the private key for the given node_id.
742
- pub fn get_peer_node_ids ( & self ) -> Vec < PublicKey > {
740
+ /// For outbound connections, the [`PublicKey`] will be the same as the `their_node_id` parameter
741
+ /// passed in to [`Self::new_outbound_connection`], however entries will only appear once the initial
742
+ /// handshake has completed and we are sure the remote peer has the private key for the given
743
+ /// [`PublicKey`].
744
+ ///
745
+ /// The returned `Option`s will only be `Some` if an address had been previously given via
746
+ /// [`Self::new_outbound_connection`] or [`Self::new_inbound_connection`].
747
+ pub fn get_peer_node_ids ( & self ) -> Vec < ( PublicKey , Option < NetAddress > ) > {
743
748
let peers = self . peers . read ( ) . unwrap ( ) ;
744
749
peers. values ( ) . filter_map ( |peer_mutex| {
745
750
let p = peer_mutex. lock ( ) . unwrap ( ) ;
746
- if !p. channel_encryptor . is_ready_for_encryption ( ) || p. their_features . is_none ( ) {
751
+ if !p. channel_encryptor . is_ready_for_encryption ( ) || p. their_features . is_none ( ) ||
752
+ p. their_node_id . is_none ( ) {
747
753
return None ;
748
754
}
749
- p. their_node_id
750
- } ) . map ( | ( node_id , _ ) | node_id ) . collect ( )
755
+ Some ( ( p. their_node_id . unwrap ( ) . 0 , p . their_net_address . clone ( ) ) )
756
+ } ) . collect ( )
751
757
}
752
758
753
759
fn get_ephemeral_key ( & self ) -> SecretKey {
@@ -757,7 +763,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
757
763
SecretKey :: from_slice ( & Sha256 :: from_engine ( ephemeral_hash) . into_inner ( ) ) . expect ( "You broke SHA-256!" )
758
764
}
759
765
760
- /// Indicates a new outbound connection has been established to a node with the given node_id
766
+ /// Indicates a new outbound connection has been established to a node with the given ` node_id`
761
767
/// and an optional remote network address.
762
768
///
763
769
/// The remote network address adds the option to report a remote IP address back to a connecting
@@ -2147,11 +2153,14 @@ mod tests {
2147
2153
}
2148
2154
2149
2155
fn establish_connection < ' a > ( peer_a : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler , & ' a test_utils:: TestRoutingMessageHandler , IgnoringMessageHandler , & ' a test_utils:: TestLogger , IgnoringMessageHandler , & ' a test_utils:: TestNodeSigner > , peer_b : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler , & ' a test_utils:: TestRoutingMessageHandler , IgnoringMessageHandler , & ' a test_utils:: TestLogger , IgnoringMessageHandler , & ' a test_utils:: TestNodeSigner > ) -> ( FileDescriptor , FileDescriptor ) {
2150
- let a_id = peer_a. node_signer . get_node_id ( Recipient :: Node ) . unwrap ( ) ;
2156
+ let id_a = peer_a. node_signer . get_node_id ( Recipient :: Node ) . unwrap ( ) ;
2151
2157
let mut fd_a = FileDescriptor { fd : 1 , outbound_data : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) } ;
2158
+ let addr_a = NetAddress :: IPv4 { addr : [ 127 , 0 , 0 , 1 ] , port : 1000 } ;
2159
+ let id_b = peer_b. node_signer . get_node_id ( Recipient :: Node ) . unwrap ( ) ;
2152
2160
let mut fd_b = FileDescriptor { fd : 1 , outbound_data : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) } ;
2153
- let initial_data = peer_b. new_outbound_connection ( a_id, fd_b. clone ( ) , None ) . unwrap ( ) ;
2154
- peer_a. new_inbound_connection ( fd_a. clone ( ) , None ) . unwrap ( ) ;
2161
+ let addr_b = NetAddress :: IPv4 { addr : [ 127 , 0 , 0 , 1 ] , port : 1001 } ;
2162
+ let initial_data = peer_b. new_outbound_connection ( id_a, fd_b. clone ( ) , Some ( addr_a. clone ( ) ) ) . unwrap ( ) ;
2163
+ peer_a. new_inbound_connection ( fd_a. clone ( ) , Some ( addr_b. clone ( ) ) ) . unwrap ( ) ;
2155
2164
assert_eq ! ( peer_a. read_event( & mut fd_a, & initial_data) . unwrap( ) , false ) ;
2156
2165
peer_a. process_events ( ) ;
2157
2166
@@ -2166,6 +2175,9 @@ mod tests {
2166
2175
let a_data = fd_a. outbound_data . lock ( ) . unwrap ( ) . split_off ( 0 ) ;
2167
2176
assert_eq ! ( peer_b. read_event( & mut fd_b, & a_data) . unwrap( ) , false ) ;
2168
2177
2178
+ assert ! ( peer_a. get_peer_node_ids( ) . contains( & ( id_b, Some ( addr_b) ) ) ) ;
2179
+ assert ! ( peer_b. get_peer_node_ids( ) . contains( & ( id_a, Some ( addr_a) ) ) ) ;
2180
+
2169
2181
( fd_a. clone ( ) , fd_b. clone ( ) )
2170
2182
}
2171
2183
0 commit comments