@@ -72,6 +72,7 @@ pub(crate) enum PendingOutboundPayment {
7272 retry_strategy : Retry ,
7373 payment_release_secret : [ u8 ; 32 ] ,
7474 route_params : RouteParameters ,
75+ invoice_request : InvoiceRequest ,
7576 } ,
7677 Retryable {
7778 retry_strategy : Option < Retry > ,
@@ -936,7 +937,7 @@ impl OutboundPayments {
936937 & self , invoice : & StaticInvoice , payment_id : PaymentId , entropy_source : ES
937938 ) -> Result < [ u8 ; 32 ] , Bolt12PaymentError > where ES :: Target : EntropySource {
938939 match self . pending_outbound_payments . lock ( ) . unwrap ( ) . entry ( payment_id) {
939- hash_map:: Entry :: Occupied ( entry) => match entry. get ( ) {
940+ hash_map:: Entry :: Occupied ( mut entry) => match entry. get_mut ( ) {
940941 PendingOutboundPayment :: AwaitingInvoice { retry_strategy, invoice_request, .. } => {
941942 let invreq = invoice_request. as_ref ( ) . ok_or ( Bolt12PaymentError :: UnexpectedInvoice ) ?;
942943 if !invoice. from_same_offer ( invreq) {
@@ -954,6 +955,7 @@ impl OutboundPayments {
954955 retry_strategy : * retry_strategy,
955956 payment_release_secret,
956957 route_params,
958+ invoice_request : invoice_request. take ( ) . ok_or ( Bolt12PaymentError :: UnexpectedInvoice ) ?,
957959 } ;
958960 return Ok ( payment_release_secret)
959961 } ,
@@ -2088,6 +2090,7 @@ impl_writeable_tlv_based_enum_upgradable!(PendingOutboundPayment,
20882090 ( 4 , retry_strategy, required) ,
20892091 ( 6 , payment_release_secret, required) ,
20902092 ( 8 , route_params, required) ,
2093+ ( 10 , invoice_request, required) ,
20912094 } ,
20922095) ;
20932096
@@ -2100,19 +2103,23 @@ mod tests {
21002103
21012104 use crate :: blinded_path:: EmptyNodeIdLookUp ;
21022105 use crate :: events:: { Event , PathFailure , PaymentFailureReason } ;
2106+ use crate :: hex:: FromHex ;
2107+ use crate :: io:: Cursor ;
21032108 use crate :: ln:: types:: { PaymentHash , PaymentPreimage } ;
21042109 use crate :: ln:: channelmanager:: { PaymentId , RecipientOnionFields } ;
21052110 use crate :: ln:: features:: { ChannelFeatures , NodeFeatures } ;
21062111 use crate :: ln:: msgs:: { ErrorAction , LightningError } ;
21072112 use crate :: ln:: outbound_payment:: { Bolt12PaymentError , OutboundPayments , PendingOutboundPayment , Retry , RetryableSendFailure , StaleExpiration } ;
21082113 #[ cfg( feature = "std" ) ]
21092114 use crate :: offers:: invoice:: DEFAULT_RELATIVE_EXPIRY ;
2115+ use crate :: offers:: invoice_request:: InvoiceRequest ;
21102116 use crate :: offers:: offer:: OfferBuilder ;
21112117 use crate :: offers:: test_utils:: * ;
21122118 use crate :: routing:: gossip:: NetworkGraph ;
21132119 use crate :: routing:: router:: { InFlightHtlcs , Path , PaymentParameters , Route , RouteHop , RouteParameters } ;
21142120 use crate :: sync:: { Arc , Mutex , RwLock } ;
21152121 use crate :: util:: errors:: APIError ;
2122+ use crate :: util:: ser:: Readable ;
21162123 use crate :: util:: test_utils;
21172124
21182125 use alloc:: collections:: VecDeque ;
@@ -2644,6 +2651,11 @@ mod tests {
26442651 assert ! ( pending_events. lock( ) . unwrap( ) . is_empty( ) ) ;
26452652 }
26462653
2654+ fn invoice_request ( ) -> InvoiceRequest {
2655+ let invreq_bytes = <Vec < u8 > >:: from_hex ( "00200101010101010101010101010101010101010101010101010101010101010101080203e80a00162102bb58b5feca505c74edc000d8282fc556e51a1024fc8e7d7e56c6f887c5c8d5f25821035be5e9478209674a96e60f1f037f6176540fd001fa1d64694770c56a7709c42cf040a31d68198578a5aa1fe57de5f6d33f89c1556752cb333dbb56ac727f751893804d3a26b42909f1952fb1db8080238f9476b829160387692df35ff85dfe72e2ed" ) . unwrap ( ) ;
2656+ Readable :: read ( & mut Cursor :: new ( & invreq_bytes[ ..] ) ) . unwrap ( )
2657+ }
2658+
26472659 #[ test]
26482660 fn time_out_unreleased_async_payments ( ) {
26492661 let pending_events = Mutex :: new ( VecDeque :: new ( ) ) ;
@@ -2666,6 +2678,7 @@ mod tests {
26662678 retry_strategy : Retry :: Attempts ( 0 ) ,
26672679 payment_release_secret : [ 0 ; 32 ] ,
26682680 route_params,
2681+ invoice_request : invoice_request ( ) ,
26692682 } ;
26702683 outbounds. insert ( payment_id, outbound) ;
26712684 core:: mem:: drop ( outbounds) ;
@@ -2713,6 +2726,7 @@ mod tests {
27132726 retry_strategy : Retry :: Attempts ( 0 ) ,
27142727 payment_release_secret : [ 0 ; 32 ] ,
27152728 route_params,
2729+ invoice_request : invoice_request ( ) ,
27162730 } ;
27172731 outbounds. insert ( payment_id, outbound) ;
27182732 core:: mem:: drop ( outbounds) ;
0 commit comments