Skip to content

Commit 1aa4f0b

Browse files
committed
Prepare lightning-net-tokio/src/lib.rs
1 parent 0cfe55c commit 1aa4f0b

File tree

1 file changed

+37
-24
lines changed

1 file changed

+37
-24
lines changed

lightning-net-tokio/src/lib.rs

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -268,12 +268,17 @@ impl Connection {
268268
stream.set_nonblocking(true).unwrap();
269269
let tokio_stream = Arc::new(TcpStream::from_std(stream).unwrap());
270270

271-
(Arc::clone(&tokio_stream), write_receiver, read_receiver,
272-
Arc::new(Mutex::new(Self {
273-
writer: Some(tokio_stream), write_avail, read_waker, read_paused: false,
271+
let id = ID_COUNTER.fetch_add(1, Ordering::AcqRel);
272+
let writer = Some(Arc::clone(&tokio_stream));
273+
let conn = Arc::new(Mutex::new(Self {
274+
writer,
275+
write_avail,
276+
read_waker,
277+
read_paused: false,
274278
rl_requested_disconnect: false,
275-
id: ID_COUNTER.fetch_add(1, Ordering::AcqRel)
276-
})))
279+
id
280+
}));
281+
(tokio_stream, write_receiver, read_receiver, conn)
277282
}
278283
}
279284

