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