@@ -1998,10 +1998,10 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
1998
1998
/// bit set (either as required or as available). If multiple paths are present in the Route,
1999
1999
/// we assume the invoice had the basic_mpp feature set.
2000
2000
pub fn send_payment ( & self , route : & Route , payment_hash : PaymentHash , payment_secret : & Option < PaymentSecret > ) -> Result < PaymentId , PaymentSendFailure > {
2001
- self . send_payment_internal ( route, payment_hash, payment_secret, None , None )
2001
+ self . send_payment_internal ( route, payment_hash, payment_secret, None , None , None )
2002
2002
}
2003
2003
2004
- fn send_payment_internal ( & self , route : & Route , payment_hash : PaymentHash , payment_secret : & Option < PaymentSecret > , keysend_preimage : Option < PaymentPreimage > , payment_id : Option < PaymentId > ) -> Result < PaymentId , PaymentSendFailure > {
2004
+ fn send_payment_internal ( & self , route : & Route , payment_hash : PaymentHash , payment_secret : & Option < PaymentSecret > , keysend_preimage : Option < PaymentPreimage > , payment_id : Option < PaymentId > , recv_value_msat : Option < u64 > ) -> Result < PaymentId , PaymentSendFailure > {
2005
2005
if route. paths . len ( ) < 1 {
2006
2006
return Err ( PaymentSendFailure :: ParameterError ( APIError :: RouteError { err : "There must be at least one path to send over" } ) ) ;
2007
2007
}
@@ -2035,6 +2035,10 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
2035
2035
if path_errs. iter ( ) . any ( |e| e. is_err ( ) ) {
2036
2036
return Err ( PaymentSendFailure :: PathParameterError ( path_errs) ) ;
2037
2037
}
2038
+ if let Some ( amt_msat) = recv_value_msat {
2039
+ debug_assert ! ( amt_msat >= total_value) ;
2040
+ total_value = amt_msat;
2041
+ }
2038
2042
2039
2043
let cur_height = self . best_block . read ( ) . unwrap ( ) . height ( ) + 1 ;
2040
2044
let mut results = Vec :: new ( ) ;
@@ -2083,7 +2087,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
2083
2087
None => PaymentPreimage ( self . keys_manager . get_secure_random_bytes ( ) ) ,
2084
2088
} ;
2085
2089
let payment_hash = PaymentHash ( Sha256 :: hash ( & preimage. 0 ) . into_inner ( ) ) ;
2086
- match self . send_payment_internal ( route, payment_hash, & None , Some ( preimage) , None ) {
2090
+ match self . send_payment_internal ( route, payment_hash, & None , Some ( preimage) , None , None ) {
2087
2091
Ok ( payment_id) => Ok ( ( payment_hash, payment_id) ) ,
2088
2092
Err ( e) => Err ( e)
2089
2093
}
@@ -5936,7 +5940,7 @@ mod tests {
5936
5940
5937
5941
let test_preimage = PaymentPreimage ( [ 42 ; 32 ] ) ;
5938
5942
let mismatch_payment_hash = PaymentHash ( [ 43 ; 32 ] ) ;
5939
- let _ = nodes[ 0 ] . node . send_payment_internal ( & route, mismatch_payment_hash, & None , Some ( test_preimage) , None ) . unwrap ( ) ;
5943
+ let _ = nodes[ 0 ] . node . send_payment_internal ( & route, mismatch_payment_hash, & None , Some ( test_preimage) , None , None ) . unwrap ( ) ;
5940
5944
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
5941
5945
5942
5946
let updates = get_htlc_update_msgs ! ( nodes[ 0 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
@@ -5973,7 +5977,7 @@ mod tests {
5973
5977
let test_preimage = PaymentPreimage ( [ 42 ; 32 ] ) ;
5974
5978
let test_secret = PaymentSecret ( [ 43 ; 32 ] ) ;
5975
5979
let payment_hash = PaymentHash ( Sha256 :: hash ( & test_preimage. 0 ) . into_inner ( ) ) ;
5976
- let _ = nodes[ 0 ] . node . send_payment_internal ( & route, payment_hash, & Some ( test_secret) , Some ( test_preimage) , None ) . unwrap ( ) ;
5980
+ let _ = nodes[ 0 ] . node . send_payment_internal ( & route, payment_hash, & Some ( test_secret) , Some ( test_preimage) , None , None ) . unwrap ( ) ;
5977
5981
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
5978
5982
5979
5983
let updates = get_htlc_update_msgs ! ( nodes[ 0 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
0 commit comments