11use crate :: types:: { DynStore , Sweeper , Wallet } ;
2+
23use crate :: {
34 hex_utils, ChannelManager , Config , Error , NetworkGraph , PeerInfo , PeerStore , UserChannelId ,
45} ;
56
7+ use crate :: connection:: ConnectionManager ;
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+ connection_manager : Arc < ConnectionManager < L > > ,
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+ 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 > ,
316321 ) -> Self {
317322 Self {
318323 event_queue,
319324 wallet,
320325 channel_manager,
326+ connection_manager,
321327 output_sweeper,
322328 network_graph,
323329 payment_store,
@@ -872,7 +878,34 @@ 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_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+ } ,
876909 }
877910 }
878911}
0 commit comments