Skip to content

Commit 5c95d6e

Browse files
committed
Make RoutingMessageHandler a generic Deref instead of an Arc
We also update to use single idents when referencing the Deref=* types since the automated code generator is pretty braindead.
1 parent 286e83f commit 5c95d6e

File tree

4 files changed

+159
-185
lines changed

4 files changed

+159
-185
lines changed

fuzz/src/full_stack.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,18 @@ impl<'a> std::hash::Hash for Peer<'a> {
134134
}
135135
}
136136

137+
type ChannelMan = ChannelManager<
138+
EnforcingChannelKeys,
139+
Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<ChainWatchInterfaceUtil>>>,
140+
Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>;
141+
type PeerMan = PeerManager<Peer<'a>, Arc<ChanMan>,
142+
Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>>, Arc<NetGraphMsgHandler>, Arc<dyn Logger>>;
143+
137144
struct MoneyLossDetector<'a> {
138-
manager: Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<ChainWatchInterfaceUtil>>>, Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>>,
139-
monitor: Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<ChainWatchInterfaceUtil>>>,
140-
handler: PeerManager<Peer<'a>, Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<ChainWatchInterfaceUtil>>>, Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>>, Arc<dyn Logger>>,
145+
manager: Arc<ChannelMan>,
146+
monitor: Arc<channelmonitor::SimpleManyChannelMonitor<
147+
OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<ChainWatchInterfaceUtil>>>,
148+
handler: PeerMan,
141149

