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
} ;
@@ -287,6 +290,7 @@ where
287
290
event_queue : Arc < EventQueue < L > > ,
288
291
wallet : Arc < Wallet > ,
289
292
channel_manager : Arc < ChannelManager > ,
293
+ peer_manager : Arc < PeerManager > ,
290
294
output_sweeper : Arc < Sweeper > ,
291
295
network_graph : Arc < NetworkGraph > ,
292
296
payment_store : Arc < PaymentStore < L > > ,
@@ -302,14 +306,16 @@ where
302
306
{
303
307
pub fn new (
304
308
event_queue : Arc < EventQueue < L > > , wallet : Arc < Wallet > , channel_manager : Arc < ChannelManager > ,
305
- output_sweeper : Arc < Sweeper > , network_graph : Arc < NetworkGraph > ,
306
- payment_store : Arc < PaymentStore < L > > , peer_store : Arc < PeerStore < L > > ,
307
- runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > , logger : L , config : Arc < Config > ,
309
+ peer_manager : Arc < PeerManager > , output_sweeper : Arc < Sweeper > ,
310
+ network_graph : Arc < NetworkGraph > , payment_store : Arc < PaymentStore < L > > ,
311
+ peer_store : Arc < PeerStore < L > > , runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
312
+ logger : L , config : Arc < Config > ,
308
313
) -> Self {
309
314
Self {
310
315
event_queue,
311
316
wallet,
312
317
channel_manager,
318
+ peer_manager,
313
319
output_sweeper,
314
320
network_graph,
315
321
payment_store,
@@ -862,7 +868,41 @@ where
862
868
LdkEvent :: HTLCIntercepted { .. } => { }
863
869
LdkEvent :: BumpTransaction ( _) => { }
864
870
LdkEvent :: InvoiceRequestFailed { .. } => { }
865
- LdkEvent :: ConnectionNeeded { .. } => { }
871
+ LdkEvent :: ConnectionNeeded { node_id, addresses } => {
872
+ let runtime_lock = self . runtime . read ( ) . unwrap ( ) ;
873
+ debug_assert ! ( runtime_lock. is_some( ) ) ;
874
+
875
+ if let Some ( runtime) = runtime_lock. as_ref ( ) {
876
+ let spawn_logger = self . logger . clone ( ) ;
877
+ let spawn_pm = Arc :: clone ( & self . peer_manager ) ;
878
+ let addresses = addresses. clone ( ) ;
879
+ runtime. spawn ( async move {
880
+ for addr in & addresses {
881
+ match connect_peer_if_necessary (
882
+ node_id,
883
+ addr. clone ( ) ,
884
+ Arc :: clone ( & spawn_pm) ,
885
+ spawn_logger. clone ( ) ,
886
+ )
887
+ . await
888
+ {
889
+ Ok ( ( ) ) => {
890
+ return ;
891
+ }
892
+ Err ( e) => {
893
+ log_error ! (
894
+ spawn_logger,
895
+ "Failed to establish connection to peer {}@{}: {}" ,
896
+ node_id,
897
+ addr,
898
+ e
899
+ ) ;
900
+ }
901
+ }
902
+ }
903
+ } ) ;
904
+ }
905
+ }
866
906
}
867
907
}
868
908
}
0 commit comments