Skip to content

Commit 5d31630

Browse files
Refactor send_payment internals for retries
We want to reuse send_payment internal functions for retries, so some need to now be parameterized by PaymentId to avoid generating a new PaymentId on retry
1 parent a1fc379 commit 5d31630

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1998,10 +1998,10 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
19981998
/// bit set (either as required or as available). If multiple paths are present in the Route,
19991999
/// we assume the invoice had the basic_mpp feature set.
20002000
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)
2001+
self.send_payment_internal(route, payment_hash, payment_secret, None, None)
20022002
}
20032003

2004-
fn send_payment_internal(&self, route: &Route, payment_hash: PaymentHash, payment_secret: &Option<PaymentSecret>, keysend_preimage: Option<PaymentPreimage>) -> 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>) -> Result<PaymentId, PaymentSendFailure> {
20052005
if route.paths.len() < 1 {
20062006
return Err(PaymentSendFailure::ParameterError(APIError::RouteError{err: "There must be at least one path to send over"}));
20072007
}
@@ -2017,7 +2017,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
20172017
let mut total_value = 0;
20182018
let our_node_id = self.get_our_node_id();
20192019
let mut path_errs = Vec::with_capacity(route.paths.len());
2020-
let payment_id = PaymentId(self.keys_manager.get_secure_random_bytes());
2020+
let payment_id = if let Some(id) = payment_id { id } else { PaymentId(self.keys_manager.get_secure_random_bytes()) };
20212021
'path_check: for path in route.paths.iter() {
20222022
if path.len() < 1 || path.len() > 20 {
20232023
path_errs.push(Err(APIError::RouteError{err: "Path didn't go anywhere/had bogus size"}));
@@ -2083,7 +2083,7 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
20832083
None => PaymentPreimage(self.keys_manager.get_secure_random_bytes()),
20842084
};
20852085
let payment_hash = PaymentHash(Sha256::hash(&preimage.0).into_inner());
2086-
match self.send_payment_internal(route, payment_hash, &None, Some(preimage)) {
2086+
match self.send_payment_internal(route, payment_hash, &None, Some(preimage), None) {
20872087
Ok(payment_id) => Ok((payment_hash, payment_id)),
20882088
Err(e) => Err(e)
20892089
}
@@ -5936,7 +5936,7 @@ mod tests {
59365936

59375937
let test_preimage = PaymentPreimage([42; 32]);
59385938
let mismatch_payment_hash = PaymentHash([43; 32]);
5939-
let _ = nodes[0].node.send_payment_internal(&route, mismatch_payment_hash, &None, Some(test_preimage)).unwrap();
5939+
let _ = nodes[0].node.send_payment_internal(&route, mismatch_payment_hash, &None, Some(test_preimage), None).unwrap();
59405940
check_added_monitors!(nodes[0], 1);
59415941

59425942
let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
@@ -5973,7 +5973,7 @@ mod tests {
59735973
let test_preimage = PaymentPreimage([42; 32]);
59745974
let test_secret = PaymentSecret([43; 32]);
59755975
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)).unwrap();
5976+
let _ = nodes[0].node.send_payment_internal(&route, payment_hash, &Some(test_secret), Some(test_preimage), None).unwrap();
59775977
check_added_monitors!(nodes[0], 1);
59785978

59795979
let updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());

0 commit comments

Comments
 (0)