Skip to content

Commit def0463

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 90e790d commit def0463

File tree

2 files changed

+46
-5
lines changed

2 files changed

+46
-5
lines changed

src/event.rs

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

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

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,7 @@ impl Node {
713713
Arc::clone(&self.event_queue),
714714
Arc::clone(&self.wallet),
715715
Arc::clone(&self.channel_manager),
716+
Arc::clone(&self.peer_manager),
716717
Arc::clone(&self.output_sweeper),
717718
Arc::clone(&self.network_graph),
718719
Arc::clone(&self.payment_store),

0 commit comments

Comments
 (0)