Skip to content

Commit 3543baa

Browse files
committed
Handle ConnectionNeeded events
We spawn a background task that will try to connect to any of the provided socket addresses and return as soon as it suceeds.
1 parent 5b56a8b commit 3543baa

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

src/event.rs

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
use crate::types::{DynStore, Sweeper, Wallet};
2+
23
use crate::{
34
hex_utils, ChannelManager, Config, Error, NetworkGraph, PeerInfo, PeerStore, UserChannelId,
45
};
56

7+
use crate::connection::ConnectionManager;
8+
69
use 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
}

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,7 @@ impl Node {
586586
Arc::clone(&self.event_queue),
587587
Arc::clone(&self.wallet),
588588
Arc::clone(&self.channel_manager),
589+
Arc::clone(&self.connection_manager),
589590
Arc::clone(&self.output_sweeper),
590591
Arc::clone(&self.network_graph),
591592
Arc::clone(&self.payment_store),

0 commit comments

Comments
 (0)