@@ -16,7 +16,7 @@ use bitcoin::hashes::sha256::Hash as Sha256;
16
16
use bitcoin:: secp256k1:: { self , PublicKey , Scalar , Secp256k1 , SecretKey } ;
17
17
18
18
use crate :: blinded_path:: { BlindedPath , IntroductionNode , NextMessageHop , NodeIdLookUp } ;
19
- use crate :: blinded_path:: message:: { advance_path_by_one, ForwardNode , ForwardTlvs , ReceiveTlvs , MessageContext } ;
19
+ use crate :: blinded_path:: message:: { advance_path_by_one, ForwardNode , ForwardTlvs , MessageContext , OffersContext , ReceiveTlvs } ;
20
20
use crate :: blinded_path:: utils;
21
21
use crate :: events:: { Event , EventHandler , EventsProvider } ;
22
22
use crate :: sign:: { EntropySource , NodeSigner , Recipient } ;
@@ -768,7 +768,7 @@ pub trait CustomOnionMessageHandler {
768
768
/// Called with the custom message that was received, returning a response to send, if any.
769
769
///
770
770
/// The returned [`Self::CustomMessage`], if any, is enqueued to be sent by [`OnionMessenger`].
771
- fn handle_custom_message ( & self , message : Self :: CustomMessage , responder : Option < Responder > ) -> ResponseInstruction < Self :: CustomMessage > ;
771
+ fn handle_custom_message ( & self , message : Self :: CustomMessage , context : Vec < u8 > , responder : Option < Responder > ) -> ResponseInstruction < Self :: CustomMessage > ;
772
772
773
773
/// Read a custom message of type `message_type` from `buffer`, returning `Ok(None)` if the
774
774
/// message type is unknown.
@@ -1446,7 +1446,7 @@ where
1446
1446
fn handle_onion_message ( & self , peer_node_id : & PublicKey , msg : & OnionMessage ) {
1447
1447
let logger = WithContext :: from ( & self . logger , Some ( * peer_node_id) , None , None ) ;
1448
1448
match self . peel_onion_message ( msg) {
1449
- Ok ( PeeledOnion :: Receive ( message, _context , reply_path) ) => {
1449
+ Ok ( PeeledOnion :: Receive ( message, context , reply_path) ) => {
1450
1450
log_trace ! (
1451
1451
logger,
1452
1452
"Received an onion message with {} reply_path: {:?}" ,
@@ -1455,7 +1455,15 @@ where
1455
1455
let responder = reply_path. map ( Responder :: new) ;
1456
1456
match message {
1457
1457
ParsedOnionMessageContents :: Offers ( msg) => {
1458
- let response_instructions = self . offers_handler . handle_message ( msg, responder) ;
1458
+ let context = match context {
1459
+ None => OffersContext :: Unknown { } ,
1460
+ Some ( MessageContext :: Offers ( context) ) => context,
1461
+ Some ( MessageContext :: Custom ( _) ) => {
1462
+ debug_assert ! ( false , "Shouldn't have triggered this case." ) ;
1463
+ return
1464
+ }
1465
+ } ;
1466
+ let response_instructions = self . offers_handler . handle_message ( msg, context, responder) ;
1459
1467
let _ = self . handle_onion_message_response ( response_instructions) ;
1460
1468
} ,
1461
1469
#[ cfg( async_payments) ]
@@ -1470,7 +1478,15 @@ where
1470
1478
self . async_payments_handler . release_held_htlc ( msg) ;
1471
1479
} ,
1472
1480
ParsedOnionMessageContents :: Custom ( msg) => {
1473
- let response_instructions = self . custom_handler . handle_custom_message ( msg, responder) ;
1481
+ let context = match context {
1482
+ None => vec ! [ ] ,
1483
+ Some ( MessageContext :: Custom ( data) ) => data,
1484
+ Some ( MessageContext :: Offers ( _) ) => {
1485
+ debug_assert ! ( false , "Shouldn't have triggered this case." ) ;
1486
+ return
1487
+ }
1488
+ } ;
1489
+ let response_instructions = self . custom_handler . handle_custom_message ( msg, context, responder) ;
1474
1490
let _ = self . handle_onion_message_response ( response_instructions) ;
1475
1491
} ,
1476
1492
}
0 commit comments