X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fln%2Fpeer_handler.rs;h=38850b730cf6a18bd4f898f3b2c371e4d740b677;hb=524981ddf4bae0da695bb40c650812dceeb4d408;hp=040ccc655f4b93187ea52eefce46ecbe166aa8d9;hpb=0e8da588954abc32c2a341cedf888ee00f918183;p=rust-lightning diff --git a/lightning/src/ln/peer_handler.rs b/lightning/src/ln/peer_handler.rs index 040ccc655..38850b730 100644 --- a/lightning/src/ln/peer_handler.rs +++ b/lightning/src/ln/peer_handler.rs @@ -259,10 +259,11 @@ impl Deref for ErroringMessageHandler { } /// Provides references to trait impls which handle different types of messages. -pub struct MessageHandler where - CM::Target: ChannelMessageHandler, - RM::Target: RoutingMessageHandler, - OM::Target: OnionMessageHandler, +pub struct MessageHandler where + CM::Target: ChannelMessageHandler, + RM::Target: RoutingMessageHandler, + OM::Target: OnionMessageHandler, + CustomM::Target: CustomMessageHandler, { /// A message handler which handles messages specific to channels. Usually this is just a /// [`ChannelManager`] object or an [`ErroringMessageHandler`]. @@ -275,9 +276,15 @@ pub struct MessageHandler where /// [`P2PGossipSync`]: crate::routing::gossip::P2PGossipSync pub route_handler: RM, - /// A message handler which handles onion messages. For now, this can only be an - /// [`IgnoringMessageHandler`]. + /// A message handler which handles onion messages. This should generally be an + /// [`OnionMessenger`], but can also be an [`IgnoringMessageHandler`]. + /// + /// [`OnionMessenger`]: crate::onion_message::OnionMessenger pub onion_message_handler: OM, + + /// A message handler which handles custom messages. The only LDK-provided implementation is + /// [`IgnoringMessageHandler`]. + pub custom_message_handler: CustomM, } /// Provides an object which can be used to send data to and which uniquely identifies a connection @@ -561,7 +568,7 @@ pub struct PeerManager, + message_handler: MessageHandler, /// Connection state for each connected peer - we have an outer read-write lock which is taken /// as read while we're doing processing for a peer and taken write when a peer is being added /// or removed. @@ -591,7 +598,6 @@ pub struct PeerManager Pe chan_handler: channel_message_handler, route_handler: IgnoringMessageHandler{}, onion_message_handler, - }, current_time, ephemeral_random_data, logger, IgnoringMessageHandler{}, node_signer) + custom_message_handler: IgnoringMessageHandler{}, + }, current_time, ephemeral_random_data, logger, node_signer) } } @@ -679,7 +686,8 @@ impl PeerManager, current_time: u32, ephemeral_random_data: &[u8; 32], logger: L, custom_message_handler: CMH, node_signer: NS) -> Self { + pub fn new(message_handler: MessageHandler, current_time: u32, ephemeral_random_data: &[u8; 32], logger: L, node_signer: NS) -> Self { let mut ephemeral_key_midstate = Sha256::engine(); ephemeral_key_midstate.input(ephemeral_random_data); @@ -761,7 +769,6 @@ impl x, Err(e) => { @@ -1543,7 +1550,7 @@ impl { - self.custom_message_handler.handle_custom_message(custom, &their_node_id)?; + self.message_handler.custom_message_handler.handle_custom_message(custom, &their_node_id)?; }, }; Ok(should_forward) @@ -1896,7 +1903,7 @@ impl