diff --git a/src/event.rs b/src/event.rs index de294f822..a307b96ef 100644 --- a/src/event.rs +++ b/src/event.rs @@ -1,8 +1,11 @@ -use crate::types::{DynStore, Sweeper, Wallet}; +use crate::types::{DynStore, PeerManager, Sweeper, Wallet}; + use crate::{ hex_utils, ChannelManager, Config, Error, NetworkGraph, PeerInfo, PeerStore, UserChannelId, }; +use crate::connection::connect_peer_if_necessary; + use crate::payment_store::{ PaymentDetails, PaymentDetailsUpdate, PaymentDirection, PaymentStatus, PaymentStore, }; @@ -287,6 +290,7 @@ where event_queue: Arc>, wallet: Arc, channel_manager: Arc, + peer_manager: Arc, output_sweeper: Arc, network_graph: Arc, payment_store: Arc>, @@ -302,14 +306,16 @@ where { pub fn new( event_queue: Arc>, wallet: Arc, channel_manager: Arc, - output_sweeper: Arc, network_graph: Arc, - payment_store: Arc>, peer_store: Arc>, - runtime: Arc>>, logger: L, config: Arc, + peer_manager: Arc, output_sweeper: Arc, + network_graph: Arc, payment_store: Arc>, + peer_store: Arc>, runtime: Arc>>, + logger: L, config: Arc, ) -> Self { Self { event_queue, wallet, channel_manager, + peer_manager, output_sweeper, network_graph, payment_store, @@ -862,7 +868,41 @@ where LdkEvent::HTLCIntercepted { .. } => {} LdkEvent::BumpTransaction(_) => {} LdkEvent::InvoiceRequestFailed { .. } => {} - LdkEvent::ConnectionNeeded { .. } => {} + LdkEvent::ConnectionNeeded { node_id, addresses } => { + let runtime_lock = self.runtime.read().unwrap(); + debug_assert!(runtime_lock.is_some()); + + if let Some(runtime) = runtime_lock.as_ref() { + let spawn_logger = self.logger.clone(); + let spawn_pm = Arc::clone(&self.peer_manager); + let addresses = addresses.clone(); + runtime.spawn(async move { + for addr in &addresses { + match connect_peer_if_necessary( + node_id, + addr.clone(), + Arc::clone(&spawn_pm), + spawn_logger.clone(), + ) + .await + { + Ok(()) => { + return; + } + Err(e) => { + log_error!( + spawn_logger, + "Failed to establish connection to peer {}@{}: {}", + node_id, + addr, + e + ); + } + } + } + }); + } + } } } } diff --git a/src/lib.rs b/src/lib.rs index 6f7fadef4..2e0803b19 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -713,6 +713,7 @@ impl Node { Arc::clone(&self.event_queue), Arc::clone(&self.wallet), Arc::clone(&self.channel_manager), + Arc::clone(&self.peer_manager), Arc::clone(&self.output_sweeper), Arc::clone(&self.network_graph), Arc::clone(&self.payment_store),