@@ -10856,6 +10856,35 @@ where
1085610856 let secp_ctx = &self.secp_ctx;
1085710857 let expanded_key = &self.inbound_payment_key;
1085810858
10859+ macro_rules! handle_pay_invoice_res {
10860+ ($res: expr, $invoice: expr, $logger: expr) => {{
10861+ let error = match $res {
10862+ Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
10863+ log_trace!(
10864+ $logger, "Invoice requires unknown features: {:?}",
10865+ $invoice.invoice_features()
10866+ );
10867+ InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
10868+ },
10869+ Err(Bolt12PaymentError::SendingFailed(e)) => {
10870+ log_trace!($logger, "Failed paying invoice: {:?}", e);
10871+ InvoiceError::from_string(format!("{:?}", e))
10872+ },
10873+ Err(Bolt12PaymentError::UnexpectedInvoice)
10874+ | Err(Bolt12PaymentError::DuplicateInvoice)
10875+ | Ok(()) => return None,
10876+ };
10877+
10878+ match responder {
10879+ Some(responder) => return Some((OffersMessage::InvoiceError(error), responder.respond())),
10880+ None => {
10881+ log_trace!($logger, "No reply path to send error: {:?}", error);
10882+ return None
10883+ },
10884+ }
10885+ }}
10886+ }
10887+
1085910888 match message {
1086010889 OffersMessage::InvoiceRequest(invoice_request) => {
1086110890 let responder = match responder {
@@ -10977,63 +11006,17 @@ where
1097711006 return None;
1097811007 }
1097911008
10980- let error = match self.send_payment_for_verified_bolt12_invoice(
10981- &invoice, payment_id,
10982- ) {
10983- Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
10984- log_trace!(
10985- logger, "Invoice requires unknown features: {:?}",
10986- invoice.invoice_features()
10987- );
10988- InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
10989- },
10990- Err(Bolt12PaymentError::SendingFailed(e)) => {
10991- log_trace!(logger, "Failed paying invoice: {:?}", e);
10992- InvoiceError::from_string(format!("{:?}", e))
10993- },
10994- Err(Bolt12PaymentError::UnexpectedInvoice)
10995- | Err(Bolt12PaymentError::DuplicateInvoice)
10996- | Ok(()) => return None,
10997- };
10998-
10999- match responder {
11000- Some(responder) => Some((OffersMessage::InvoiceError(error), responder.respond())),
11001- None => {
11002- log_trace!(logger, "No reply path to send error: {:?}", error);
11003- None
11004- },
11005- }
11009+ let res = self.send_payment_for_verified_bolt12_invoice(&invoice, payment_id);
11010+ handle_pay_invoice_res!(res, invoice, logger);
1100611011 },
1100711012 #[cfg(async_payments)]
1100811013 OffersMessage::StaticInvoice(invoice) => {
1100911014 let payment_id = match context {
1101011015 Some(OffersContext::OutboundPayment { payment_id, nonce: _, hmac: _ }) => payment_id,
1101111016 _ => return None
1101211017 };
11013- // TODO: DRY this with the above regular invoice error handling
11014- let error = match self.initiate_async_payment(&invoice, payment_id) {
11015- Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
11016- log_trace!(
11017- self.logger, "Invoice requires unknown features: {:?}",
11018- invoice.invoice_features()
11019- );
11020- InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
11021- },
11022- Err(Bolt12PaymentError::SendingFailed(e)) => {
11023- log_trace!(self.logger, "Failed paying invoice: {:?}", e);
11024- InvoiceError::from_string(format!("{:?}", e))
11025- },
11026- Err(Bolt12PaymentError::UnexpectedInvoice)
11027- | Err(Bolt12PaymentError::DuplicateInvoice)
11028- | Ok(()) => return None,
11029- };
11030- match responder {
11031- Some(responder) => Some((OffersMessage::InvoiceError(error), responder.respond())),
11032- None => {
11033- log_trace!(self.logger, "No reply path to send error: {:?}", error);
11034- None
11035- },
11036- }
11018+ let res = self.initiate_async_payment(&invoice, payment_id);
11019+ handle_pay_invoice_res!(res, invoice, self.logger);
1103711020 },
1103811021 OffersMessage::InvoiceError(invoice_error) => {
1103911022 let payment_hash = match context {
0 commit comments