@@ -10943,6 +10943,35 @@ where
1094310943 let secp_ctx = &self.secp_ctx;
1094410944 let expanded_key = &self.inbound_payment_key;
1094510945
10946+ macro_rules! handle_pay_invoice_res {
10947+ ($res: expr, $invoice: expr, $logger: expr) => {{
10948+ let error = match $res {
10949+ Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
10950+ log_trace!(
10951+ $logger, "Invoice requires unknown features: {:?}",
10952+ $invoice.invoice_features()
10953+ );
10954+ InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
10955+ },
10956+ Err(Bolt12PaymentError::SendingFailed(e)) => {
10957+ log_trace!($logger, "Failed paying invoice: {:?}", e);
10958+ InvoiceError::from_string(format!("{:?}", e))
10959+ },
10960+ Err(Bolt12PaymentError::UnexpectedInvoice)
10961+ | Err(Bolt12PaymentError::DuplicateInvoice)
10962+ | Ok(()) => return None,
10963+ };
10964+
10965+ match responder {
10966+ Some(responder) => return Some((OffersMessage::InvoiceError(error), responder.respond())),
10967+ None => {
10968+ log_trace!($logger, "No reply path to send error: {:?}", error);
10969+ return None
10970+ },
10971+ }
10972+ }}
10973+ }
10974+
1094610975 match message {
1094710976 OffersMessage::InvoiceRequest(invoice_request) => {
1094810977 let responder = match responder {
@@ -11069,32 +11098,8 @@ where
1106911098 return None;
1107011099 }
1107111100
11072- let error = match self.send_payment_for_verified_bolt12_invoice(
11073- &invoice, payment_id,
11074- ) {
11075- Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
11076- log_trace!(
11077- logger, "Invoice requires unknown features: {:?}",
11078- invoice.invoice_features()
11079- );
11080- InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
11081- },
11082- Err(Bolt12PaymentError::SendingFailed(e)) => {
11083- log_trace!(logger, "Failed paying invoice: {:?}", e);
11084- InvoiceError::from_string(format!("{:?}", e))
11085- },
11086- Err(Bolt12PaymentError::UnexpectedInvoice)
11087- | Err(Bolt12PaymentError::DuplicateInvoice)
11088- | Ok(()) => return None,
11089- };
11090-
11091- match responder {
11092- Some(responder) => Some((OffersMessage::InvoiceError(error), responder.respond())),
11093- None => {
11094- log_trace!(logger, "No reply path to send error: {:?}", error);
11095- None
11096- },
11097- }
11101+ let res = self.send_payment_for_verified_bolt12_invoice(&invoice, payment_id);
11102+ handle_pay_invoice_res!(res, invoice, logger);
1109811103 },
1109911104 #[cfg(async_payments)]
1110011105 OffersMessage::StaticInvoice(invoice) => {
@@ -11107,30 +11112,8 @@ where
1110711112 },
1110811113 _ => return None
1110911114 };
11110- // TODO: DRY this with the above regular invoice error handling
11111- let error = match self.initiate_async_payment(&invoice, payment_id) {
11112- Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
11113- log_trace!(
11114- self.logger, "Invoice requires unknown features: {:?}",
11115- invoice.invoice_features()
11116- );
11117- InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
11118- },
11119- Err(Bolt12PaymentError::SendingFailed(e)) => {
11120- log_trace!(self.logger, "Failed paying invoice: {:?}", e);
11121- InvoiceError::from_string(format!("{:?}", e))
11122- },
11123- Err(Bolt12PaymentError::UnexpectedInvoice)
11124- | Err(Bolt12PaymentError::DuplicateInvoice)
11125- | Ok(()) => return None,
11126- };
11127- match responder {
11128- Some(responder) => Some((OffersMessage::InvoiceError(error), responder.respond())),
11129- None => {
11130- log_trace!(self.logger, "No reply path to send error: {:?}", error);
11131- None
11132- },
11133- }
11115+ let res = self.initiate_async_payment(&invoice, payment_id);
11116+ handle_pay_invoice_res!(res, invoice, self.logger);
1113411117 },
1113511118 OffersMessage::InvoiceError(invoice_error) => {
1113611119 let payment_hash = match context {
0 commit comments