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} ;
@@ -287,6 +290,7 @@ where
287290 event_queue : Arc < EventQueue < L > > ,
288291 wallet : Arc < Wallet > ,
289292 channel_manager : Arc < ChannelManager > ,
293+ peer_manager : Arc < PeerManager > ,
290294 output_sweeper : Arc < Sweeper > ,
291295 network_graph : Arc < NetworkGraph > ,
292296 payment_store : Arc < PaymentStore < L > > ,
@@ -302,14 +306,16 @@ where
302306{
303307 pub fn new (
304308 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 > ,
308313 ) -> Self {
309314 Self {
310315 event_queue,
311316 wallet,
312317 channel_manager,
318+ peer_manager,
313319 output_sweeper,
314320 network_graph,
315321 payment_store,
@@ -862,7 +868,41 @@ where
862868 LdkEvent :: HTLCIntercepted { .. } => { }
863869 LdkEvent :: BumpTransaction ( _) => { }
864870 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+ }
866906 }
867907 }
868908}
0 commit comments