@@ -1856,6 +1856,17 @@ pub enum Event {
18561856 ///
18571857 /// [`OnionMessenger::new_with_offline_peer_interception`]: crate::onion_message::messenger::OnionMessenger::new_with_offline_peer_interception
18581858 OnionMessageIntercepted {
1859+ /// The node id of the peer that sent the message, if known.
1860+ ///
1861+ /// This is `None` when the message is sent with
1862+ /// [`MessageSendInstructions::ForwardedMessage`] (e.g., when calling
1863+ /// [`OffersMessageFlow::enqueue_invoice_request_to_forward`]) rather than forwarded
1864+ /// internally by the `OnionMessenger`, as well as for events serialized prior to LDK 0.3.
1865+ /// Otherwise it is the node we received the message from.
1866+ ///
1867+ /// [`MessageSendInstructions::ForwardedMessage`]: crate::onion_message::messenger::MessageSendInstructions::ForwardedMessage
1868+ /// [`OffersMessageFlow::enqueue_invoice_request_to_forward`]: crate::offers::flow::OffersMessageFlow::enqueue_invoice_request_to_forward
1869+ prev_hop : Option < PublicKey > ,
18591870 /// The next hop (offline peer or unknown SCID).
18601871 next_hop : NextMessageHop ,
18611872 /// The onion message intended to be forwarded to the offline peer or via the unknown
@@ -2441,25 +2452,20 @@ impl Writeable for Event {
24412452 35u8 . write ( writer) ?;
24422453 // Never write ConnectionNeeded events as buffered onion messages aren't serialized.
24432454 } ,
2444- & Event :: OnionMessageIntercepted { ref next_hop, ref message } => {
2455+ & Event :: OnionMessageIntercepted { ref prev_hop , ref next_hop, ref message } => {
24452456 37u8 . write ( writer) ?;
2446- match next_hop {
2447- NextMessageHop :: NodeId ( peer_node_id) => {
2448- // If we have the node_id, we keep writing it for backwards compatibility.
2449- write_tlv_fields ! ( writer, {
2450- ( 0 , peer_node_id, required) ,
2451- ( 1 , next_hop, required) ,
2452- ( 2 , message, required) ,
2453- } ) ;
2454- } ,
2455- NextMessageHop :: ShortChannelId ( _) => {
2456- write_tlv_fields ! ( writer, {
2457- // 0 used to be peer_node_id in LDK v0.2 and prior.
2458- ( 1 , next_hop, required) ,
2459- ( 2 , message, required) ,
2460- } ) ;
2461- } ,
2462- }
2457+ // 0 used to be peer_node_id in LDK v0.2 and prior; we keep writing it when the next
2458+ // hop is a node id for backwards compatibility.
2459+ let legacy_peer_node_id = match next_hop {
2460+ NextMessageHop :: NodeId ( node_id) => Some ( node_id) ,
2461+ NextMessageHop :: ShortChannelId ( _) => None ,
2462+ } ;
2463+ write_tlv_fields ! ( writer, {
2464+ ( 0 , legacy_peer_node_id, option) ,
2465+ ( 1 , next_hop, required) ,
2466+ ( 2 , message, required) ,
2467+ ( 3 , prev_hop, option) ,
2468+ } ) ;
24632469 } ,
24642470 & Event :: OnionMessagePeerConnected { ref peer_node_id } => {
24652471 39u8 . write ( writer) ?;
@@ -3090,12 +3096,14 @@ impl MaybeReadable for Event {
30903096 ( 0 , peer_node_id, option) ,
30913097 ( 1 , next_hop, option) ,
30923098 ( 2 , message, required) ,
3099+ ( 3 , prev_hop, option) ,
30933100 } ) ;
30943101
30953102 let next_hop = next_hop
30963103 . or ( peer_node_id. map ( NextMessageHop :: NodeId ) )
30973104 . ok_or ( msgs:: DecodeError :: InvalidValue ) ?;
30983105 Ok ( Some ( Event :: OnionMessageIntercepted {
3106+ prev_hop,
30993107 next_hop,
31003108 message : message. 0 . unwrap ( ) ,
31013109 } ) )
0 commit comments