1
1
use crate :: types:: { DynStore , 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:: ConnectionManager ;
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
+ connection_manager : Arc < ConnectionManager < L > > ,
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
+ connection_manager : Arc < ConnectionManager < L > > , 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
+ connection_manager,
321
327
output_sweeper,
322
328
network_graph,
323
329
payment_store,
@@ -872,7 +878,34 @@ 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_cm = Arc :: clone ( & self . connection_manager ) ;
888
+ let addresses = addresses. clone ( ) ;
889
+ runtime. spawn ( async move {
890
+ for addr in & addresses {
891
+ match spawn_cm. connect_peer_if_necessary ( node_id, addr. clone ( ) ) . await {
892
+ Ok ( ( ) ) => {
893
+ return ;
894
+ } ,
895
+ Err ( e) => {
896
+ log_error ! (
897
+ spawn_logger,
898
+ "Failed to establish connection to peer {}@{}: {}" ,
899
+ node_id,
900
+ addr,
901
+ e
902
+ ) ;
903
+ } ,
904
+ }
905
+ }
906
+ } ) ;
907
+ }
908
+ } ,
876
909
}
877
910
}
878
911
}
0 commit comments