Skip to content

Commit 8526afc

Browse files
committed
f: Address comments and feedbacks
1. Corrected implementation for onion_message.rs handle_message 2. Renamed received_onion_message -> message 3. Removed redundant MessageWithID struct 4. Seperated message from Responder. 5. Add docs
1 parent f75e088 commit 8526afc

File tree

6 files changed

+48
-38
lines changed

6 files changed

+48
-38
lines changed

fuzz/src/onion_message.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,7 @@ impl MessageRouter for TestMessageRouter {
9696
struct TestOffersMessageHandler {}
9797

9898
impl OffersMessageHandler for TestOffersMessageHandler {
99-
fn handle_message(&self, _message: OffersMessage) -> Option<OffersMessage> {
100-
None
101-
}
99+
fn handle_message<OMH: OnionMessageHandler>(&self, _message: &ReceivedOnionMessage<OMH, OffersMessage>) {}
102100
}
103101

104102
#[derive(Debug)]
@@ -123,8 +121,8 @@ struct TestCustomMessageHandler {}
123121

124122
impl CustomOnionMessageHandler for TestCustomMessageHandler {
125123
type CustomMessage = TestCustomMessage;
126-
fn handle_custom_message<OMH: OnionMessageHandler, T: OnionMessageContents>(&self, received_onion_message: &ReceivedOnionMessage<OMH, T>) {
127-
if let ReceivedOnionMessage::WithReplyPath(responder) = received_onion_message {
124+
fn handle_custom_message<OMH: OnionMessageHandler, T: OnionMessageContents>(&self, message: &ReceivedOnionMessage<OMH, T>) {
125+
if let ReceivedOnionMessage::WithReplyPath({_, responder}) = message {
128126
responder.respond(TestCustomMessage {})
129127
}
130128
}

lightning/src/ln/channelmanager.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9275,12 +9275,12 @@ where
92759275
R::Target: Router,
92769276
L::Target: Logger,
92779277
{
9278-
fn handle_message<OMH: OnionMessageHandler>(&self, received_onion_message: &ReceivedOnionMessage<OMH, OffersMessage>) {
9278+
fn handle_message<OMH: OnionMessageHandler>(&self, message: &ReceivedOnionMessage<OMH, OffersMessage>) {
92799279
let secp_ctx = &self.secp_ctx;
92809280
let expanded_key = &self.inbound_payment_key;
92819281

9282-
if let ReceivedOnionMessage::WithReplyPath(responder) = received_onion_message {
9283-
let response_option = match &responder.message {
9282+
if let ReceivedOnionMessage::WithReplyPath{message, responder} = message {
9283+
let response_option = match &message {
92849284
OffersMessage::InvoiceRequest(invoice_request) => {
92859285
let amount_msats = match InvoiceBuilder::<DerivedSigningPubkey>::amount_msats(
92869286
&invoice_request

lightning/src/ln/peer_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,11 @@ impl OnionMessageHandler for IgnoringMessageHandler {
136136
}
137137

138138
impl OffersMessageHandler for IgnoringMessageHandler {
139-
fn handle_message<OMH: OnionMessageHandler>(&self, _received_onion_message: &ReceivedOnionMessage<OMH, OffersMessage>) {}
139+
fn handle_message<OMH: OnionMessageHandler>(&self, _message: &ReceivedOnionMessage<OMH, OffersMessage>) {}
140140
}
141141
impl CustomOnionMessageHandler for IgnoringMessageHandler {
142142
type CustomMessage = Infallible;
143-
fn handle_custom_message<OMH: OnionMessageHandler>(&self, _received_onion_message: &ReceivedOnionMessage<OMH, Self::CustomMessage>) {
143+
fn handle_custom_message<OMH: OnionMessageHandler>(&self, _message: &ReceivedOnionMessage<OMH, Self::CustomMessage>) {
144144
// Since we always return `None` in the read the handle method should never be called.
145145
unreachable!();
146146
}

lightning/src/onion_message/functional_tests.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ impl MessageRouter for TestMessageRouter {
7070
struct TestOffersMessageHandler {}
7171

7272
impl OffersMessageHandler for TestOffersMessageHandler {
73-
fn handle_message<OMH: OnionMessageHandler>(&self, _received_onion_message: &ReceivedOnionMessage<OMH, OffersMessage>) {}
73+
fn handle_message<OMH: OnionMessageHandler>(&self, _message: &ReceivedOnionMessage<OMH, OffersMessage>) {}
7474
}
7575

7676
#[derive(Clone, Debug, PartialEq)]
@@ -132,14 +132,14 @@ impl Drop for TestCustomMessageHandler {
132132

133133
impl CustomOnionMessageHandler for TestCustomMessageHandler {
134134
type CustomMessage = TestCustomMessage;
135-
fn handle_custom_message<OMH: OnionMessageHandler>(&self, received_onion_message: &ReceivedOnionMessage<OMH, Self::CustomMessage>) {
136-
if let ReceivedOnionMessage::WithReplyPath(responder) = received_onion_message {
135+
fn handle_custom_message<OMH: OnionMessageHandler>(&self, message: &ReceivedOnionMessage<OMH, Self::CustomMessage>) {
136+
if let ReceivedOnionMessage::WithReplyPath{message, responder} = message {
137137
match self.expected_messages.lock().unwrap().pop_front() {
138-
Some(expected_msg) => assert_eq!(expected_msg, responder.message),
139-
None => panic!("Unexpected message: {:?}", responder.message),
138+
Some(expected_msg) => assert_eq!(expected_msg, *message),
139+
None => panic!("Unexpected message: {:?}", message),
140140
}
141141

142-
let response_option = match responder.message {
142+
let response_option = match message {
143143
TestCustomMessage::Request => Some(TestCustomMessage::Response),
144144
TestCustomMessage::Response => None,
145145
};

lightning/src/onion_message/messenger.rs

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -243,50 +243,62 @@ impl OnionMessageRecipient {
243243
}
244244
}
245245

246+
/// A struct handling response to an [`OnionMessage`]
246247
pub struct Responder<'a, OMH: OnionMessageHandler, T: OnionMessageContents> {
247248
messenger: &'a OMH,
248-
pub message: T,
249249
pub reply_path: BlindedPath,
250-
pub path_id: Option<[u8; 32]>
250+
pub path_id: Option<[u8; 32]>,
251+
// This phantom Data is used to ensure that we use T in the struct definition
252+
// This allow us to ensure at compile time that the received message type and response type will be same
253+
_phantom: std::marker::PhantomData<T>
251254
}
252255

253256
impl<'a, OMH: OnionMessageHandler, T: OnionMessageContents> Responder<'a, OMH, T> {
254257
pub fn respond(&self, response: T) {
258+
// Utilising the fact that we ensure at compile time that
259+
// received message type, and response type will be same
260+
let message_type = T::msg_type(&response);
255261
self.messenger.handle_onion_message_response(
256262
response, self.reply_path.clone(), format_args!(
257263
"when responding to {} onion message with path_id {:02x?}",
258-
self.message.msg_type(),
264+
message_type,
259265
self.path_id.clone()
260266
)
261267
);
262268
}
263269
}
264270

265-
pub struct MessageWithId<T: OnionMessageContents> {
266-
pub message: T,
267-
pub path_id: Option<[u8; 32]>,
268-
}
269-
271+
/// A enum to handle received [`OnionMessage`]
270272
pub enum ReceivedOnionMessage<'a, OMH: OnionMessageHandler, T: OnionMessageContents> {
271-
WithReplyPath(Responder<'a, OMH, T>),
272-
WithoutReplyPath(MessageWithId<T>),
273+
WithReplyPath {
274+
message: T,
275+
responder: Responder<'a, OMH, T>,
276+
},
277+
WithoutReplyPath {
278+
message: T,
279+
path_id: Option<[u8; 32]>,
280+
},
273281
}
274282

275283
impl<'a, OMH: OnionMessageHandler, T: OnionMessageContents> ReceivedOnionMessage<'a, OMH, T> {
276284
fn new(messenger: &'a OMH, message: T, reply_path_option: Option<BlindedPath>, path_id: Option<[u8; 32]> ) -> Self {
277285
match reply_path_option {
278286
Some(reply_path) => {
279-
ReceivedOnionMessage::WithReplyPath(Responder {
287+
let responder = Responder {
280288
messenger,
281-
message,
282289
reply_path,
283-
path_id
284-
})
290+
path_id,
291+
_phantom: std::marker::PhantomData
292+
};
293+
ReceivedOnionMessage::WithReplyPath {
294+
message,
295+
responder
296+
}
285297
}
286-
None => ReceivedOnionMessage::WithoutReplyPath(MessageWithId {
298+
None => ReceivedOnionMessage::WithoutReplyPath {
287299
message,
288300
path_id
289-
})
301+
}
290302
}
291303
}
292304
}
@@ -548,7 +560,7 @@ pub trait CustomOnionMessageHandler {
548560
/// Called with the custom message that was received, returning a response to send, if any.
549561
///
550562
/// The returned [`Self::CustomMessage`], if any, is enqueued to be sent by [`OnionMessenger`].
551-
fn handle_custom_message<OMH: OnionMessageHandler>(&self, received_onion_message: &ReceivedOnionMessage<OMH, Self::CustomMessage>);
563+
fn handle_custom_message<OMH: OnionMessageHandler>(&self, message: &ReceivedOnionMessage<OMH, Self::CustomMessage>);
552564

553565
/// Read a custom message of type `message_type` from `buffer`, returning `Ok(None)` if the
554566
/// message type is unknown.
@@ -953,12 +965,12 @@ where
953965

954966
match message {
955967
ParsedOnionMessageContents::Offers(msg) => {
956-
let received_onion_message = ReceivedOnionMessage::new(self, msg, reply_path, path_id);
957-
self.offers_handler.handle_message(&received_onion_message);
968+
let message = ReceivedOnionMessage::new(self, msg, reply_path, path_id);
969+
self.offers_handler.handle_message(&message);
958970
},
959971
ParsedOnionMessageContents::Custom(msg) => {
960-
let received_onion_message = ReceivedOnionMessage::new(self, msg, reply_path, path_id);
961-
self.custom_handler.handle_custom_message(&received_onion_message);
972+
let message = ReceivedOnionMessage::new(self, msg, reply_path, path_id);
973+
self.custom_handler.handle_custom_message(&message);
962974
},
963975
}
964976
},

lightning/src/onion_message/offers.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ pub trait OffersMessageHandler {
4242
/// The returned [`OffersMessage`], if any, is enqueued to be sent by [`OnionMessenger`].
4343
///
4444
/// [`OnionMessenger`]: crate::onion_message::messenger::OnionMessenger
45-
fn handle_message<OMH: OnionMessageHandler>(&self, received_onion_message: &ReceivedOnionMessage<OMH, OffersMessage>);
45+
fn handle_message<OMH: OnionMessageHandler>(&self, message: &ReceivedOnionMessage<OMH, OffersMessage>);
4646

4747
/// Releases any [`OffersMessage`]s that need to be sent.
4848
///

0 commit comments

Comments
 (0)