1- use crate :: types:: { DynStore , Sweeper , Wallet } ;
1+ use crate :: types:: { DynStore , PeerManager , Sweeper , Wallet } ;
2+
23use crate :: {
34 hex_utils, ChannelManager , Config , Error , NetworkGraph , PeerInfo , PeerStore , UserChannelId ,
45} ;
56
7+ use crate :: connection:: connect_peer_if_necessary;
8+
69use crate :: payment_store:: {
710 PaymentDetails , PaymentDetailsUpdate , PaymentDirection , PaymentStatus , PaymentStore ,
811} ;
@@ -295,6 +298,7 @@ where
295298 event_queue : Arc < EventQueue < L > > ,
296299 wallet : Arc < Wallet > ,
297300 channel_manager : Arc < ChannelManager > ,
301+ peer_manager : Arc < PeerManager > ,
298302 output_sweeper : Arc < Sweeper > ,
299303 network_graph : Arc < NetworkGraph > ,
300304 payment_store : Arc < PaymentStore < L > > ,
@@ -310,14 +314,16 @@ where
310314{
311315 pub fn new (
312316 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 > ,
316321 ) -> Self {
317322 Self {
318323 event_queue,
319324 wallet,
320325 channel_manager,
326+ peer_manager,
321327 output_sweeper,
322328 network_graph,
323329 payment_store,
@@ -872,7 +878,41 @@ where
872878 LdkEvent :: HTLCIntercepted { .. } => { } ,
873879 LdkEvent :: BumpTransaction ( _) => { } ,
874880 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+ } ,
876916 }
877917 }
878918}
0 commit comments