Skip to content

Commit 3fa4fa3

Browse files
committed
Move the CustomMessageHandler into the MessageHandler struct
`PeerManager` takes a `MessageHandler` struct which contains all the known message handlers for it to pass messages to. It then, separately, takes a `CustomMessageHandler`. This makes no sense, we should simply include the `CustomMessageHandler` in the `MessageHandler` struct for consistency.
1 parent 0e8da58 commit 3fa4fa3

File tree

3 files changed

+39
-22
lines changed

3 files changed

+39
-22
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1140,8 +1140,12 @@ mod tests {
11401140
let manager = Arc::new(ChannelManager::new(fee_estimator.clone(), chain_monitor.clone(), tx_broadcaster.clone(), router.clone(), logger.clone(), keys_manager.clone(), keys_manager.clone(), keys_manager.clone(), UserConfig::default(), params));
11411141
let p2p_gossip_sync = Arc::new(P2PGossipSync::new(network_graph.clone(), Some(chain_source.clone()), logger.clone()));
11421142
let rapid_gossip_sync = Arc::new(RapidGossipSync::new(network_graph.clone(), logger.clone()));
1143-
let msg_handler = MessageHandler { chan_handler: Arc::new(test_utils::TestChannelMessageHandler::new()), route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new()), onion_message_handler: IgnoringMessageHandler{}};
1144-
let peer_manager = Arc::new(PeerManager::new(msg_handler, 0, &seed, logger.clone(), IgnoringMessageHandler{}, keys_manager.clone()));
1143+
let msg_handler = MessageHandler {
1144+
chan_handler: Arc::new(test_utils::TestChannelMessageHandler::new()),
1145+
route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new()),
1146+
onion_message_handler: IgnoringMessageHandler{}, custom_message_handler: IgnoringMessageHandler{}
1147+
};
1148+
let peer_manager = Arc::new(PeerManager::new(msg_handler, 0, &seed, logger.clone(), keys_manager.clone()));
11451149
let node = Node { node: manager, p2p_gossip_sync, rapid_gossip_sync, peer_manager, chain_monitor, persister, tx_broadcaster, network_graph, logger, best_block, scorer };
11461150
nodes.push(node);
11471151
}

lightning-net-tokio/src/lib.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,8 @@ mod tests {
659659
chan_handler: Arc::clone(&a_handler),
660660
route_handler: Arc::clone(&a_handler),
661661
onion_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
662-
}, 0, &[1; 32], Arc::new(TestLogger()), Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}), Arc::new(TestNodeSigner::new(a_key))));
662+
custom_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
663+
}, 0, &[1; 32], Arc::new(TestLogger()), Arc::new(TestNodeSigner::new(a_key))));
663664

664665
let (b_connected_sender, mut b_connected) = mpsc::channel(1);
665666
let (b_disconnected_sender, mut b_disconnected) = mpsc::channel(1);
@@ -674,7 +675,8 @@ mod tests {
674675
chan_handler: Arc::clone(&b_handler),
675676
route_handler: Arc::clone(&b_handler),
676677
onion_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
677-
}, 0, &[2; 32], Arc::new(TestLogger()), Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}), Arc::new(TestNodeSigner::new(b_key))));
678+
custom_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
679+
}, 0, &[2; 32], Arc::new(TestLogger()), Arc::new(TestNodeSigner::new(b_key))));
678680

679681
// We bind on localhost, hoping the environment is properly configured with a local
680682
// address. This may not always be the case in containers and the like, so if this test is
@@ -727,7 +729,8 @@ mod tests {
727729
chan_handler: Arc::new(lightning::ln::peer_handler::ErroringMessageHandler::new()),
728730
onion_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
729731
route_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
730-
}, 0, &[1; 32], Arc::new(TestLogger()), Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}), Arc::new(TestNodeSigner::new(a_key))));
732+
custom_message_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler{}),
733+
}, 0, &[1; 32], Arc::new(TestLogger()), Arc::new(TestNodeSigner::new(a_key))));
731734

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

lightning/src/ln/peer_handler.rs

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -259,10 +259,11 @@ impl Deref for ErroringMessageHandler {
259259
}
260260

261261
/// Provides references to trait impls which handle different types of messages.
262-
pub struct MessageHandler<CM: Deref, RM: Deref, OM: Deref> where
263-
CM::Target: ChannelMessageHandler,
264-
RM::Target: RoutingMessageHandler,
265-
OM::Target: OnionMessageHandler,
262+
pub struct MessageHandler<CM: Deref, RM: Deref, OM: Deref, CustomM: Deref> where
263+
CM::Target: ChannelMessageHandler,
264+
RM::Target: RoutingMessageHandler,
265+
OM::Target: OnionMessageHandler,
266+
CustomM::Target: CustomMessageHandler,
266267
{
267268
/// A message handler which handles messages specific to channels. Usually this is just a
268269
/// [`ChannelManager`] object or an [`ErroringMessageHandler`].
@@ -275,9 +276,15 @@ pub struct MessageHandler<CM: Deref, RM: Deref, OM: Deref> where
275276
/// [`P2PGossipSync`]: crate::routing::gossip::P2PGossipSync
276277
pub route_handler: RM,
277278

278-
/// A message handler which handles onion messages. For now, this can only be an
279-
/// [`IgnoringMessageHandler`].
279+
/// A message handler which handles onion messages. This should generally be an
280+
/// [`OnionMessenger`], but can also be an [`IgnoringMessageHandler`].
281+
///
282+
/// [`OnionMessenger`]: crate::onion_message::OnionMessenger
280283
pub onion_message_handler: OM,
284+
285+
/// A message handler which handles custom messages. The only LDK-provided implementation is
286+
/// [`IgnoringMessageHandler`].
287+
pub custom_message_handler: CustomM,
281288
}
282289

