@@ -65,7 +65,7 @@ use crate::offers::merkle::SignError;
65
65
use crate::offers::offer::{Offer, OfferBuilder};
66
66
use crate::offers::parse::Bolt12SemanticError;
67
67
use crate::offers::refund::{Refund, RefundBuilder};
68
- use crate::onion_message::messenger::{Destination, MessageRouter, PendingOnionMessage, new_pending_onion_message };
68
+ use crate::onion_message::messenger::{new_pending_onion_message, Destination, MessageRouter, PendingOnionMessage, Responder, ResponseInstruction };
69
69
use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
70
70
use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
71
71
use crate::sign::ecdsa::WriteableEcdsaChannelSigner;
@@ -76,6 +76,7 @@ use crate::util::string::UntrustedString;
76
76
use crate::util::ser::{BigSize, FixedLengthReader, Readable, ReadableArgs, MaybeReadable, Writeable, Writer, VecWriter};
77
77
use crate::util::logger::{Level, Logger, WithContext};
78
78
use crate::util::errors::APIError;
79
+
79
80
#[cfg(not(c_bindings))]
80
81
use {
81
82
crate::offers::offer::DerivedMetadata,
@@ -9450,24 +9451,32 @@ where
9450
9451
R::Target: Router,
9451
9452
L::Target: Logger,
9452
9453
{
9453
- fn handle_message(&self, message: OffersMessage) -> Option<OffersMessage> {
9454
+ fn handle_message(&self, message: OffersMessage, responder: Option<Responder<OffersMessage>>) -> ResponseInstruction<OffersMessage>
9455
+ {
9454
9456
let secp_ctx = &self.secp_ctx;
9455
9457
let expanded_key = &self.inbound_payment_key;
9456
9458
9457
- match message {
9459
+ let responder = match responder {
9460
+ Some(responder) => responder,
9461
+ None => return ResponseInstruction::NoResponse,
9462
+ };
9463
+
9464
+ let response_opt = match &message {
9458
9465
OffersMessage::InvoiceRequest(invoice_request) => {
9459
9466
let amount_msats = match InvoiceBuilder::<DerivedSigningPubkey>::amount_msats(
9460
9467
&invoice_request
9461
9468
) {
9462
9469
Ok(amount_msats) => amount_msats,
9463
- Err(error) => return Some(OffersMessage::InvoiceError(error.into())),
9470
+ Err(error) => {
9471
+ return responder.respond(OffersMessage::InvoiceError(error.into()));
9472
+ }
9464
9473
};
9465
- let invoice_request = match invoice_request.verify(expanded_key, secp_ctx) {
9474
+ let invoice_request = match invoice_request.clone(). verify(expanded_key, secp_ctx) {
9466
9475
Ok(invoice_request) => invoice_request,
9467
9476
Err(()) => {
9468
9477
let error = Bolt12SemanticError::InvalidMetadata;
9469
- return Some (OffersMessage::InvoiceError(error.into()));
9470
- },
9478
+ return responder.respond (OffersMessage::InvoiceError(error.into()));
9479
+ }
9471
9480
};
9472
9481
9473
9482
let relative_expiry = DEFAULT_RELATIVE_EXPIRY.as_secs() as u32;
@@ -9477,8 +9486,8 @@ where
9477
9486
Ok((payment_hash, payment_secret)) => (payment_hash, payment_secret),
9478
9487
Err(()) => {
9479
9488
let error = Bolt12SemanticError::InvalidAmount;
9480
- return Some (OffersMessage::InvoiceError(error.into()));
9481
- },
9489
+ return responder.respond (OffersMessage::InvoiceError(error.into()));
9490
+ }
9482
9491
};
9483
9492
9484
9493
let payment_paths = match self.create_blinded_payment_paths(
@@ -9487,8 +9496,8 @@ where
9487
9496
Ok(payment_paths) => payment_paths,
9488
9497
Err(()) => {
9489
9498
let error = Bolt12SemanticError::MissingPaths;
9490
- return Some (OffersMessage::InvoiceError(error.into()));
9491
- },
9499
+ return responder.respond (OffersMessage::InvoiceError(error.into()));
9500
+ }
9492
9501
};
9493
9502
9494
9503
#[cfg(not(feature = "std"))]
@@ -9565,6 +9574,11 @@ where
9565
9574
log_trace!(self.logger, "Received invoice_error: {}", invoice_error);
9566
9575
None
9567
9576
},
9577
+ };
9578
+
9579
+ match response_opt {
9580
+ Some(response) => responder.respond(response),
9581
+ None => ResponseInstruction::NoResponse
9568
9582
}
9569
9583
}
9570
9584
0 commit comments