@@ -51,6 +51,7 @@ use std::fs;
5151use std:: fs:: File ;
5252use std:: io;
5353use std:: io:: Write ;
54+ use std:: net:: ToSocketAddrs ;
5455use std:: path:: Path ;
5556use std:: sync:: atomic:: { AtomicBool , Ordering } ;
5657use std:: sync:: { Arc , Mutex , RwLock } ;
@@ -172,11 +173,11 @@ pub(crate) type BumpTxEventHandler = BumpTransactionEventHandler<
172173> ;
173174
174175async fn handle_ldk_events (
175- channel_manager : & Arc < ChannelManager > , bitcoind_client : & BitcoindClient ,
176+ channel_manager : Arc < ChannelManager > , bitcoind_client : & BitcoindClient ,
176177 network_graph : & NetworkGraph , keys_manager : & KeysManager ,
177- bump_tx_event_handler : & BumpTxEventHandler ,
178+ bump_tx_event_handler : & BumpTxEventHandler , peer_manager : Arc < PeerManager > ,
178179 inbound_payments : Arc < Mutex < InboundPaymentInfoStorage > > ,
179- outbound_payments : Arc < Mutex < OutboundPaymentInfoStorage > > , fs_store : & Arc < FilesystemStore > ,
180+ outbound_payments : Arc < Mutex < OutboundPaymentInfoStorage > > , fs_store : Arc < FilesystemStore > ,
180181 network : Network , event : Event ,
181182) {
182183 match event {
@@ -512,7 +513,20 @@ async fn handle_ldk_events(
512513 }
513514 Event :: HTLCIntercepted { .. } => { }
514515 Event :: BumpTransaction ( event) => bump_tx_event_handler. handle_event ( & event) ,
515- Event :: ConnectionNeeded { .. } => { }
516+ Event :: ConnectionNeeded { node_id, addresses } => {
517+ tokio:: spawn ( async move {
518+ for address in addresses {
519+ if let Ok ( sockaddrs) = address. to_socket_addrs ( ) {
520+ for addr in sockaddrs {
521+ let pm = Arc :: clone ( & peer_manager) ;
522+ if cli:: connect_peer_if_necessary ( node_id, addr, pm) . await . is_ok ( ) {
523+ return ;
524+ }
525+ }
526+ }
527+ }
528+ } ) ;
529+ }
516530 }
517531}
518532
@@ -886,6 +900,7 @@ async fn start_ldk() {
886900 let inbound_payments_event_listener = Arc :: clone ( & inbound_payments) ;
887901 let outbound_payments_event_listener = Arc :: clone ( & outbound_payments) ;
888902 let fs_store_event_listener = Arc :: clone ( & fs_store) ;
903+ let peer_manager_event_listener = Arc :: clone ( & peer_manager) ;
889904 let network = args. network ;
890905 let event_handler = move |event : Event | {
891906 let channel_manager_event_listener = Arc :: clone ( & channel_manager_event_listener) ;
@@ -896,16 +911,18 @@ async fn start_ldk() {
896911 let inbound_payments_event_listener = Arc :: clone ( & inbound_payments_event_listener) ;
897912 let outbound_payments_event_listener = Arc :: clone ( & outbound_payments_event_listener) ;
898913 let fs_store_event_listener = Arc :: clone ( & fs_store_event_listener) ;
914+ let peer_manager_event_listener = Arc :: clone ( & peer_manager_event_listener) ;
899915 async move {
900916 handle_ldk_events (
901- & channel_manager_event_listener,
917+ channel_manager_event_listener,
902918 & bitcoind_client_event_listener,
903919 & network_graph_event_listener,
904920 & keys_manager_event_listener,
905921 & bump_tx_event_handler,
922+ peer_manager_event_listener,
906923 inbound_payments_event_listener,
907924 outbound_payments_event_listener,
908- & fs_store_event_listener,
925+ fs_store_event_listener,
909926 network,
910927 event,
911928 )
0 commit comments