@@ -10846,43 +10846,51 @@ where
1084610846 &self.logger, None, None, Some(invoice.payment_hash()),
1084710847 );
1084810848
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);
1086710856
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)),
1087510860 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
1088410863 },
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+ }
1088510889 },
10890+ // Otherwise, don't abandon unknown, pending, or successful payments.
10891+ Err(Bolt12PaymentError::UnexpectedInvoice)
10892+ | Err(Bolt12PaymentError::DuplicateInvoice)
10893+ | Ok(()) => ResponseInstruction::NoResponse,
1088610894 }
1088710895 },
1088810896 #[cfg(async_payments)]
0 commit comments