@@ -10845,43 +10845,51 @@ where
10845
10845
&self.logger, None, None, Some(invoice.payment_hash()),
10846
10846
);
10847
10847
10848
- let result = {
10849
- let features = self.bolt12_invoice_features();
10850
- if invoice.invoice_features().requires_unknown_bits_from(&features) {
10851
- Err(InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures))
10852
- } else if self.default_configuration.manually_handle_bolt12_invoices {
10853
- let event = Event::InvoiceReceived {
10854
- payment_id, invoice, context, responder,
10855
- };
10856
- self.pending_events.lock().unwrap().push_back((event, None));
10857
- return ResponseInstruction::NoResponse;
10858
- } else {
10859
- self.send_payment_for_verified_bolt12_invoice(&invoice, payment_id)
10860
- .map_err(|e| {
10861
- log_trace!(logger, "Failed paying invoice: {:?}", e);
10862
- InvoiceError::from_string(format!("{:?}", e))
10863
- })
10864
- }
10865
- };
10848
+ let features = self.bolt12_invoice_features();
10849
+ if invoice.invoice_features().requires_unknown_bits_from(&features) {
10850
+ log_trace!(
10851
+ logger, "Invoice requires unknown features: {:?}",
10852
+ invoice.invoice_features(),
10853
+ );
10854
+ abandon_if_payment(context);
10866
10855
10867
- match result {
10868
- Ok(_) => ResponseInstruction::NoResponse,
10869
- Err(err) => match responder {
10870
- Some(responder) => {
10871
- abandon_if_payment(context);
10872
- responder.respond(OffersMessage::InvoiceError(err))
10873
- },
10856
+ let error = InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures);
10857
+ let response = match responder {
10858
+ Some(responder) => responder.respond(OffersMessage::InvoiceError(error)),
10874
10859
None => {
10875
- abandon_if_payment(context);
10876
- log_trace!(
10877
- logger,
10878
- "An error response was generated, but there is no reply_path specified \
10879
- for sending the response. Error: {}",
10880
- err
10881
- );
10882
- return ResponseInstruction::NoResponse;
10860
+ log_trace!(logger, "No reply path to send error: {:?}", error);
10861
+ ResponseInstruction::NoResponse
10883
10862
},
10863
+ };
10864
+ return response;
10865
+ }
10866
+
10867
+ if self.default_configuration.manually_handle_bolt12_invoices {
10868
+ let event = Event::InvoiceReceived {
10869
+ payment_id, invoice, context, responder,
10870
+ };
10871
+ self.pending_events.lock().unwrap().push_back((event, None));
10872
+ return ResponseInstruction::NoResponse;
10873
+ }
10874
+
10875
+ match self.send_payment_for_verified_bolt12_invoice(&invoice, payment_id) {
10876
+ // Payments with SendingFailed error will already have been abandoned.
10877
+ Err(Bolt12PaymentError::SendingFailed(e)) => {
10878
+ log_trace!(logger, "Failed paying invoice: {:?}", e);
10879
+
10880
+ let err = InvoiceError::from_string(format!("{:?}", e));
10881
+ match responder {
10882
+ Some(responder) => responder.respond(OffersMessage::InvoiceError(err)),
10883
+ None => {
10884
+ log_trace!(logger, "No reply path to send error: {:?}", err);
10885
+ ResponseInstruction::NoResponse
10886
+ },
10887
+ }
10884
10888
},
10889
+ // Otherwise, don't abandon unknown, pending, or successful payments.
10890
+ Err(Bolt12PaymentError::UnexpectedInvoice)
10891
+ | Err(Bolt12PaymentError::DuplicateInvoice)
10892
+ | Ok(()) => ResponseInstruction::NoResponse,
10885
10893
}
10886
10894
},
10887
10895
#[cfg(async_payments)]
0 commit comments