@@ -171,15 +171,15 @@ fn _check_usize_is_32_or_64() {
171171/// lifetimes). Other times you can afford a reference, which is more efficient, in which case
172172/// SimpleRefPeerManager is the more appropriate type. Defining these type aliases prevents
173173/// issues such as overly long function definitions.
174- pub type SimpleArcPeerManager < SD , M , T , F , L > = Arc < PeerManager < SD , SimpleArcChannelManager < M , T , F , L > > > ;
174+ pub type SimpleArcPeerManager < SD , M , T , F , L > = Arc < PeerManager < SD , SimpleArcChannelManager < M , T , F , L > , Arc < L > > > ;
175175
176176/// SimpleRefPeerManager is a type alias for a PeerManager reference, and is the reference
177177/// counterpart to the SimpleArcPeerManager type alias. Use this type by default when you don't
178178/// need a PeerManager with a static lifetime. You'll need a static lifetime in cases such as
179179/// usage of lightning-net-tokio (since tokio::spawn requires parameters with static lifetimes).
180180/// But if this is not necessary, using a reference is more efficient. Defining these type aliases
181181/// helps with issues such as long function definitions.
182- pub type SimpleRefPeerManager < ' a , ' b , ' c , ' d , ' e , SD , M , T , F , L > = PeerManager < SD , SimpleRefChannelManager < ' a , ' b , ' c , ' d , ' e , M , T , F , L > > ;
182+ pub type SimpleRefPeerManager < ' a , ' b , ' c , ' d , ' e , SD , M , T , F , L > = PeerManager < SD , SimpleRefChannelManager < ' a , ' b , ' c , ' d , ' e , M , T , F , L > , & ' e L > ;
183183
184184/// A PeerManager manages a set of peers, described by their SocketDescriptor and marshalls socket
185185/// events into messages which it passes on to its MessageHandlers.
@@ -189,7 +189,7 @@ pub type SimpleRefPeerManager<'a, 'b, 'c, 'd, 'e, SD, M, T, F, L> = PeerManager<
189189/// essentially you should default to using a SimpleRefPeerManager, and use a
190190/// SimpleArcPeerManager when you require a PeerManager with a static lifetime, such as when
191191/// you're using lightning-net-tokio.
192- pub struct PeerManager < Descriptor : SocketDescriptor , CM : Deref > where CM :: Target : msgs:: ChannelMessageHandler {
192+ pub struct PeerManager < Descriptor : SocketDescriptor , CM : Deref , L : Deref > where CM :: Target : msgs:: ChannelMessageHandler , L :: Target : Logger {
193193 message_handler : MessageHandler < CM > ,
194194 peers : Mutex < PeerHolder < Descriptor > > ,
195195 our_node_secret : SecretKey ,
@@ -200,7 +200,7 @@ pub struct PeerManager<Descriptor: SocketDescriptor, CM: Deref> where CM::Target
200200 peer_counter_low : AtomicUsize ,
201201 peer_counter_high : AtomicUsize ,
202202
203- logger : Arc < Logger > ,
203+ logger : L ,
204204}
205205
206206macro_rules! encode_msg {
@@ -213,22 +213,22 @@ macro_rules! encode_msg {
213213
214214/// Manages and reacts to connection events. You probably want to use file descriptors as PeerIds.
215215/// PeerIds may repeat, but only after socket_disconnected() has been called.
216- impl < Descriptor : SocketDescriptor , CM : Deref > PeerManager < Descriptor , CM > where CM :: Target : msgs:: ChannelMessageHandler {
216+ impl < Descriptor : SocketDescriptor , CM : Deref , L : Deref > PeerManager < Descriptor , CM , L > where CM :: Target : msgs:: ChannelMessageHandler , L :: Target : Logger {
217217 /// Constructs a new PeerManager with the given message handlers and node_id secret key
218218 /// ephemeral_random_data is used to derive per-connection ephemeral keys and must be
219219 /// cryptographically secure random bytes.
220- pub fn new ( message_handler : MessageHandler < CM > , our_node_secret : SecretKey , ephemeral_random_data : & [ u8 ; 32 ] , logger : Arc < Logger > ) -> PeerManager < Descriptor , CM > {
220+ pub fn new ( message_handler : MessageHandler < CM > , our_node_secret : SecretKey , ephemeral_random_data : & [ u8 ; 32 ] , logger : L ) -> PeerManager < Descriptor , CM , L > {
221221 let mut ephemeral_key_midstate = Sha256 :: engine ( ) ;
222222 ephemeral_key_midstate. input ( ephemeral_random_data) ;
223223
224224 PeerManager {
225- message_handler : message_handler ,
225+ message_handler,
226226 peers : Mutex :: new ( PeerHolder {
227227 peers : HashMap :: new ( ) ,
228228 peers_needing_send : HashSet :: new ( ) ,
229229 node_id_to_descriptor : HashMap :: new ( )
230230 } ) ,
231- our_node_secret : our_node_secret ,
231+ our_node_secret,
232232 ephemeral_key_midstate,
233233 peer_counter_low : AtomicUsize :: new ( 0 ) ,
234234 peer_counter_high : AtomicUsize :: new ( 0 ) ,
@@ -1167,7 +1167,6 @@ mod tests {
11671167 use ln:: features:: ChannelFeatures ;
11681168 use util:: events;
11691169 use util:: test_utils;
1170- use util:: logger:: Logger ;
11711170
11721171 use bitcoin:: secp256k1:: Secp256k1 ;
11731172 use bitcoin:: secp256k1:: key:: { SecretKey , PublicKey } ;
@@ -1205,20 +1204,30 @@ mod tests {
12051204 fn disconnect_socket ( & mut self ) { }
12061205 }
12071206
1208- fn create_chan_handlers ( peer_count : usize ) -> Vec < test_utils:: TestChannelMessageHandler > {
1209- let mut chan_handlers = Vec :: new ( ) ;
1207+ struct PeerManagerCfg {
1208+ chan_handler : test_utils:: TestChannelMessageHandler ,
1209+ logger : test_utils:: TestLogger ,
1210+ }
1211+
1212+ fn create_peermgr_cfgs ( peer_count : usize ) -> Vec < PeerManagerCfg > {
1213+ let mut cfgs = Vec :: new ( ) ;
12101214 for _ in 0 ..peer_count {
12111215 let chan_handler = test_utils:: TestChannelMessageHandler :: new ( ) ;
1212- chan_handlers. push ( chan_handler) ;
1216+ let logger = test_utils:: TestLogger :: new ( ) ;
1217+ cfgs. push (
1218+ PeerManagerCfg {
1219+ chan_handler,
1220+ logger,
1221+ }
1222+ ) ;
12131223 }
12141224
1215- chan_handlers
1225+ cfgs
12161226 }
12171227
1218- fn create_network < ' a > ( peer_count : usize , chan_handlers : & ' a Vec < test_utils :: TestChannelMessageHandler > , routing_handlers : Option < & ' a Vec < Arc < msgs:: RoutingMessageHandler > > > ) -> Vec < PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler > > {
1228+ fn create_network < ' a > ( peer_count : usize , cfgs : & ' a Vec < PeerManagerCfg > , routing_handlers : Option < & ' a Vec < Arc < msgs:: RoutingMessageHandler > > > ) -> Vec < PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler , & ' a test_utils :: TestLogger > > {
12191229 let mut peers = Vec :: new ( ) ;
12201230 let mut rng = thread_rng ( ) ;
1221- let logger : Arc < Logger > = Arc :: new ( test_utils:: TestLogger :: new ( ) ) ;
12221231 let mut ephemeral_bytes = [ 0 ; 32 ] ;
12231232 rng. fill_bytes ( & mut ephemeral_bytes) ;
12241233
@@ -1231,15 +1240,15 @@ mod tests {
12311240 rng. fill_bytes ( & mut key_slice) ;
12321241 SecretKey :: from_slice ( & key_slice) . unwrap ( )
12331242 } ;
1234- let msg_handler = MessageHandler { chan_handler : & chan_handlers [ i] , route_handler : router } ;
1235- let peer = PeerManager :: new ( msg_handler, node_id, & ephemeral_bytes, Arc :: clone ( & logger) ) ;
1243+ let msg_handler = MessageHandler { chan_handler : & cfgs [ i] . chan_handler , route_handler : router } ;
1244+ let peer = PeerManager :: new ( msg_handler, node_id, & ephemeral_bytes, & cfgs [ i ] . logger ) ;
12361245 peers. push ( peer) ;
12371246 }
12381247
12391248 peers
12401249 }
12411250
1242- fn establish_connection < ' a > ( peer_a : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler > , peer_b : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler > ) -> ( FileDescriptor , FileDescriptor ) {
1251+ fn establish_connection < ' a > ( peer_a : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler , & ' a test_utils :: TestLogger > , peer_b : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler , & ' a test_utils :: TestLogger > ) -> ( FileDescriptor , FileDescriptor ) {
12431252 let secp_ctx = Secp256k1 :: new ( ) ;
12441253 let a_id = PublicKey :: from_secret_key ( & secp_ctx, & peer_a. our_node_secret ) ;
12451254 let mut fd_a = FileDescriptor { fd : 1 , outbound_data : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) } ;
@@ -1252,7 +1261,7 @@ mod tests {
12521261 ( fd_a. clone ( ) , fd_b. clone ( ) )
12531262 }
12541263
1255- fn establish_connection_and_read_events < ' a > ( peer_a : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler > , peer_b : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler > ) -> ( FileDescriptor , FileDescriptor ) {
1264+ fn establish_connection_and_read_events < ' a > ( peer_a : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler , & ' a test_utils :: TestLogger > , peer_b : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler , & ' a test_utils :: TestLogger > ) -> ( FileDescriptor , FileDescriptor ) {
12561265 let ( mut fd_a, mut fd_b) = establish_connection ( peer_a, peer_b) ;
12571266 assert_eq ! ( peer_b. read_event( & mut fd_b, & fd_a. outbound_data. lock( ) . unwrap( ) . split_off( 0 ) ) . unwrap( ) , false ) ;
12581267 assert_eq ! ( peer_a. read_event( & mut fd_a, & fd_b. outbound_data. lock( ) . unwrap( ) . split_off( 0 ) ) . unwrap( ) , false ) ;
@@ -1263,9 +1272,9 @@ mod tests {
12631272 fn test_disconnect_peer ( ) {
12641273 // Simple test which builds a network of PeerManager, connects and brings them to NoiseState::Finished and
12651274 // push a DisconnectPeer event to remove the node flagged by id
1266- let chan_handlers = create_chan_handlers ( 2 ) ;
1275+ let cfgs = create_peermgr_cfgs ( 2 ) ;
12671276 let chan_handler = test_utils:: TestChannelMessageHandler :: new ( ) ;
1268- let mut peers = create_network ( 2 , & chan_handlers , None ) ;
1277+ let mut peers = create_network ( 2 , & cfgs , None ) ;
12691278 establish_connection ( & peers[ 0 ] , & peers[ 1 ] ) ;
12701279 assert_eq ! ( peers[ 0 ] . peers. lock( ) . unwrap( ) . peers. len( ) , 1 ) ;
12711280
@@ -1286,8 +1295,8 @@ mod tests {
12861295 #[ test]
12871296 fn test_timer_tick_occurred ( ) {
12881297 // Create peers, a vector of two peer managers, perform initial set up and check that peers[0] has one Peer.
1289- let chan_handlers = create_chan_handlers ( 2 ) ;
1290- let peers = create_network ( 2 , & chan_handlers , None ) ;
1298+ let cfgs = create_peermgr_cfgs ( 2 ) ;
1299+ let peers = create_network ( 2 , & cfgs , None ) ;
12911300 establish_connection ( & peers[ 0 ] , & peers[ 1 ] ) ;
12921301 assert_eq ! ( peers[ 0 ] . peers. lock( ) . unwrap( ) . peers. len( ) , 1 ) ;
12931302
@@ -1404,15 +1413,15 @@ mod tests {
14041413 #[ test]
14051414 fn test_do_attempt_write_data ( ) {
14061415 // Create 2 peers with custom TestRoutingMessageHandlers and connect them.
1407- let chan_handlers = create_chan_handlers ( 2 ) ;
1416+ let cfgs = create_peermgr_cfgs ( 2 ) ;
14081417 let mut routing_handlers: Vec < Arc < msgs:: RoutingMessageHandler > > = Vec :: new ( ) ;
14091418 let mut routing_handlers_concrete: Vec < Arc < TestRoutingMessageHandler > > = Vec :: new ( ) ;
14101419 for _ in 0 ..2 {
14111420 let routing_handler = Arc :: new ( TestRoutingMessageHandler :: new ( ) ) ;
14121421 routing_handlers. push ( routing_handler. clone ( ) ) ;
14131422 routing_handlers_concrete. push ( routing_handler. clone ( ) ) ;
14141423 }
1415- let peers = create_network ( 2 , & chan_handlers , Some ( & routing_handlers) ) ;
1424+ let peers = create_network ( 2 , & cfgs , Some ( & routing_handlers) ) ;
14161425
14171426 // By calling establish_connect, we trigger do_attempt_write_data between
14181427 // the peers. Previously this function would mistakenly enter an infinite loop
@@ -1438,12 +1447,12 @@ mod tests {
14381447 fn limit_initial_routing_sync_requests ( ) {
14391448 // Inbound peer 0 requests initial_routing_sync, but outbound peer 1 does not.
14401449 {
1441- let chan_handlers = create_chan_handlers ( 2 ) ;
1450+ let cfgs = create_peermgr_cfgs ( 2 ) ;
14421451 let routing_handlers: Vec < Arc < msgs:: RoutingMessageHandler > > = vec ! [
14431452 Arc :: new( test_utils:: TestRoutingMessageHandler :: new( ) . set_request_full_sync( ) ) ,
14441453 Arc :: new( test_utils:: TestRoutingMessageHandler :: new( ) ) ,
14451454 ] ;
1446- let peers = create_network ( 2 , & chan_handlers , Some ( & routing_handlers) ) ;
1455+ let peers = create_network ( 2 , & cfgs , Some ( & routing_handlers) ) ;
14471456 let ( fd_0_to_1, fd_1_to_0) = establish_connection_and_read_events ( & peers[ 0 ] , & peers[ 1 ] ) ;
14481457
14491458 let peer_0 = peers[ 0 ] . peers . lock ( ) . unwrap ( ) ;
@@ -1458,12 +1467,12 @@ mod tests {
14581467
14591468 // Outbound peer 1 requests initial_routing_sync, but inbound peer 0 does not.
14601469 {
1461- let chan_handlers = create_chan_handlers ( 2 ) ;
1470+ let cfgs = create_peermgr_cfgs ( 2 ) ;
14621471 let routing_handlers: Vec < Arc < msgs:: RoutingMessageHandler > > = vec ! [
14631472 Arc :: new( test_utils:: TestRoutingMessageHandler :: new( ) ) ,
14641473 Arc :: new( test_utils:: TestRoutingMessageHandler :: new( ) . set_request_full_sync( ) ) ,
14651474 ] ;
1466- let peers = create_network ( 2 , & chan_handlers , Some ( & routing_handlers) ) ;
1475+ let peers = create_network ( 2 , & cfgs , Some ( & routing_handlers) ) ;
14671476 let ( fd_0_to_1, fd_1_to_0) = establish_connection_and_read_events ( & peers[ 0 ] , & peers[ 1 ] ) ;
14681477
14691478 let peer_0 = peers[ 0 ] . peers . lock ( ) . unwrap ( ) ;
0 commit comments