283290
/// Provides an object which can be used to send data to and which uniquely identifies a connection
@@ -561,7 +568,7 @@ pub struct PeerManager<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: D
561568
L::Target: Logger,
562569
CMH::Target: CustomMessageHandler,
563570
NS::Target: NodeSigner {
564-
message_handler: MessageHandler<CM, RM, OM>,
571+
message_handler: MessageHandler<CM, RM, OM, CMH>,
565572
/// Connection state for each connected peer - we have an outer read-write lock which is taken
566573
/// as read while we're doing processing for a peer and taken write when a peer is being added
567574
/// or removed.
@@ -591,7 +598,6 @@ pub struct PeerManager<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: D
591598
last_node_announcement_serial: AtomicU32,
592599

593600
ephemeral_key_midstate: Sha256Engine,
594-
custom_message_handler: CMH,
595601

596602
peer_counter: AtomicCounter,
597603

@@ -652,7 +658,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, OM: Deref, L: Deref, NS: Deref> Pe
652658
chan_handler: channel_message_handler,
653659
route_handler: IgnoringMessageHandler{},
654660
onion_message_handler,
655-
}, current_time, ephemeral_random_data, logger, IgnoringMessageHandler{}, node_signer)
661+
custom_message_handler: IgnoringMessageHandler{},
662+
}, current_time, ephemeral_random_data, logger, node_signer)
656663
}
657664
}
658665

@@ -679,7 +686,8 @@ impl<Descriptor: SocketDescriptor, RM: Deref, L: Deref, NS: Deref> PeerManager<D
679686
chan_handler: ErroringMessageHandler::new(),
680687
route_handler: routing_message_handler,
681688
onion_message_handler: IgnoringMessageHandler{},
682-
}, current_time, ephemeral_random_data, logger, IgnoringMessageHandler{}, node_signer)
689+
custom_message_handler: IgnoringMessageHandler{},
690+
}, current_time, ephemeral_random_data, logger, node_signer)
683691
}
684692
}
685693

@@ -741,7 +749,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
741749
/// incremented irregularly internally. In general it is best to simply use the current UNIX
742750
/// timestamp, however if it is not available a persistent counter that increases once per
743751
/// minute should suffice.
744-
pub fn new(message_handler: MessageHandler<CM, RM, OM>, current_time: u32, ephemeral_random_data: &[u8; 32], logger: L, custom_message_handler: CMH, node_signer: NS) -> Self {
752+
pub fn new(message_handler: MessageHandler<CM, RM, OM, CMH>, current_time: u32, ephemeral_random_data: &[u8; 32], logger: L, node_signer: NS) -> Self {
745753
let mut ephemeral_key_midstate = Sha256::engine();
746754
ephemeral_key_midstate.input(ephemeral_random_data);
747755

@@ -761,7 +769,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
761769
gossip_processing_backlog_lifted: AtomicBool::new(false),
762770
last_node_announcement_serial: AtomicU32::new(current_time),
763771
logger,
764-
custom_message_handler,
765772
node_signer,
766773
secp_ctx,
767774
}
@@ -1232,7 +1239,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
12321239
peer.pending_read_is_header = true;
12331240

12341241
let mut reader = io::Cursor::new(&msg_data[..]);
1235-
let message_result = wire::read(&mut reader, &*self.custom_message_handler);
1242+
let message_result = wire::read(&mut reader, &*self.message_handler.custom_message_handler);
12361243
let message = match message_result {
12371244
Ok(x) => x,
12381245
Err(e) => {
@@ -1543,7 +1550,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
15431550
log_trace!(self.logger, "Received unknown odd message of type {}, ignoring", type_id);
15441551
},
15451552
wire::Message::Custom(custom) => {
1546-
self.custom_message_handler.handle_custom_message(custom, &their_node_id)?;
1553+
self.message_handler.custom_message_handler.handle_custom_message(custom, &their_node_id)?;
15471554
},
15481555
};
15491556
Ok(should_forward)
@@ -1896,7 +1903,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
18961903
}
18971904
}
18981905

1899-
for (node_id, msg) in self.custom_message_handler.get_and_clear_pending_msg() {
1906+
for (node_id, msg) in self.message_handler.custom_message_handler.get_and_clear_pending_msg() {
19001907
if peers_to_disconnect.get(&node_id).is_some() { continue; }
19011908
self.enqueue_message(&mut *get_peer_for_forwarding!(&node_id), &msg);
19021909
}
@@ -2264,8 +2271,11 @@ mod tests {
22642271
let mut peers = Vec::new();
22652272
for i in 0..peer_count {
22662273
let ephemeral_bytes = [i as u8; 32];
2267-
let msg_handler = MessageHandler { chan_handler: &cfgs[i].chan_handler, route_handler: &cfgs[i].routing_handler, onion_message_handler: IgnoringMessageHandler {} };
2268-
let peer = PeerManager::new(msg_handler, 0, &ephemeral_bytes, &cfgs[i].logger, IgnoringMessageHandler {}, &cfgs[i].node_signer);
2274+
let msg_handler = MessageHandler {
2275+
chan_handler: &cfgs[i].chan_handler, route_handler: &cfgs[i].routing_handler,
2276+
onion_message_handler: IgnoringMessageHandler {}, custom_message_handler: IgnoringMessageHandler {}
2277+
};
2278+
let peer = PeerManager::new(msg_handler, 0, &ephemeral_bytes, &cfgs[i].logger, &cfgs[i].node_signer);
22692279
peers.push(peer);
22702280
}
22712281

0 commit comments

Comments
 (0)