1
- use crate :: types:: { DynStore , Sweeper , Wallet } ;
1
+ use crate :: types:: { DynStore , PeerManager , Sweeper , Wallet } ;
2
+
2
3
use crate :: {
3
4
hex_utils, ChannelManager , Config , Error , NetworkGraph , PeerInfo , PeerStore , UserChannelId ,
4
5
} ;
5
6
7
+ use crate :: connection:: connect_peer_if_necessary;
8
+
6
9
use crate :: payment_store:: {
7
10
PaymentDetails , PaymentDetailsUpdate , PaymentDirection , PaymentStatus , PaymentStore ,
8
11
} ;
@@ -295,6 +298,7 @@ where
295
298
event_queue : Arc < EventQueue < L > > ,
296
299
wallet : Arc < Wallet > ,
297
300
channel_manager : Arc < ChannelManager > ,
301
+ peer_manager : Arc < PeerManager > ,
298
302
output_sweeper : Arc < Sweeper > ,
299
303
network_graph : Arc < NetworkGraph > ,
300
304
payment_store : Arc < PaymentStore < L > > ,
@@ -310,14 +314,16 @@ where
310
314
{
311
315
pub fn new (
312
316
event_queue : Arc < EventQueue < L > > , wallet : Arc < Wallet > , channel_manager : Arc < ChannelManager > ,
313
- output_sweeper : Arc < Sweeper > , network_graph : Arc < NetworkGraph > ,
314
- payment_store : Arc < PaymentStore < L > > , peer_store : Arc < PeerStore < L > > ,
315
- runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > , logger : L , config : Arc < Config > ,
317
+ peer_manager : Arc < PeerManager > , output_sweeper : Arc < Sweeper > ,
318
+ network_graph : Arc < NetworkGraph > , payment_store : Arc < PaymentStore < L > > ,
319
+ peer_store : Arc < PeerStore < L > > , runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
320
+ logger : L , config : Arc < Config > ,
316
321
) -> Self {
317
322
Self {
318
323
event_queue,
319
324
wallet,
320
325
channel_manager,
326
+ peer_manager,
321
327
output_sweeper,
322
328
network_graph,
323
329
payment_store,
@@ -872,7 +878,41 @@ where
872
878
LdkEvent :: HTLCIntercepted { .. } => { } ,
873
879
LdkEvent :: BumpTransaction ( _) => { } ,
874
880
LdkEvent :: InvoiceRequestFailed { .. } => { } ,
875
- LdkEvent :: ConnectionNeeded { .. } => { } ,
881
+ LdkEvent :: ConnectionNeeded { node_id, addresses } => {
882
+ let runtime_lock = self . runtime . read ( ) . unwrap ( ) ;
883
+ debug_assert ! ( runtime_lock. is_some( ) ) ;
884
+
885
+ if let Some ( runtime) = runtime_lock. as_ref ( ) {
886
+ let spawn_logger = self . logger . clone ( ) ;
887
+ let spawn_pm = Arc :: clone ( & self . peer_manager ) ;
888
+ let addresses = addresses. clone ( ) ;
889
+ runtime. spawn ( async move {
890
+ for addr in & addresses {
891
+ match connect_peer_if_necessary (
892
+ node_id,
893
+ addr. clone ( ) ,
894
+ Arc :: clone ( & spawn_pm) ,
895
+ spawn_logger. clone ( ) ,
896
+ )
897
+ . await
898
+ {
899
+ Ok ( ( ) ) => {
900
+ return ;
901
+ } ,
902
+ Err ( e) => {
903
+ log_error ! (
904
+ spawn_logger,
905
+ "Failed to establish connection to peer {}@{}: {}" ,
906
+ node_id,
907
+ addr,
908
+ e
909
+ ) ;
910
+ } ,
911
+ }
912
+ }
913
+ } ) ;
914
+ }
915
+ } ,
876
916
}
877
917
}
878
918
}
0 commit comments