@@ -10845,43 +10845,51 @@ where
1084510845 &self.logger, None, None, Some(invoice.payment_hash()),
1084610846 );
1084710847
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);
1086610855
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)),
1087410859 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
1088310862 },
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+ }
1088410888 },
10889+ // Otherwise, don't abandon unknown, pending, or successful payments.
10890+ Err(Bolt12PaymentError::UnexpectedInvoice)
10891+ | Err(Bolt12PaymentError::DuplicateInvoice)
10892+ | Ok(()) => ResponseInstruction::NoResponse,
1088510893 }
1088610894 },
1088710895 #[cfg(async_payments)]
0 commit comments