142150
peers: &'a RefCell<[bool; 256]>,
143151
funding_txn: Vec<Transaction>,
@@ -149,9 +157,9 @@ struct MoneyLossDetector<'a> {
149157
}
150158
impl<'a> MoneyLossDetector<'a> {
151159
pub fn new(peers: &'a RefCell<[bool; 256]>,
152-
manager: Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<ChainWatchInterfaceUtil>>>, Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>>,
160+
manager: CannelMan,
153161
monitor: Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<ChainWatchInterfaceUtil>>>,
154-
handler: PeerManager<Peer<'a>, Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<ChainWatchInterfaceUtil>>>, Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>>, Arc<dyn Logger>>) -> Self {
162+
handler: PeerMan) -> Self {
155163
MoneyLossDetector {
156164
manager,
157165
monitor,

lightning-net-tokio/src/lib.rs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
//! type ChainWatchInterface = dyn lightning::chain::chaininterface::ChainWatchInterface;
2929
//! type ChannelMonitor = lightning::ln::channelmonitor::SimpleManyChannelMonitor<lightning::chain::transaction::OutPoint, lightning::chain::keysinterface::InMemoryChannelKeys, Arc<TxBroadcaster>, Arc<FeeEstimator>, Arc<Logger>, Arc<ChainWatchInterface>>;
3030
//! type ChannelManager = lightning::ln::channelmanager::SimpleArcChannelManager<ChannelMonitor, TxBroadcaster, FeeEstimator, Logger>;
31-
//! type PeerManager = lightning::ln::peer_handler::SimpleArcPeerManager<lightning_net_tokio::SocketDescriptor, ChannelMonitor, TxBroadcaster, FeeEstimator, Logger>;
31+
//! type PeerManager = lightning::ln::peer_handler::SimpleArcPeerManager<lightning_net_tokio::SocketDescriptor, ChannelMonitor, TxBroadcaster, FeeEstimator, ChainWatchInterface, Logger>;
3232
//!
3333
//! // Connect to node with pubkey their_node_id at addr:
3434
//! async fn connect_to_node(peer_manager: PeerManager, channel_monitor: Arc<ChannelMonitor>, channel_manager: ChannelManager, their_node_id: PublicKey, addr: SocketAddr) {
@@ -70,7 +70,7 @@ use tokio::io::{AsyncReadExt, AsyncWrite, AsyncWriteExt};
7070

7171
use lightning::ln::peer_handler;
7272
use lightning::ln::peer_handler::SocketDescriptor as LnSocketTrait;
73-
use lightning::ln::msgs::ChannelMessageHandler;
73+
use lightning::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler};
7474
use lightning::util::logger::Logger;
7575

7676
use std::{task, thread};
@@ -124,7 +124,10 @@ impl Connection {
124124
_ => panic!()
125125
}
126126
}
127-
async fn schedule_read<CMH: ChannelMessageHandler + 'static, L: Logger + 'static + ?Sized>(peer_manager: Arc<peer_handler::PeerManager<SocketDescriptor, Arc<CMH>, Arc<L>>>, us: Arc<Mutex<Self>>, mut reader: io::ReadHalf<TcpStream>, mut read_wake_receiver: mpsc::Receiver<()>, mut write_avail_receiver: mpsc::Receiver<()>) {
127+
async fn schedule_read<CMH, RMH, L>(peer_manager: Arc<peer_handler::PeerManager<SocketDescriptor, Arc<CMH>, Arc<RMH>, Arc<L>>>, us: Arc<Mutex<Self>>, mut reader: io::ReadHalf<TcpStream>, mut read_wake_receiver: mpsc::Receiver<()>, mut write_avail_receiver: mpsc::Receiver<()>) where
128+
CMH: ChannelMessageHandler + 'static,
129+
RMH: RoutingMessageHandler + 'static,
130+
L: Logger + 'static + ?Sized {
128131
let peer_manager_ref = peer_manager.clone();
129132
// 8KB is nice and big but also should never cause any issues with stack overflowing.
130133
let mut buf = [0; 8192];
@@ -234,7 +237,10 @@ impl Connection {
234237
/// not need to poll the provided future in order to make progress.
235238
///
236239
/// See the module-level documentation for how to handle the event_notify mpsc::Sender.
237-
pub fn setup_inbound<CMH: ChannelMessageHandler + 'static, L: Logger + 'static + ?Sized>(peer_manager: Arc<peer_handler::PeerManager<SocketDescriptor, Arc<CMH>, Arc<L>>>, event_notify: mpsc::Sender<()>, stream: TcpStream) -> impl std::future::Future<Output=()> {
240+
pub fn setup_inbound<CMH, RMH, L>(peer_manager: Arc<peer_handler::PeerManager<SocketDescriptor, Arc<CMH>, Arc<RMH>, Arc<L>>>, event_notify: mpsc::Sender<()>, stream: TcpStream) -> impl std::future::Future<Output=()> where
241+
CMH: ChannelMessageHandler + 'static,
242+
RMH: RoutingMessageHandler + 'static,
243+
L: Logger + 'static + ?Sized {
238244
let (reader, write_receiver, read_receiver, us) = Connection::new(event_notify, stream);
239245
#[cfg(debug_assertions)]
240246
let last_us = Arc::clone(&us);
@@ -273,7 +279,10 @@ pub fn setup_inbound<CMH: ChannelMessageHandler + 'static, L: Logger + 'static +
273279
/// not need to poll the provided future in order to make progress.
274280
///
275281
/// See the module-level documentation for how to handle the event_notify mpsc::Sender.
276-
pub fn setup_outbound<CMH: ChannelMessageHandler + 'static, L: Logger + 'static + ?Sized>(peer_manager: Arc<peer_handler::PeerManager<SocketDescriptor, Arc<CMH>, Arc<L>>>, event_notify: mpsc::Sender<()>, their_node_id: PublicKey, stream: TcpStream) -> impl std::future::Future<Output=()> {
282+
pub fn setup_outbound<CMH, RMH, L>(peer_manager: Arc<peer_handler::PeerManager<SocketDescriptor, Arc<CMH>, Arc<RMH>, Arc<L>>>, event_notify: mpsc::Sender<()>, their_node_id: PublicKey, stream: TcpStream) -> impl std::future::Future<Output=()> where
283+
CMH: ChannelMessageHandler + 'static,
284+
RMH: RoutingMessageHandler + 'static,
285+
L: Logger + 'static + ?Sized {
277286
let (reader, mut write_receiver, read_receiver, us) = Connection::new(event_notify, stream);
278287
#[cfg(debug_assertions)]
279288
let last_us = Arc::clone(&us);
@@ -342,7 +351,10 @@ pub fn setup_outbound<CMH: ChannelMessageHandler + 'static, L: Logger + 'static
342351
/// make progress.
343352
///
344353
/// See the module-level documentation for how to handle the event_notify mpsc::Sender.
345-
pub async fn connect_outbound<CMH: ChannelMessageHandler + 'static, L: Logger + 'static + ?Sized>(peer_manager: Arc<peer_handler::PeerManager<SocketDescriptor, Arc<CMH>, Arc<L>>>, event_notify: mpsc::Sender<()>, their_node_id: PublicKey, addr: SocketAddr) -> Option<impl std::future::Future<Output=()>> {
354+
pub async fn connect_outbound<CMH, RMH, L>(peer_manager: Arc<peer_handler::PeerManager<SocketDescriptor, Arc<CMH>, Arc<RMH>, Arc<L>>>, event_notify: mpsc::Sender<()>, their_node_id: PublicKey, addr: SocketAddr) -> Option<impl std::future::Future<Output=()>> where
355+
CMH: ChannelMessageHandler + 'static,
356+
RMH: RoutingMessageHandler + 'static,
357+
L: Logger + 'static + ?Sized {
346358
if let Ok(Ok(stream)) = time::timeout(Duration::from_secs(10), TcpStream::connect(&addr)).await {
347359
Some(setup_outbound(peer_manager, event_notify, their_node_id, stream))
348360
} else { None }
@@ -568,7 +580,7 @@ mod tests {
568580
});
569581
let a_manager = Arc::new(PeerManager::new(MessageHandler {
570582
chan_handler: Arc::clone(&a_handler),
571-
route_handler: Arc::clone(&a_handler) as Arc<dyn RoutingMessageHandler>,
583+
route_handler: Arc::clone(&a_handler),
572584
}, a_key.clone(), &[1; 32], Arc::new(TestLogger())));
573585

574586
let (b_connected_sender, mut b_connected) = mpsc::channel(1);
@@ -581,7 +593,7 @@ mod tests {
581593
});
582594
let b_manager = Arc::new(PeerManager::new(MessageHandler {
583595
chan_handler: Arc::clone(&b_handler),
584-
route_handler: Arc::clone(&b_handler) as Arc<dyn RoutingMessageHandler>,
596+
route_handler: Arc::clone(&b_handler),
585597
}, b_key.clone(), &[2; 32], Arc::new(TestLogger())));
586598

587599
// We bind on localhost, hoping the environment is properly configured with a local

0 commit comments

Comments
 (0)