@@ -47,7 +47,7 @@ use crate::prelude::*;
47
47
/// # use lightning::blinded_path::BlindedPath;
48
48
/// # use lightning::sign::KeysManager;
49
49
/// # use lightning::ln::peer_handler::IgnoringMessageHandler;
50
- /// # use lightning::onion_message::{CustomOnionMessageContents, Destination, OnionMessageContents, OnionMessenger};
50
+ /// # use lightning::onion_message::{CustomOnionMessageContents, Destination, MessageRouter, OnionMessageContents, OnionMessenger};
51
51
/// # use lightning::util::logger::{Logger, Record};
52
52
/// # use lightning::util::ser::{Writeable, Writer};
53
53
/// # use lightning::io;
@@ -56,6 +56,12 @@ use crate::prelude::*;
56
56
/// # impl Logger for FakeLogger {
57
57
/// # fn log(&self, record: &Record) { unimplemented!() }
58
58
/// # }
59
+ /// # struct FakeMessageRouter {}
60
+ /// # impl MessageRouter for FakeMessageRouter {
61
+ /// # fn find_route(&self, sender: &PublicKey, destination: &Destination) -> Vec<PublicKey> {
62
+ /// # unimplemented!()
63
+ /// # }
64
+ /// # }
59
65
/// # let seed = [42u8; 32];
60
66
/// # let time = Duration::from_secs(123456);
61
67
/// # let keys_manager = KeysManager::new(&seed, time.as_secs(), time.subsec_nanos());
@@ -65,11 +71,15 @@ use crate::prelude::*;
65
71
/// # let hop_node_id1 = PublicKey::from_secret_key(&secp_ctx, &node_secret);
66
72
/// # let (hop_node_id2, hop_node_id3, hop_node_id4) = (hop_node_id1, hop_node_id1, hop_node_id1);
67
73
/// # let destination_node_id = hop_node_id1;
74
+ /// # let message_router = Arc::new(FakeMessageRouter {});
68
75
/// # let custom_message_handler = IgnoringMessageHandler {};
69
76
/// # let offers_message_handler = IgnoringMessageHandler {};
70
77
/// // Create the onion messenger. This must use the same `keys_manager` as is passed to your
71
78
/// // ChannelManager.
72
- /// let onion_messenger = OnionMessenger::new(&keys_manager, &keys_manager, logger, &offers_message_handler, &custom_message_handler);
79
+ /// let onion_messenger = OnionMessenger::new(
80
+ /// &keys_manager, &keys_manager, logger, message_router, &offers_message_handler,
81
+ /// &custom_message_handler
82
+ /// );
73
83
///
74
84
/// # struct YourCustomMessage {}
75
85
/// impl Writeable for YourCustomMessage {
@@ -106,11 +116,12 @@ use crate::prelude::*;
106
116
///
107
117
/// [offers]: <https://github.com/lightning/bolts/pull/798>
108
118
/// [`OnionMessenger`]: crate::onion_message::OnionMessenger
109
- pub struct OnionMessenger < ES : Deref , NS : Deref , L : Deref , OMH : Deref , CMH : Deref >
119
+ pub struct OnionMessenger < ES : Deref , NS : Deref , L : Deref , MR : Deref , OMH : Deref , CMH : Deref >
110
120
where
111
121
ES :: Target : EntropySource ,
112
122
NS :: Target : NodeSigner ,
113
123
L :: Target : Logger ,
124
+ MR :: Target : MessageRouter ,
114
125
OMH :: Target : OffersMessageHandler ,
115
126
CMH :: Target : CustomOnionMessageHandler ,
116
127
{
@@ -119,10 +130,21 @@ where
119
130
logger : L ,
120
131
pending_messages : Mutex < HashMap < PublicKey , VecDeque < msgs:: OnionMessage > > > ,
121
132
secp_ctx : Secp256k1 < secp256k1:: All > ,
133
+ message_router : MR ,
122
134
offers_handler : OMH ,
123
135
custom_handler : CMH ,
124
136
}
125
137
138
+ /// A trait defining behavior for routing an [`OnionMessage`].
139
+ ///
140
+ /// [`OnionMessage`]: msgs::OnionMessage
141
+ pub trait MessageRouter {
142
+ /// Returns a route for sending an [`OnionMessage`] to the given [`Destination`].
143
+ ///
144
+ /// [`OnionMessage`]: msgs::OnionMessage
145
+ fn find_route ( & self , sender : & PublicKey , destination : & Destination ) -> Vec < PublicKey > ;
146
+ }
147
+
126
148
/// The destination of an onion message.
127
149
pub enum Destination {
128
150
/// We're sending this onion message to a node.
@@ -191,18 +213,21 @@ pub trait CustomOnionMessageHandler {
191
213
fn read_custom_message < R : io:: Read > ( & self , message_type : u64 , buffer : & mut R ) -> Result < Option < Self :: CustomMessage > , msgs:: DecodeError > ;
192
214
}
193
215
194
- impl < ES : Deref , NS : Deref , L : Deref , OMH : Deref , CMH : Deref > OnionMessenger < ES , NS , L , OMH , CMH >
216
+ impl < ES : Deref , NS : Deref , L : Deref , MR : Deref , OMH : Deref , CMH : Deref >
217
+ OnionMessenger < ES , NS , L , MR , OMH , CMH >
195
218
where
196
219
ES :: Target : EntropySource ,
197
220
NS :: Target : NodeSigner ,
198
221
L :: Target : Logger ,
222
+ MR :: Target : MessageRouter ,
199
223
OMH :: Target : OffersMessageHandler ,
200
224
CMH :: Target : CustomOnionMessageHandler ,
201
225
{
202
226
/// Constructs a new `OnionMessenger` to send, forward, and delegate received onion messages to
203
227
/// their respective handlers.
204
228
pub fn new (
205
- entropy_source : ES , node_signer : NS , logger : L , offers_handler : OMH , custom_handler : CMH
229
+ entropy_source : ES , node_signer : NS , logger : L , message_router : MR , offers_handler : OMH ,
230
+ custom_handler : CMH
206
231
) -> Self {
207
232
let mut secp_ctx = Secp256k1 :: new ( ) ;
208
233
secp_ctx. seeded_randomize ( & entropy_source. get_secure_random_bytes ( ) ) ;
@@ -212,6 +237,7 @@ where
212
237
pending_messages : Mutex :: new ( HashMap :: new ( ) ) ,
213
238
secp_ctx,
214
239
logger,
240
+ message_router,
215
241
offers_handler,
216
242
custom_handler,
217
243
}
@@ -307,12 +333,13 @@ fn outbound_buffer_full(peer_node_id: &PublicKey, buffer: &HashMap<PublicKey, Ve
307
333
false
308
334
}
309
335
310
- impl < ES : Deref , NS : Deref , L : Deref , OMH : Deref , CMH : Deref > OnionMessageHandler
311
- for OnionMessenger < ES , NS , L , OMH , CMH >
336
+ impl < ES : Deref , NS : Deref , L : Deref , MR : Deref , OMH : Deref , CMH : Deref > OnionMessageHandler
337
+ for OnionMessenger < ES , NS , L , MR , OMH , CMH >
312
338
where
313
339
ES :: Target : EntropySource ,
314
340
NS :: Target : NodeSigner ,
315
341
L :: Target : Logger ,
342
+ MR :: Target : MessageRouter ,
316
343
OMH :: Target : OffersMessageHandler ,
317
344
CMH :: Target : CustomOnionMessageHandler + Sized ,
318
345
{
@@ -456,12 +483,13 @@ where
456
483
}
457
484
}
458
485
459
- impl < ES : Deref , NS : Deref , L : Deref , OMH : Deref , CMH : Deref > OnionMessageProvider
460
- for OnionMessenger < ES , NS , L , OMH , CMH >
486
+ impl < ES : Deref , NS : Deref , L : Deref , MR : Deref , OMH : Deref , CMH : Deref > OnionMessageProvider
487
+ for OnionMessenger < ES , NS , L , MR , OMH , CMH >
461
488
where
462
489
ES :: Target : EntropySource ,
463
490
NS :: Target : NodeSigner ,
464
491
L :: Target : Logger ,
492
+ MR :: Target : MessageRouter ,
465
493
OMH :: Target : OffersMessageHandler ,
466
494
CMH :: Target : CustomOnionMessageHandler ,
467
495
{
@@ -483,10 +511,11 @@ where
483
511
///
484
512
/// [`SimpleArcChannelManager`]: crate::ln::channelmanager::SimpleArcChannelManager
485
513
/// [`SimpleArcPeerManager`]: crate::ln::peer_handler::SimpleArcPeerManager
486
- pub type SimpleArcOnionMessenger < M , T , F , L > = OnionMessenger <
514
+ pub type SimpleArcOnionMessenger < M , T , F , L , R > = OnionMessenger <
487
515
Arc < KeysManager > ,
488
516
Arc < KeysManager > ,
489
517
Arc < L > ,
518
+ Arc < R > ,
490
519
Arc < SimpleArcChannelManager < M , T , F , L > > ,
491
520
IgnoringMessageHandler
492
521
> ;
@@ -498,11 +527,12 @@ pub type SimpleArcOnionMessenger<M, T, F, L> = OnionMessenger<
498
527
///
499
528
/// [`SimpleRefChannelManager`]: crate::ln::channelmanager::SimpleRefChannelManager
500
529
/// [`SimpleRefPeerManager`]: crate::ln::peer_handler::SimpleRefPeerManager
501
- pub type SimpleRefOnionMessenger < ' a , ' b , ' c , ' d , ' e , ' f , ' g , ' h , ' i , M , T , F , L > = OnionMessenger <
530
+ pub type SimpleRefOnionMessenger < ' a , ' b , ' c , ' d , ' e , ' f , ' g , ' h , ' i , ' j , M , T , F , L , R > = OnionMessenger <
502
531
& ' c KeysManager ,
503
532
& ' c KeysManager ,
504
533
& ' g L ,
505
- & ' i SimpleRefChannelManager < ' a , ' b , ' c , ' d , ' e , ' f , ' g , ' h , M , T , F , L > ,
534
+ & ' i R ,
535
+ & ' j SimpleRefChannelManager < ' a , ' b , ' c , ' d , ' e , ' f , ' g , ' h , M , T , F , L > ,
506
536
IgnoringMessageHandler
507
537
> ;
508
538
0 commit comments