Skip to content

Commit 5b010f2

Browse files
Support including invreqs when paying to a route.
1 parent 6606f1d commit 5b010f2

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4096,14 +4096,14 @@ where
40964096
let _lck = self.total_consistency_lock.read().unwrap();
40974097
self.send_payment_along_path(SendAlongPathArgs {
40984098
path, payment_hash, recipient_onion: &recipient_onion, total_value,
4099-
cur_height, payment_id, keysend_preimage, session_priv_bytes
4099+
cur_height, payment_id, keysend_preimage, invoice_request: None, session_priv_bytes
41004100
})
41014101
}
41024102

41034103
fn send_payment_along_path(&self, args: SendAlongPathArgs) -> Result<(), APIError> {
41044104
let SendAlongPathArgs {
41054105
path, payment_hash, recipient_onion, total_value, cur_height, payment_id, keysend_preimage,
4106-
session_priv_bytes
4106+
invoice_request, session_priv_bytes
41074107
} = args;
41084108
// The top-level caller should hold the total_consistency_lock read lock.
41094109
debug_assert!(self.total_consistency_lock.try_write().is_err());
@@ -4112,7 +4112,7 @@ where
41124112

41134113
let (onion_packet, htlc_msat, htlc_cltv) = onion_utils::create_payment_onion(
41144114
&self.secp_ctx, &path, &session_priv, total_value, recipient_onion, cur_height,
4115-
payment_hash, keysend_preimage, None, prng_seed
4115+
payment_hash, keysend_preimage, invoice_request, prng_seed
41164116
).map_err(|e| {
41174117
let logger = WithContext::from(&self.logger, Some(path.hops.first().unwrap().pubkey), None, Some(*payment_hash));
41184118
log_error!(logger, "Failed to build an onion for path for payment hash {}", payment_hash);

lightning/src/ln/outbound_payment.rs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -714,6 +714,7 @@ pub(super) struct SendAlongPathArgs<'a> {
714714
pub cur_height: u32,
715715
pub payment_id: PaymentId,
716716
pub keysend_preimage: &'a Option<PaymentPreimage>,
717+
pub invoice_request: Option<&'a InvoiceRequest>,
717718
pub session_priv_bytes: [u8; 32],
718719
}
719720

@@ -767,7 +768,7 @@ impl OutboundPayments {
767768
F: Fn(SendAlongPathArgs) -> Result<(), APIError>
768769
{
769770
let onion_session_privs = self.add_new_pending_payment(payment_hash, recipient_onion.clone(), payment_id, None, route, None, None, entropy_source, best_block_height)?;
770-
self.pay_route_internal(route, payment_hash, &recipient_onion, None, payment_id, None,
771+
self.pay_route_internal(route, payment_hash, &recipient_onion, None, None, payment_id, None,
771772
onion_session_privs, node_signer, best_block_height, &send_payment_along_path)
772773
.map_err(|e| { self.remove_outbound_if_all_failed(payment_id, &e); e })
773774
}
@@ -812,7 +813,7 @@ impl OutboundPayments {
812813
let onion_session_privs = self.add_new_pending_payment(payment_hash, recipient_onion.clone(),
813814
payment_id, Some(preimage), &route, None, None, entropy_source, best_block_height)?;
814815

815-
match self.pay_route_internal(route, payment_hash, &recipient_onion, Some(preimage),
816+
match self.pay_route_internal(route, payment_hash, &recipient_onion, Some(preimage), None,
816817
payment_id, None, onion_session_privs, node_signer, best_block_height, &send_payment_along_path
817818
) {
818819
Ok(()) => Ok(payment_hash),
@@ -960,7 +961,7 @@ impl OutboundPayments {
960961
}
961962

962963
let result = self.pay_route_internal(
963-
&route, payment_hash, &recipient_onion, keysend_preimage, payment_id,
964+
&route, payment_hash, &recipient_onion, keysend_preimage, None, payment_id,
964965
Some(route_params.final_value_msat), onion_session_privs, node_signer,
965966
best_block_height, &send_payment_along_path
966967
);
@@ -1240,7 +1241,7 @@ impl OutboundPayments {
12401241
})?;
12411242

12421243
let res = self.pay_route_internal(&route, payment_hash, &recipient_onion,
1243-
keysend_preimage, payment_id, None, onion_session_privs, node_signer,
1244+
keysend_preimage, None, payment_id, None, onion_session_privs, node_signer,
12441245
best_block_height, &send_payment_along_path);
12451246
log_info!(logger, "Sending payment with id {} and hash {} returned {:?}",
12461247
payment_id, payment_hash, res);
@@ -1394,7 +1395,7 @@ impl OutboundPayments {
13941395
}
13951396
};
13961397
let res = self.pay_route_internal(&route, payment_hash, &recipient_onion, keysend_preimage,
1397-
payment_id, Some(total_msat), onion_session_privs, node_signer, best_block_height,
1398+
None, payment_id, Some(total_msat), onion_session_privs, node_signer, best_block_height,
13981399
&send_payment_along_path);
13991400
log_info!(logger, "Result retrying payment id {}: {:?}", &payment_id, res);
14001401
if let Err(e) = res {
@@ -1506,7 +1507,8 @@ impl OutboundPayments {
15061507

15071508
let recipient_onion_fields = RecipientOnionFields::spontaneous_empty();
15081509
match self.pay_route_internal(&route, payment_hash, &recipient_onion_fields,
1509-
None, payment_id, None, onion_session_privs, node_signer, best_block_height, &send_payment_along_path
1510+
None, None, payment_id, None, onion_session_privs, node_signer, best_block_height,
1511+
&send_payment_along_path
15101512
) {
15111513
Ok(()) => Ok((payment_hash, payment_id)),
15121514
Err(e) => {
@@ -1618,9 +1620,9 @@ impl OutboundPayments {
16181620

16191621
fn pay_route_internal<NS: Deref, F>(
16201622
&self, route: &Route, payment_hash: PaymentHash, recipient_onion: &RecipientOnionFields,
1621-
keysend_preimage: Option<PaymentPreimage>, payment_id: PaymentId, recv_value_msat: Option<u64>,
1622-
onion_session_privs: Vec<[u8; 32]>, node_signer: &NS, best_block_height: u32,
1623-
send_payment_along_path: &F
1623+
keysend_preimage: Option<PaymentPreimage>, invoice_request: Option<&InvoiceRequest>,
1624+
payment_id: PaymentId, recv_value_msat: Option<u64>, onion_session_privs: Vec<[u8; 32]>,
1625+
node_signer: &NS, best_block_height: u32, send_payment_along_path: &F
16241626
) -> Result<(), PaymentSendFailure>
16251627
where
16261628
NS::Target: NodeSigner,
@@ -1673,7 +1675,7 @@ impl OutboundPayments {
16731675
for (path, session_priv_bytes) in route.paths.iter().zip(onion_session_privs.into_iter()) {
16741676
let mut path_res = send_payment_along_path(SendAlongPathArgs {
16751677
path: &path, payment_hash: &payment_hash, recipient_onion, total_value,
1676-
cur_height, payment_id, keysend_preimage: &keysend_preimage,
1678+
cur_height, payment_id, keysend_preimage: &keysend_preimage, invoice_request,
16771679
session_priv_bytes
16781680
});
16791681
match path_res {
@@ -1758,7 +1760,7 @@ impl OutboundPayments {
17581760
F: Fn(SendAlongPathArgs) -> Result<(), APIError>,
17591761
{
17601762
self.pay_route_internal(route, payment_hash, &recipient_onion,
1761-
keysend_preimage, payment_id, recv_value_msat, onion_session_privs,
1763+
keysend_preimage, None, payment_id, recv_value_msat, onion_session_privs,
17621764
node_signer, best_block_height, &send_payment_along_path)
17631765
.map_err(|e| { self.remove_outbound_if_all_failed(payment_id, &e); e })
17641766
}

0 commit comments

Comments
 (0)