@@ -46,7 +46,7 @@ use crate::prelude::*;
46
46
/// # use lightning::blinded_path::BlindedPath;
47
47
/// # use lightning::sign::KeysManager;
48
48
/// # use lightning::ln::peer_handler::IgnoringMessageHandler;
49
- /// # use lightning::onion_message::{CustomOnionMessageContents, Destination, OnionMessageContents, OnionMessagePath, OnionMessenger};
49
+ /// # use lightning::onion_message::{CustomOnionMessageContents, Destination, MessageRouter, OnionMessageContents, OnionMessagePath, OnionMessenger};
50
50
/// # use lightning::util::logger::{Logger, Record};
51
51
/// # use lightning::util::ser::{Writeable, Writer};
52
52
/// # use lightning::io;
@@ -55,6 +55,12 @@ use crate::prelude::*;
55
55
/// # impl Logger for FakeLogger {
56
56
/// # fn log(&self, record: &Record) { unimplemented!() }
57
57
/// # }
58
+ /// # struct FakeMessageRouter {}
59
+ /// # impl MessageRouter for FakeMessageRouter {
60
+ /// # fn find_path(&self, sender: PublicKey, peers: Vec<PublicKey>, destination: Destination) -> Result<OnionMessagePath, ()> {
61
+ /// # unimplemented!()
62
+ /// # }
63
+ /// # }
58
64
/// # let seed = [42u8; 32];
59
65
/// # let time = Duration::from_secs(123456);
60
66
/// # let keys_manager = KeysManager::new(&seed, time.as_secs(), time.subsec_nanos());
@@ -64,11 +70,15 @@ use crate::prelude::*;
64
70
/// # let hop_node_id1 = PublicKey::from_secret_key(&secp_ctx, &node_secret);
65
71
/// # let (hop_node_id2, hop_node_id3, hop_node_id4) = (hop_node_id1, hop_node_id1, hop_node_id1);
66
72
/// # let destination_node_id = hop_node_id1;
73
+ /// # let message_router = Arc::new(FakeMessageRouter {});
67
74
/// # let custom_message_handler = IgnoringMessageHandler {};
68
75
/// # let offers_message_handler = IgnoringMessageHandler {};
69
76
/// // Create the onion messenger. This must use the same `keys_manager` as is passed to your
70
77
/// // ChannelManager.
71
- /// let onion_messenger = OnionMessenger::new(&keys_manager, &keys_manager, logger, &offers_message_handler, &custom_message_handler);
78
+ /// let onion_messenger = OnionMessenger::new(
79
+ /// &keys_manager, &keys_manager, logger, message_router, &offers_message_handler,
80
+ /// &custom_message_handler
81
+ /// );
72
82
///
73
83
/// # struct YourCustomMessage {}
74
84
/// impl Writeable for YourCustomMessage {
@@ -111,11 +121,12 @@ use crate::prelude::*;
111
121
///
112
122
/// [offers]: <https://github.com/lightning/bolts/pull/798>
113
123
/// [`OnionMessenger`]: crate::onion_message::OnionMessenger
114
- pub struct OnionMessenger < ES : Deref , NS : Deref , L : Deref , OMH : Deref , CMH : Deref >
124
+ pub struct OnionMessenger < ES : Deref , NS : Deref , L : Deref , MR : Deref , OMH : Deref , CMH : Deref >
115
125
where
116
126
ES :: Target : EntropySource ,
117
127
NS :: Target : NodeSigner ,
118
128
L :: Target : Logger ,
129
+ MR :: Target : MessageRouter ,
119
130
OMH :: Target : OffersMessageHandler ,
120
131
CMH :: Target : CustomOnionMessageHandler ,
121
132
{
@@ -124,10 +135,23 @@ where
124
135
logger : L ,
125
136
pending_messages : Mutex < HashMap < PublicKey , VecDeque < msgs:: OnionMessage > > > ,
126
137
secp_ctx : Secp256k1 < secp256k1:: All > ,
138
+ message_router : MR ,
127
139
offers_handler : OMH ,
128
140
custom_handler : CMH ,
129
141
}
130
142
143
+ /// A trait defining behavior for routing an [`OnionMessage`].
144
+ ///
145
+ /// [`OnionMessage`]: msgs::OnionMessage
146
+ pub trait MessageRouter {
147
+ /// Returns a route for sending an [`OnionMessage`] to the given [`Destination`].
148
+ ///
149
+ /// [`OnionMessage`]: msgs::OnionMessage
150
+ fn find_path (
151
+ & self , sender : PublicKey , peers : Vec < PublicKey > , destination : Destination
152
+ ) -> Result < OnionMessagePath , ( ) > ;
153
+ }
154
+
131
155
/// A path for sending an [`msgs::OnionMessage`].
132
156
#[ derive( Clone ) ]
133
157
pub struct OnionMessagePath {
@@ -207,18 +231,21 @@ pub trait CustomOnionMessageHandler {
207
231
fn read_custom_message < R : io:: Read > ( & self , message_type : u64 , buffer : & mut R ) -> Result < Option < Self :: CustomMessage > , msgs:: DecodeError > ;
208
232
}
209
233
210
- impl < ES : Deref , NS : Deref , L : Deref , OMH : Deref , CMH : Deref > OnionMessenger < ES , NS , L , OMH , CMH >
234
+ impl < ES : Deref , NS : Deref , L : Deref , MR : Deref , OMH : Deref , CMH : Deref >
235
+ OnionMessenger < ES , NS , L , MR , OMH , CMH >
211
236
where
212
237
ES :: Target : EntropySource ,
213
238
NS :: Target : NodeSigner ,
214
239
L :: Target : Logger ,
240
+ MR :: Target : MessageRouter ,
215
241
OMH :: Target : OffersMessageHandler ,
216
242
CMH :: Target : CustomOnionMessageHandler ,
217
243
{
218
244
/// Constructs a new `OnionMessenger` to send, forward, and delegate received onion messages to
219
245
/// their respective handlers.
220
246
pub fn new (
221
- entropy_source : ES , node_signer : NS , logger : L , offers_handler : OMH , custom_handler : CMH
247
+ entropy_source : ES , node_signer : NS , logger : L , message_router : MR , offers_handler : OMH ,
248
+ custom_handler : CMH
222
249
) -> Self {
223
250
let mut secp_ctx = Secp256k1 :: new ( ) ;
224
251
secp_ctx. seeded_randomize ( & entropy_source. get_secure_random_bytes ( ) ) ;
@@ -228,6 +255,7 @@ where
228
255
pending_messages : Mutex :: new ( HashMap :: new ( ) ) ,
229
256
secp_ctx,
230
257
logger,
258
+ message_router,
231
259
offers_handler,
232
260
custom_handler,
233
261
}
@@ -328,12 +356,13 @@ fn outbound_buffer_full(peer_node_id: &PublicKey, buffer: &HashMap<PublicKey, Ve
328
356
false
329
357
}
330
358
331
- impl < ES : Deref , NS : Deref , L : Deref , OMH : Deref , CMH : Deref > OnionMessageHandler
332
- for OnionMessenger < ES , NS , L , OMH , CMH >
359
+ impl < ES : Deref , NS : Deref , L : Deref , MR : Deref , OMH : Deref , CMH : Deref > OnionMessageHandler
360
+ for OnionMessenger < ES , NS , L , MR , OMH , CMH >
333
361
where
334
362
ES :: Target : EntropySource ,
335
363
NS :: Target : NodeSigner ,
336
364
L :: Target : Logger ,
365
+ MR :: Target : MessageRouter ,
337
366
OMH :: Target : OffersMessageHandler ,
338
367
CMH :: Target : CustomOnionMessageHandler + Sized ,
339
368
{
@@ -478,12 +507,13 @@ where
478
507
}
479
508
}
480
509
481
- impl < ES : Deref , NS : Deref , L : Deref , OMH : Deref , CMH : Deref > OnionMessageProvider
482
- for OnionMessenger < ES , NS , L , OMH , CMH >
510
+ impl < ES : Deref , NS : Deref , L : Deref , MR : Deref , OMH : Deref , CMH : Deref > OnionMessageProvider
511
+ for OnionMessenger < ES , NS , L , MR , OMH , CMH >
483
512
where
484
513
ES :: Target : EntropySource ,
485
514
NS :: Target : NodeSigner ,
486
515
L :: Target : Logger ,
516
+ MR :: Target : MessageRouter ,
487
517
OMH :: Target : OffersMessageHandler ,
488
518
CMH :: Target : CustomOnionMessageHandler ,
489
519
{
@@ -505,10 +535,11 @@ where
505
535
///
506
536
/// [`SimpleArcChannelManager`]: crate::ln::channelmanager::SimpleArcChannelManager
507
537
/// [`SimpleArcPeerManager`]: crate::ln::peer_handler::SimpleArcPeerManager
508
- pub type SimpleArcOnionMessenger < L > = OnionMessenger <
538
+ pub type SimpleArcOnionMessenger < L , R > = OnionMessenger <
509
539
Arc < KeysManager > ,
510
540
Arc < KeysManager > ,
511
541
Arc < L > ,
542
+ Arc < R > ,
512
543
IgnoringMessageHandler ,
513
544
IgnoringMessageHandler
514
545
> ;
@@ -520,10 +551,11 @@ pub type SimpleArcOnionMessenger<L> = OnionMessenger<
520
551
///
521
552
/// [`SimpleRefChannelManager`]: crate::ln::channelmanager::SimpleRefChannelManager
522
553
/// [`SimpleRefPeerManager`]: crate::ln::peer_handler::SimpleRefPeerManager
523
- pub type SimpleRefOnionMessenger < ' a , ' b , L > = OnionMessenger <
554
+ pub type SimpleRefOnionMessenger < ' a , ' b , ' c , L , R > = OnionMessenger <
524
555
& ' a KeysManager ,
525
556
& ' a KeysManager ,
526
557
& ' b L ,
558
+ & ' c R ,
527
559
IgnoringMessageHandler ,
528
560
IgnoringMessageHandler
529
561
> ;
0 commit comments