@@ -197,10 +197,16 @@ impl Deref for ErroringMessageHandler {
197
197
fn deref ( & self ) -> & Self { self }
198
198
}
199
199
200
+ impl OnionMessageHandler for IgnoringMessageHandler {
201
+ fn handle_onion_message ( & self , _their_node_id : & PublicKey , _msg : & msgs:: OnionMessage ) { }
202
+ }
203
+
200
204
/// Provides references to trait impls which handle different types of messages.
201
- pub struct MessageHandler < CM : Deref , RM : Deref > where
205
+ pub struct MessageHandler < CM : Deref , RM : Deref , OM : Deref > where
202
206
CM :: Target : ChannelMessageHandler ,
203
- RM :: Target : RoutingMessageHandler {
207
+ RM :: Target : RoutingMessageHandler ,
208
+ OM :: Target : OnionMessageHandler ,
209
+ {
204
210
/// A message handler which handles messages specific to channels. Usually this is just a
205
211
/// [`ChannelManager`] object or an [`ErroringMessageHandler`].
206
212
///
@@ -212,6 +218,11 @@ pub struct MessageHandler<CM: Deref, RM: Deref> where
212
218
///
213
219
/// [`NetGraphMsgHandler`]: crate::routing::network_graph::NetGraphMsgHandler
214
220
pub route_handler : RM ,
221
+ /// A message handler which handles onion messages. Usually this is just an [`OnionMessager`]
222
+ /// object or an [`IgnoringMessageHandler`].
223
+ ///
224
+ /// [`OnionMessager`]: crate::ln::onion_messages::OnionMessager
225
+ pub onion_message_handler : OM ,
215
226
}
216
227
217
228
/// Provides an object which can be used to send data to and which uniquely identifies a connection
@@ -379,7 +390,7 @@ struct PeerHolder<Descriptor: SocketDescriptor> {
379
390
/// issues such as overly long function definitions.
380
391
///
381
392
/// (C-not exported) as Arcs don't make sense in bindings
382
- pub type SimpleArcPeerManager < SD , M , T , F , C , L > = PeerManager < SD , Arc < SimpleArcChannelManager < M , T , F , L > > , Arc < NetGraphMsgHandler < Arc < NetworkGraph > , Arc < C > , Arc < L > > > , Arc < L > , Arc < IgnoringMessageHandler > > ;
393
+ pub type SimpleArcPeerManager < SD , M , T , F , C , L > = PeerManager < SD , Arc < SimpleArcChannelManager < M , T , F , L > > , Arc < NetGraphMsgHandler < Arc < NetworkGraph > , Arc < C > , Arc < L > > > , Arc < L > , SimpleArcOnionMessager , Arc < IgnoringMessageHandler > > ;
383
394
384
395
/// SimpleRefPeerManager is a type alias for a PeerManager reference, and is the reference
385
396
/// counterpart to the SimpleArcPeerManager type alias. Use this type by default when you don't
@@ -389,7 +400,7 @@ pub type SimpleArcPeerManager<SD, M, T, F, C, L> = PeerManager<SD, Arc<SimpleArc
389
400
/// helps with issues such as long function definitions.
390
401
///
391
402
/// (C-not exported) as Arcs don't make sense in bindings
392
- pub type SimpleRefPeerManager < ' a , ' b , ' c , ' d , ' e , ' f , ' g , ' h , SD , M , T , F , C , L > = PeerManager < SD , SimpleRefChannelManager < ' a , ' b , ' c , ' d , ' e , M , T , F , L > , & ' e NetGraphMsgHandler < & ' g NetworkGraph , & ' h C , & ' f L > , & ' f L , IgnoringMessageHandler > ;
403
+ pub type SimpleRefPeerManager < ' a , ' b , ' c , ' d , ' e , ' f , ' g , ' h , SD , M , T , F , C , L > = PeerManager < SD , SimpleRefChannelManager < ' a , ' b , ' c , ' d , ' e , M , T , F , L > , & ' e NetGraphMsgHandler < & ' g NetworkGraph , & ' h C , & ' f L > , SimpleRefOnionMessager < ' c > , & ' f L , IgnoringMessageHandler > ;
393
404
394
405
/// A PeerManager manages a set of peers, described by their [`SocketDescriptor`] and marshalls
395
406
/// socket events into messages which it passes on to its [`MessageHandler`].
@@ -410,12 +421,13 @@ pub type SimpleRefPeerManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, SD, M, T, F, C, L>
410
421
/// you're using lightning-net-tokio.
411
422
///
412
423
/// [`read_event`]: PeerManager::read_event
413
- pub struct PeerManager < Descriptor : SocketDescriptor , CM : Deref , RM : Deref , L : Deref , CMH : Deref > where
424
+ pub struct PeerManager < Descriptor : SocketDescriptor , CM : Deref , RM : Deref , OM : Deref , L : Deref , CMH : Deref > where
414
425
CM :: Target : ChannelMessageHandler ,
415
426
RM :: Target : RoutingMessageHandler ,
427
+ OM :: Target : OnionMessageHandler ,
416
428
L :: Target : Logger ,
417
429
CMH :: Target : CustomMessageHandler {
418
- message_handler : MessageHandler < CM , RM > ,
430
+ message_handler : MessageHandler < CM , RM , OM > ,
419
431
peers : Mutex < PeerHolder < Descriptor > > ,
420
432
our_node_secret : SecretKey ,
421
433
ephemeral_key_midstate : Sha256Engine ,
@@ -451,31 +463,32 @@ macro_rules! encode_msg {
451
463
} }
452
464
}
453
465
454
- impl < Descriptor : SocketDescriptor , CM : Deref , L : Deref > PeerManager < Descriptor , CM , IgnoringMessageHandler , L , IgnoringMessageHandler > where
466
+ impl < Descriptor : SocketDescriptor , CM : Deref , OM : Deref , L : Deref > PeerManager < Descriptor , CM , IgnoringMessageHandler , OM , L , IgnoringMessageHandler > where
455
467
CM :: Target : ChannelMessageHandler ,
468
+ OM :: Target : OnionMessageHandler ,
456
469
L :: Target : Logger {
457
- /// Constructs a new PeerManager with the given ChannelMessageHandler. No routing message
458
- /// handler is used and network graph messages are ignored.
470
+ /// Constructs a new PeerManager with the given ChannelMessageHandler and OnionMessageHandler. No
471
+ /// routing message handler is used and network graph messages are ignored.
459
472
///
460
473
/// ephemeral_random_data is used to derive per-connection ephemeral keys and must be
461
474
/// cryptographically secure random bytes.
462
475
///
463
476
/// (C-not exported) as we can't export a PeerManager with a dummy route handler
464
- pub fn new_channel_only ( channel_message_handler : CM , our_node_secret : SecretKey , ephemeral_random_data : & [ u8 ; 32 ] , logger : L ) -> Self {
477
+ pub fn new_channel_only ( channel_message_handler : CM , onion_message_handler : OM , our_node_secret : SecretKey , ephemeral_random_data : & [ u8 ; 32 ] , logger : L ) -> Self {
465
478
Self :: new ( MessageHandler {
466
479
chan_handler : channel_message_handler,
467
480
route_handler : IgnoringMessageHandler { } ,
468
481
} , our_node_secret, ephemeral_random_data, logger, IgnoringMessageHandler { } )
469
482
}
470
483
}
471
484
472
- impl < Descriptor : SocketDescriptor , RM : Deref , L : Deref > PeerManager < Descriptor , ErroringMessageHandler , RM , L , IgnoringMessageHandler > where
485
+ impl < Descriptor : SocketDescriptor , RM : Deref , L : Deref > PeerManager < Descriptor , ErroringMessageHandler , RM , IgnoringMessageHandler , L , IgnoringMessageHandler > where
473
486
RM :: Target : RoutingMessageHandler ,
474
487
L :: Target : Logger {
475
- /// Constructs a new PeerManager with the given RoutingMessageHandler. No channel message
476
- /// handler is used and messages related to channels will be ignored (or generate error
477
- /// messages). Note that some other lightning implementations time-out connections after some
478
- /// time if no channel is built with the peer.
488
+ /// Constructs a new PeerManager with the given RoutingMessageHandler. No channel message handler
489
+ /// or onion message handler is used and messages related to channels will be ignored (or generate
490
+ /// error messages). Note that some other lightning implementations time-out connections after
491
+ /// some time if no channel is built with the peer.
479
492
///
480
493
/// ephemeral_random_data is used to derive per-connection ephemeral keys and must be
481
494
/// cryptographically secure random bytes.
0 commit comments