@@ -42,7 +42,7 @@ use crate::io_extras::read_to_end;
4242
4343use crate :: events:: { MessageSendEventsProvider , OnionMessageProvider } ;
4444use crate :: util:: logger;
45- use crate :: util:: ser:: { LengthReadable , Readable , ReadableArgs , Writeable , Writer , FixedLengthReader , HighZeroBytesDroppedBigSize , Hostname } ;
45+ use crate :: util:: ser:: { LengthReadable , Readable , ReadableArgs , Writeable , Writer , WithoutLength , FixedLengthReader , HighZeroBytesDroppedBigSize , Hostname } ;
4646
4747use crate :: ln:: { PaymentPreimage , PaymentHash , PaymentSecret } ;
4848
@@ -1168,6 +1168,7 @@ mod fuzzy_internal_msgs {
11681168 } ,
11691169 FinalNode {
11701170 payment_data : Option < FinalOnionHopData > ,
1171+ payment_metadata : Option < Vec < u8 > > ,
11711172 keysend_preimage : Option < PaymentPreimage > ,
11721173 } ,
11731174 }
@@ -1661,11 +1662,12 @@ impl Writeable for OnionHopData {
16611662 ( 6 , short_channel_id, required)
16621663 } ) ;
16631664 } ,
1664- OnionHopDataFormat :: FinalNode { ref payment_data, ref keysend_preimage } => {
1665+ OnionHopDataFormat :: FinalNode { ref payment_data, ref payment_metadata , ref keysend_preimage } => {
16651666 _encode_varint_length_prefixed_tlv ! ( w, {
16661667 ( 2 , HighZeroBytesDroppedBigSize ( self . amt_to_forward) , required) ,
16671668 ( 4 , HighZeroBytesDroppedBigSize ( self . outgoing_cltv_value) , required) ,
16681669 ( 8 , payment_data, option) ,
1670+ ( 16 , payment_metadata. as_ref( ) . map( |m| WithoutLength ( m) ) , option) ,
16691671 ( 5482373484 , keysend_preimage, option)
16701672 } ) ;
16711673 } ,
@@ -1680,29 +1682,33 @@ impl Readable for OnionHopData {
16801682 let mut cltv_value = HighZeroBytesDroppedBigSize ( 0u32 ) ;
16811683 let mut short_id: Option < u64 > = None ;
16821684 let mut payment_data: Option < FinalOnionHopData > = None ;
1685+ let mut payment_metadata: Option < WithoutLength < Vec < u8 > > > = None ;
16831686 let mut keysend_preimage: Option < PaymentPreimage > = None ;
16841687 read_tlv_fields ! ( r, {
16851688 ( 2 , amt, required) ,
16861689 ( 4 , cltv_value, required) ,
16871690 ( 6 , short_id, option) ,
16881691 ( 8 , payment_data, option) ,
1692+ ( 16 , payment_metadata, option) ,
16891693 // See https://github.com/lightning/blips/blob/master/blip-0003.md
16901694 ( 5482373484 , keysend_preimage, option)
16911695 } ) ;
16921696
16931697 let format = if let Some ( short_channel_id) = short_id {
16941698 if payment_data. is_some ( ) { return Err ( DecodeError :: InvalidValue ) ; }
1699+ if payment_metadata. is_some ( ) { return Err ( DecodeError :: InvalidValue ) ; }
16951700 OnionHopDataFormat :: NonFinalNode {
16961701 short_channel_id,
16971702 }
16981703 } else {
1699- if let & Some ( ref data) = & payment_data {
1704+ if let Some ( data) = & payment_data {
17001705 if data. total_msat > MAX_VALUE_MSAT {
17011706 return Err ( DecodeError :: InvalidValue ) ;
17021707 }
17031708 }
17041709 OnionHopDataFormat :: FinalNode {
17051710 payment_data,
1711+ payment_metadata : payment_metadata. map ( |w| w. 0 ) ,
17061712 keysend_preimage,
17071713 }
17081714 } ;
@@ -2880,6 +2886,7 @@ mod tests {
28802886 let mut msg = msgs:: OnionHopData {
28812887 format : OnionHopDataFormat :: FinalNode {
28822888 payment_data : None ,
2889+ payment_metadata : None ,
28832890 keysend_preimage : None ,
28842891 } ,
28852892 amt_to_forward : 0x0badf00d01020304 ,
@@ -2903,6 +2910,7 @@ mod tests {
29032910 payment_secret : expected_payment_secret,
29042911 total_msat : 0x1badca1f
29052912 } ) ,
2913+ payment_metadata : None ,
29062914 keysend_preimage : None ,
29072915 } ,
29082916 amt_to_forward : 0x0badf00d01020304 ,
@@ -2917,6 +2925,7 @@ mod tests {
29172925 payment_secret,
29182926 total_msat : 0x1badca1f
29192927 } ) ,
2928+ payment_metadata : None ,
29202929 keysend_preimage : None ,
29212930 } = msg. format {
29222931 assert_eq ! ( payment_secret, expected_payment_secret) ;
0 commit comments