Skip to content

Commit 43c7d40

Browse files
Pass context into held_htlc_available message handling.
Useful for using the payment_id within to look up the outbound payment.
1 parent 791908b commit 43c7d40

File tree

6 files changed

+20
-11
lines changed

6 files changed

+20
-11
lines changed

fuzz/src/onion_message.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use bitcoin::secp256k1::ecdsa::RecoverableSignature;
66
use bitcoin::secp256k1::schnorr;
77
use bitcoin::secp256k1::{self, PublicKey, Scalar, Secp256k1, SecretKey};
88

9-
use lightning::blinded_path::message::{MessageContext, OffersContext};
9+
use lightning::blinded_path::message::{AsyncPaymentsContext, MessageContext, OffersContext};
1010
use lightning::blinded_path::{BlindedPath, EmptyNodeIdLookUp};
1111
use lightning::ln::features::InitFeatures;
1212
use lightning::ln::msgs::{self, DecodeError, OnionMessageHandler};
@@ -125,7 +125,7 @@ impl AsyncPaymentsMessageHandler for TestAsyncPaymentsMessageHandler {
125125
responder
126126
.respond(ReleaseHeldHtlc { payment_release_secret: message.payment_release_secret })
127127
}
128-
fn release_held_htlc(&self, _message: ReleaseHeldHtlc) {}
128+
fn release_held_htlc(&self, _message: ReleaseHeldHtlc, _context: AsyncPaymentsContext) {}
129129
}
130130

131131
#[derive(Debug)]

lightning/src/ln/channelmanager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use bitcoin::secp256k1::{SecretKey,PublicKey};
3131
use bitcoin::secp256k1::Secp256k1;
3232
use bitcoin::{secp256k1, Sequence};
3333

34-
use crate::blinded_path::message::{MessageContext, OffersContext};
34+
use crate::blinded_path::message::{AsyncPaymentsContext, MessageContext, OffersContext};
3535
use crate::blinded_path::{BlindedPath, NodeIdLookUp};
3636
use crate::blinded_path::message::ForwardNode;
3737
use crate::blinded_path::payment::{Bolt12OfferContext, Bolt12RefundContext, PaymentConstraints, PaymentContext, ReceiveTlvs};
@@ -10686,7 +10686,7 @@ where
1068610686
ResponseInstruction::NoResponse
1068710687
}
1068810688

10689-
fn release_held_htlc(&self, _message: ReleaseHeldHtlc) {}
10689+
fn release_held_htlc(&self, _message: ReleaseHeldHtlc, _context: AsyncPaymentsContext) {}
1069010690

1069110691
fn release_pending_messages(&self) -> Vec<PendingOnionMessage<AsyncPaymentsMessage>> {
1069210692
Vec::new()

lightning/src/ln/peer_handler.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
use bitcoin::blockdata::constants::ChainHash;
1919
use bitcoin::secp256k1::{self, Secp256k1, SecretKey, PublicKey};
2020

21-
use crate::blinded_path::message::OffersContext;
21+
use crate::blinded_path::message::{AsyncPaymentsContext, OffersContext};
2222
use crate::sign::{NodeSigner, Recipient};
2323
use crate::events::{MessageSendEvent, MessageSendEventsProvider};
2424
use crate::ln::types::ChannelId;
@@ -152,11 +152,11 @@ impl OffersMessageHandler for IgnoringMessageHandler {
152152
}
153153
impl AsyncPaymentsMessageHandler for IgnoringMessageHandler {
154154
fn held_htlc_available(
155-
&self, _message: HeldHtlcAvailable, _responder: Option<Responder>,
155+
&self, _message: HeldHtlcAvailable, _responder: Option<Responder>
156156
) -> ResponseInstruction<ReleaseHeldHtlc> {
157157
ResponseInstruction::NoResponse
158158
}
159-
fn release_held_htlc(&self, _message: ReleaseHeldHtlc) {}
159+
fn release_held_htlc(&self, _message: ReleaseHeldHtlc, _context: AsyncPaymentsContext) {}
160160
}
161161
impl CustomOnionMessageHandler for IgnoringMessageHandler {
162162
type CustomMessage = Infallible;

lightning/src/onion_message/async_payments.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
//! Message handling for async payments.
1111
12+
use crate::blinded_path::message::AsyncPaymentsContext;
1213
use crate::io;
1314
use crate::ln::msgs::DecodeError;
1415
#[cfg(not(c_bindings))]
@@ -34,7 +35,7 @@ pub trait AsyncPaymentsMessageHandler {
3435

3536
/// Handle a [`ReleaseHeldHtlc`] message. If authentication of the message succeeds, an HTLC
3637
/// should be released to the corresponding payee.
37-
fn release_held_htlc(&self, message: ReleaseHeldHtlc);
38+
fn release_held_htlc(&self, message: ReleaseHeldHtlc, context: AsyncPaymentsContext);
3839

3940
/// Release any [`AsyncPaymentsMessage`]s that need to be sent.
4041
///

lightning/src/onion_message/functional_tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
//! Onion message testing and test utilities live here.
1111
1212
use crate::blinded_path::{BlindedPath, EmptyNodeIdLookUp};
13-
use crate::blinded_path::message::{ForwardNode, MessageContext, OffersContext};
13+
use crate::blinded_path::message::{AsyncPaymentsContext, ForwardNode, MessageContext, OffersContext};
1414
use crate::events::{Event, EventsProvider};
1515
use crate::ln::features::{ChannelFeatures, InitFeatures};
1616
use crate::ln::msgs::{self, DecodeError, OnionMessageHandler};
@@ -89,7 +89,7 @@ impl AsyncPaymentsMessageHandler for TestAsyncPaymentsMessageHandler {
8989
) -> ResponseInstruction<ReleaseHeldHtlc> {
9090
ResponseInstruction::NoResponse
9191
}
92-
fn release_held_htlc(&self, _message: ReleaseHeldHtlc) {}
92+
fn release_held_htlc(&self, _message: ReleaseHeldHtlc, _context: AsyncPaymentsContext) {}
9393
}
9494

9595
#[derive(Clone, Debug, PartialEq)]

lightning/src/onion_message/messenger.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1473,14 +1473,22 @@ where
14731473
},
14741474
#[cfg(async_payments)]
14751475
ParsedOnionMessageContents::AsyncPayments(AsyncPaymentsMessage::HeldHtlcAvailable(msg)) => {
1476+
debug_assert!(context.is_none());
14761477
let response_instructions = self.async_payments_handler.held_htlc_available(
14771478
msg, responder
14781479
);
14791480
let _ = self.handle_onion_message_response(response_instructions);
14801481
},
14811482
#[cfg(async_payments)]
14821483
ParsedOnionMessageContents::AsyncPayments(AsyncPaymentsMessage::ReleaseHeldHtlc(msg)) => {
1483-
self.async_payments_handler.release_held_htlc(msg);
1484+
let context = match context {
1485+
Some(MessageContext::AsyncPayments(context)) => context,
1486+
_ => {
1487+
debug_assert!(false, "Shouldn't have triggered this case.");
1488+
return
1489+
},
1490+
};
1491+
self.async_payments_handler.release_held_htlc(msg, context);
14841492
},
14851493
ParsedOnionMessageContents::Custom(msg) => {
14861494
let context = match context {

0 commit comments

Comments
 (0)