@@ -259,10 +259,11 @@ impl Deref for ErroringMessageHandler {
259
259
}
260
260
261
261
/// 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 ,
266
267
{
267
268
/// A message handler which handles messages specific to channels. Usually this is just a
268
269
/// [`ChannelManager`] object or an [`ErroringMessageHandler`].
@@ -275,9 +276,15 @@ pub struct MessageHandler<CM: Deref, RM: Deref, OM: Deref> where
275
276
/// [`P2PGossipSync`]: crate::routing::gossip::P2PGossipSync
276
277
pub route_handler : RM ,
277
278
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
280
283
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 ,
281
288
}
282
289
283
290
/// 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
561
568
L :: Target : Logger ,
562
569
CMH :: Target : CustomMessageHandler ,
563
570
NS :: Target : NodeSigner {
564
- message_handler : MessageHandler < CM , RM , OM > ,
571
+ message_handler : MessageHandler < CM , RM , OM , CMH > ,
565
572
/// Connection state for each connected peer - we have an outer read-write lock which is taken
566
573
/// as read while we're doing processing for a peer and taken write when a peer is being added
567
574
/// or removed.
@@ -591,7 +598,6 @@ pub struct PeerManager<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: D
591
598
last_node_announcement_serial : AtomicU32 ,
592
599
593
600
ephemeral_key_midstate : Sha256Engine ,
594
- custom_message_handler : CMH ,
595
601
596
602
peer_counter : AtomicCounter ,
597
603
@@ -652,7 +658,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, OM: Deref, L: Deref, NS: Deref> Pe
652
658
chan_handler : channel_message_handler,
653
659
route_handler : IgnoringMessageHandler { } ,
654
660
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)
656
663
}
657
664
}
658
665
@@ -679,7 +686,8 @@ impl<Descriptor: SocketDescriptor, RM: Deref, L: Deref, NS: Deref> PeerManager<D
679
686
chan_handler : ErroringMessageHandler :: new ( ) ,
680
687
route_handler : routing_message_handler,
681
688
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)
683
691
}
684
692
}
685
693
@@ -741,7 +749,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
741
749
/// incremented irregularly internally. In general it is best to simply use the current UNIX
742
750
/// timestamp, however if it is not available a persistent counter that increases once per
743
751
/// 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 {
745
753
let mut ephemeral_key_midstate = Sha256 :: engine ( ) ;
746
754
ephemeral_key_midstate. input ( ephemeral_random_data) ;
747
755
@@ -761,7 +769,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
761
769
gossip_processing_backlog_lifted : AtomicBool :: new ( false ) ,
762
770
last_node_announcement_serial : AtomicU32 :: new ( current_time) ,
763
771
logger,
764
- custom_message_handler,
765
772
node_signer,
766
773
secp_ctx,
767
774
}
@@ -1232,7 +1239,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1232
1239
peer. pending_read_is_header = true ;
1233
1240
1234
1241
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 ) ;
1236
1243
let message = match message_result {
1237
1244
Ok ( x) => x,
1238
1245
Err ( e) => {
@@ -1543,7 +1550,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1543
1550
log_trace ! ( self . logger, "Received unknown odd message of type {}, ignoring" , type_id) ;
1544
1551
} ,
1545
1552
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) ?;
1547
1554
} ,
1548
1555
} ;
1549
1556
Ok ( should_forward)
@@ -1896,7 +1903,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1896
1903
}
1897
1904
}
1898
1905
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 ( ) {
1900
1907
if peers_to_disconnect. get ( & node_id) . is_some ( ) { continue ; }
1901
1908
self . enqueue_message ( & mut * get_peer_for_forwarding ! ( & node_id) , & msg) ;
1902
1909
}
@@ -2264,8 +2271,11 @@ mod tests {
2264
2271
let mut peers = Vec :: new ( ) ;
2265
2272
for i in 0 ..peer_count {
2266
2273
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 ) ;
2269
2279
peers. push ( peer) ;
2270
2280
}
2271
2281
0 commit comments