@@ -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