@@ -308,7 +313,8 @@ where PM::Target: APeerManager<Descriptor = SocketDescriptor> {
308313
let last_us = Arc::clone(&us);
309314

310315
let handle_opt = if peer_manager.as_ref().new_inbound_connection(SocketDescriptor::new(us.clone()), remote_addr).is_ok() {
311-
Some(tokio::spawn(Connection::schedule_read(peer_manager, us, reader, read_receiver, write_receiver)))
316+
let handle = tokio::spawn(Connection::schedule_read(peer_manager, us, reader, read_receiver, write_receiver));
317+
Some(handle)
312318
} else {
313319
// Note that we will skip socket_disconnected here, in accordance with the PeerManager
314320
// requirements.
@@ -350,13 +356,13 @@ where PM::Target: APeerManager<Descriptor = SocketDescriptor> {
350356
#[cfg(test)]
351357
let last_us = Arc::clone(&us);
352358
let handle_opt = if let Ok(initial_send) = peer_manager.as_ref().new_outbound_connection(their_node_id, SocketDescriptor::new(us.clone()), remote_addr) {
353-
Some(tokio::spawn(async move {
359+
let handle = tokio::spawn(async move {
354360
// We should essentially always have enough room in a TCP socket buffer to send the
355361
// initial 10s of bytes. However, tokio running in single-threaded mode will always
356362
// fail writes and wake us back up later to write. Thus, we handle a single
357363
// std::task::Poll::Pending but still expect to write the full set of bytes at once
358364
// and use a relatively tight timeout.
359-
if let Ok(Ok(())) = tokio::time::timeout(Duration::from_millis(100), async {
365+
let send_fut = async {
360366
loop {
361367
match SocketDescriptor::new(us.clone()).send_data(&initial_send, true) {
362368
v if v == initial_send.len() => break Ok(()),
@@ -373,10 +379,13 @@ where PM::Target: APeerManager<Descriptor = SocketDescriptor> {
373379
}
374380
}
375381
}
376-
}).await {
382+
};
383+
let timeout_send_fut = tokio::time::timeout(Duration::from_millis(100), send_fut);
384+
if let Ok(Ok(())) = timeout_send_fut.await {
377385
Connection::schedule_read(peer_manager, us, reader, read_receiver, write_receiver).await;
378386
}
379-
}))
387+
});
388+
Some(handle)
380389
} else {
381390
// Note that we will skip socket_disconnected here, in accordance with the PeerManager
382391
// requirements.
@@ -417,7 +426,8 @@ pub async fn connect_outbound<PM: Deref + 'static + Send + Sync + Clone>(
417426
addr: SocketAddr,
418427
) -> Option<impl std::future::Future<Output=()>>
419428
where PM::Target: APeerManager<Descriptor = SocketDescriptor> {
420-
if let Ok(Ok(stream)) = time::timeout(Duration::from_secs(10), async { TcpStream::connect(&addr).await.map(|s| s.into_std().unwrap()) }).await {
429+
let connect_fut = async { TcpStream::connect(&addr).await.map(|s| s.into_std().unwrap()) };
430+
if let Ok(Ok(stream)) = time::timeout(Duration::from_secs(10), connect_fut).await {
421431
Some(setup_outbound(peer_manager, their_node_id, stream))
422432
} else { None }
423433
}
@@ -560,7 +570,7 @@ impl Hash for SocketDescriptor {
560570
mod tests {
561571
use lightning::ln::features::*;
562572
use lightning::ln::msgs::*;
563-
use lightning::ln::peer_handler::{MessageHandler, PeerManager};
573+
use lightning::ln::peer_handler::{MessageHandler, PeerManager, IgnoringMessageHandler};
564574
use lightning::routing::gossip::NodeId;
565575
use lightning::events::*;
566576
use lightning::util::test_utils::TestNodeSigner;
@@ -699,12 +709,13 @@ mod tests {
699709
disconnected_flag: AtomicBool::new(false),
700710
msg_events: Mutex::new(Vec::new()),
701711
});
702-
let a_manager = Arc::new(PeerManager::new(MessageHandler {
712+
let a_msg_handler = MessageHandler {
703713
chan_handler: Arc::clone(&a_handler),
704714
route_handler: Arc::clone(&a_handler),
705-
onion_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
706-
custom_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
707-
}, 0, &[1; 32], Arc::new(TestLogger()), Arc::new(TestNodeSigner::new(a_key))));
715+
onion_message_handler: Arc::new(IgnoringMessageHandler{}),
716+
custom_message_handler: Arc::new(IgnoringMessageHandler{}),
717+
};
718+
let a_manager = Arc::new(PeerManager::new(a_msg_handler, 0, &[1; 32], Arc::new(TestLogger()), Arc::new(TestNodeSigner::new(a_key))));
708719

709720
let (b_connected_sender, mut b_connected) = mpsc::channel(1);
710721
let (b_disconnected_sender, mut b_disconnected) = mpsc::channel(1);
@@ -715,12 +726,13 @@ mod tests {
715726
disconnected_flag: AtomicBool::new(false),
716727
msg_events: Mutex::new(Vec::new()),
717728
});
718-
let b_manager = Arc::new(PeerManager::new(MessageHandler {
729+
let b_msg_handler = MessageHandler {
719730
chan_handler: Arc::clone(&b_handler),
720731
route_handler: Arc::clone(&b_handler),
721-
onion_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
722-
custom_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
723-
}, 0, &[2; 32], Arc::new(TestLogger()), Arc::new(TestNodeSigner::new(b_key))));
732+
onion_message_handler: Arc::new(IgnoringMessageHandler{}),
733+
custom_message_handler: Arc::new(IgnoringMessageHandler{}),
734+
};
735+
let b_manager = Arc::new(PeerManager::new(b_msg_handler, 0, &[2; 32], Arc::new(TestLogger()), Arc::new(TestNodeSigner::new(b_key))));
724736

725737
// We bind on localhost, hoping the environment is properly configured with a local
726738
// address. This may not always be the case in containers and the like, so if this test is
@@ -769,12 +781,13 @@ mod tests {
769781
let b_key = SecretKey::from_slice(&[2; 32]).unwrap();
770782
let b_pub = PublicKey::from_secret_key(&secp_ctx, &b_key);
771783

772-
let a_manager = Arc::new(PeerManager::new(MessageHandler {
784+
let a_msg_handler = MessageHandler {
773785
chan_handler: Arc::new(lightning::ln::peer_handler::ErroringMessageHandler::new()),
774-
onion_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
786+
onion_message_handler: Arc::new(IgnoringMessageHandler{}),
775787
route_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
776-
custom_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
777-
}, 0, &[1; 32], Arc::new(TestLogger()), Arc::new(TestNodeSigner::new(a_key))));
788+
custom_message_handler: Arc::new(IgnoringMessageHandler{}),
789+
};
790+
let a_manager = Arc::new(PeerManager::new(a_msg_handler, 0, &[1; 32], Arc::new(TestLogger()), Arc::new(TestNodeSigner::new(a_key))));
778791

779792
// Make two connections, one for an inbound and one for an outbound connection
780793
let conn_a = {

0 commit comments

Comments
 (0)