Skip to content

Commit 994021c

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 1a55615 commit 994021c

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
};
@@ -295,6 +298,7 @@ where
295298
event_queue: Arc<EventQueue<L>>,
296299
wallet: Arc<Wallet>,
297300
channel_manager: Arc<ChannelManager>,
301+
peer_manager: Arc<PeerManager>,
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+
peer_manager: Arc<PeerManager>, 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+
peer_manager,
321327
output_sweeper,
322328
network_graph,
323329
payment_store,
@@ -872,7 +878,41 @@ 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_pm = Arc::clone(&self.peer_manager);
888+
let addresses = addresses.clone();
889+
runtime.spawn(async move {
890+
for addr in &addresses {
891+
match connect_peer_if_necessary(
892+
node_id,
893+
addr.clone(),
894+
Arc::clone(&spawn_pm),
895+
spawn_logger.clone(),
896+
)
897+
.await
898+
{
899+
Ok(()) => {
900+
return;
901+
},
902+
Err(e) => {
903+
log_error!(
904+
spawn_logger,
905+
"Failed to establish connection to peer {}@{}: {}",
906+
node_id,
907+
addr,
908+
e
909+
);
910+
},
911+
}
912+
}
913+
});
914+
}
915+
},
876916
}
877917
}
878918
}

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.peer_manager),
589590
Arc::clone(&self.output_sweeper),
590591
Arc::clone(&self.network_graph),
591592
Arc::clone(&self.payment_store),

0 commit comments

Comments
 (0)