@@ -72,6 +72,7 @@ pub(crate) enum PendingOutboundPayment {
72
72
retry_strategy : Retry ,
73
73
payment_release_secret : [ u8 ; 32 ] ,
74
74
route_params : RouteParameters ,
75
+ invoice_request : InvoiceRequest ,
75
76
} ,
76
77
Retryable {
77
78
retry_strategy : Option < Retry > ,
@@ -936,7 +937,7 @@ impl OutboundPayments {
936
937
& self , invoice : & StaticInvoice , payment_id : PaymentId , entropy_source : ES
937
938
) -> Result < [ u8 ; 32 ] , Bolt12PaymentError > where ES :: Target : EntropySource {
938
939
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 ( ) {
940
941
PendingOutboundPayment :: AwaitingInvoice { retry_strategy, invoice_request, .. } => {
941
942
let invreq = invoice_request. as_ref ( ) . ok_or ( Bolt12PaymentError :: UnexpectedInvoice ) ?;
942
943
if !invoice. from_same_offer ( invreq) {
@@ -954,6 +955,7 @@ impl OutboundPayments {
954
955
retry_strategy : * retry_strategy,
955
956
payment_release_secret,
956
957
route_params,
958
+ invoice_request : invoice_request. take ( ) . ok_or ( Bolt12PaymentError :: UnexpectedInvoice ) ?,
957
959
} ;
958
960
return Ok ( payment_release_secret)
959
961
} ,
@@ -2088,6 +2090,7 @@ impl_writeable_tlv_based_enum_upgradable!(PendingOutboundPayment,
2088
2090
( 4 , retry_strategy, required) ,
2089
2091
( 6 , payment_release_secret, required) ,
2090
2092
( 8 , route_params, required) ,
2093
+ ( 10 , invoice_request, required) ,
2091
2094
} ,
2092
2095
) ;
2093
2096
@@ -2100,19 +2103,23 @@ mod tests {
2100
2103
2101
2104
use crate :: blinded_path:: EmptyNodeIdLookUp ;
2102
2105
use crate :: events:: { Event , PathFailure , PaymentFailureReason } ;
2106
+ use crate :: hex:: FromHex ;
2107
+ use crate :: io:: Cursor ;
2103
2108
use crate :: ln:: types:: { PaymentHash , PaymentPreimage } ;
2104
2109
use crate :: ln:: channelmanager:: { PaymentId , RecipientOnionFields } ;
2105
2110
use crate :: ln:: features:: { ChannelFeatures , NodeFeatures } ;
2106
2111
use crate :: ln:: msgs:: { ErrorAction , LightningError } ;
2107
2112
use crate :: ln:: outbound_payment:: { Bolt12PaymentError , OutboundPayments , PendingOutboundPayment , Retry , RetryableSendFailure , StaleExpiration } ;
2108
2113
#[ cfg( feature = "std" ) ]
2109
2114
use crate :: offers:: invoice:: DEFAULT_RELATIVE_EXPIRY ;
2115
+ use crate :: offers:: invoice_request:: InvoiceRequest ;
2110
2116
use crate :: offers:: offer:: OfferBuilder ;
2111
2117
use crate :: offers:: test_utils:: * ;
2112
2118
use crate :: routing:: gossip:: NetworkGraph ;
2113
2119
use crate :: routing:: router:: { InFlightHtlcs , Path , PaymentParameters , Route , RouteHop , RouteParameters } ;
2114
2120
use crate :: sync:: { Arc , Mutex , RwLock } ;
2115
2121
use crate :: util:: errors:: APIError ;
2122
+ use crate :: util:: ser:: Readable ;
2116
2123
use crate :: util:: test_utils;
2117
2124
2118
2125
use alloc:: collections:: VecDeque ;
@@ -2644,6 +2651,11 @@ mod tests {
2644
2651
assert ! ( pending_events. lock( ) . unwrap( ) . is_empty( ) ) ;
2645
2652
}
2646
2653
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
+
2647
2659
#[ test]
2648
2660
fn time_out_unreleased_async_payments ( ) {
2649
2661
let pending_events = Mutex :: new ( VecDeque :: new ( ) ) ;
@@ -2666,6 +2678,7 @@ mod tests {
2666
2678
retry_strategy : Retry :: Attempts ( 0 ) ,
2667
2679
payment_release_secret : [ 0 ; 32 ] ,
2668
2680
route_params,
2681
+ invoice_request : invoice_request ( ) ,
2669
2682
} ;
2670
2683
outbounds. insert ( payment_id, outbound) ;
2671
2684
core:: mem:: drop ( outbounds) ;
@@ -2713,6 +2726,7 @@ mod tests {
2713
2726
retry_strategy : Retry :: Attempts ( 0 ) ,
2714
2727
payment_release_secret : [ 0 ; 32 ] ,
2715
2728
route_params,
2729
+ invoice_request : invoice_request ( ) ,
2716
2730
} ;
2717
2731
outbounds. insert ( payment_id, outbound) ;
2718
2732
core:: mem:: drop ( outbounds) ;
0 commit comments