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