@@ -83,6 +83,7 @@ pub(crate) enum PendingOutboundPayment {
83
83
keysend_preimage : PaymentPreimage ,
84
84
retry_strategy : Retry ,
85
85
route_params : RouteParameters ,
86
+ invoice_request : InvoiceRequest ,
86
87
} ,
87
88
Retryable {
88
89
retry_strategy : Option < Retry > ,
@@ -1002,7 +1003,7 @@ impl OutboundPayments {
1002
1003
}
1003
1004
1004
1005
match self . pending_outbound_payments . lock ( ) . unwrap ( ) . entry ( payment_id) {
1005
- hash_map:: Entry :: Occupied ( mut entry) => match entry. get ( ) {
1006
+ hash_map:: Entry :: Occupied ( mut entry) => match entry. get_mut ( ) {
1006
1007
PendingOutboundPayment :: AwaitingInvoice {
1007
1008
retry_strategy, retryable_invoice_request, max_total_routing_fee_msat, ..
1008
1009
} => {
@@ -1046,6 +1047,11 @@ impl OutboundPayments {
1046
1047
keysend_preimage,
1047
1048
retry_strategy : * retry_strategy,
1048
1049
route_params,
1050
+ invoice_request :
1051
+ retryable_invoice_request
1052
+ . take ( )
1053
+ . ok_or ( Bolt12PaymentError :: UnexpectedInvoice ) ?
1054
+ . invoice_request ,
1049
1055
} ;
1050
1056
return Ok ( ( ) )
1051
1057
} ,
@@ -2192,32 +2198,37 @@ impl_writeable_tlv_based_enum_upgradable!(PendingOutboundPayment,
2192
2198
( 2 , keysend_preimage, required) ,
2193
2199
( 4 , retry_strategy, required) ,
2194
2200
( 6 , route_params, required) ,
2201
+ ( 8 , invoice_request, required) ,
2195
2202
} ,
2196
2203
) ;
2197
2204
2198
2205
#[ cfg( test) ]
2199
2206
mod tests {
2207
+ use bitcoin:: hex:: FromHex ;
2200
2208
use bitcoin:: network:: Network ;
2201
2209
use bitcoin:: secp256k1:: { PublicKey , Secp256k1 , SecretKey } ;
2202
2210
2203
2211
use core:: time:: Duration ;
2204
2212
2205
2213
use crate :: blinded_path:: EmptyNodeIdLookUp ;
2206
2214
use crate :: events:: { Event , PathFailure , PaymentFailureReason } ;
2215
+ use crate :: io:: Cursor ;
2207
2216
use crate :: ln:: types:: { PaymentHash , PaymentPreimage } ;
2208
2217
use crate :: ln:: channelmanager:: { PaymentId , RecipientOnionFields } ;
2209
2218
use crate :: ln:: features:: { Bolt12InvoiceFeatures , ChannelFeatures , NodeFeatures } ;
2210
2219
use crate :: ln:: msgs:: { ErrorAction , LightningError } ;
2211
2220
use crate :: ln:: outbound_payment:: { Bolt12PaymentError , OutboundPayments , PendingOutboundPayment , Retry , RetryableSendFailure , StaleExpiration } ;
2212
2221
#[ cfg( feature = "std" ) ]
2213
2222
use crate :: offers:: invoice:: DEFAULT_RELATIVE_EXPIRY ;
2223
+ use crate :: offers:: invoice_request:: InvoiceRequest ;
2214
2224
use crate :: offers:: offer:: OfferBuilder ;
2215
2225
use crate :: offers:: test_utils:: * ;
2216
2226
use crate :: routing:: gossip:: NetworkGraph ;
2217
2227
use crate :: routing:: router:: { InFlightHtlcs , Path , PaymentParameters , Route , RouteHop , RouteParameters } ;
2218
2228
use crate :: sync:: { Arc , Mutex , RwLock } ;
2219
2229
use crate :: util:: errors:: APIError ;
2220
2230
use crate :: util:: hash_tables:: new_hash_map;
2231
+ use crate :: util:: ser:: Readable ;
2221
2232
use crate :: util:: test_utils;
2222
2233
2223
2234
use alloc:: collections:: VecDeque ;
@@ -2759,6 +2770,11 @@ mod tests {
2759
2770
assert ! ( pending_events. lock( ) . unwrap( ) . is_empty( ) ) ;
2760
2771
}
2761
2772
2773
+ fn invoice_request ( ) -> InvoiceRequest {
2774
+ let invreq_bytes = <Vec < u8 > >:: from_hex ( "00200101010101010101010101010101010101010101010101010101010101010101080203e80a00162102bb58b5feca505c74edc000d8282fc556e51a1024fc8e7d7e56c6f887c5c8d5f25821035be5e9478209674a96e60f1f037f6176540fd001fa1d64694770c56a7709c42cf040a31d68198578a5aa1fe57de5f6d33f89c1556752cb333dbb56ac727f751893804d3a26b42909f1952fb1db8080238f9476b829160387692df35ff85dfe72e2ed" ) . unwrap ( ) ;
2775
+ Readable :: read ( & mut Cursor :: new ( & invreq_bytes[ ..] ) ) . unwrap ( )
2776
+ }
2777
+
2762
2778
#[ test]
2763
2779
fn time_out_unreleased_async_payments ( ) {
2764
2780
let pending_events = Mutex :: new ( VecDeque :: new ( ) ) ;
@@ -2780,6 +2796,7 @@ mod tests {
2780
2796
keysend_preimage : PaymentPreimage ( [ 0 ; 32 ] ) ,
2781
2797
retry_strategy : Retry :: Attempts ( 0 ) ,
2782
2798
route_params,
2799
+ invoice_request : invoice_request ( ) ,
2783
2800
} ;
2784
2801
outbounds. insert ( payment_id, outbound) ;
2785
2802
core:: mem:: drop ( outbounds) ;
@@ -2826,6 +2843,7 @@ mod tests {
2826
2843
keysend_preimage : PaymentPreimage ( [ 0 ; 32 ] ) ,
2827
2844
retry_strategy : Retry :: Attempts ( 0 ) ,
2828
2845
route_params,
2846
+ invoice_request : invoice_request ( ) ,
2829
2847
} ;
2830
2848
outbounds. insert ( payment_id, outbound) ;
2831
2849
core:: mem:: drop ( outbounds) ;
0 commit comments