+
+ // We want to move towards only using the `PaymentParameters` in the outbound payments
+ // map. However, for backwards-compatibility, we still need to support passing the
+ // `PaymentParameters` data that was shoved in the HTLC (and given to us via
+ // `payment_params`) back to the user.
+ let path_last_hop = path.last().expect("Outbound payments must have had a valid path");
+ if let Some(params) = payment.get_mut().payment_parameters() {
+ if params.final_cltv_expiry_delta.is_none() {
+ // This should be rare, but a user could provide None for the payment data, and
+ // we need it when we go to retry the payment, so fill it in.
+ params.final_cltv_expiry_delta = Some(path_last_hop.cltv_expiry_delta);
+ }
+ retry = Some(RouteParameters {
+ payment_params: params.clone(),
+ final_value_msat: path_last_hop.fee_msat,
+ final_cltv_expiry_delta: params.final_cltv_expiry_delta.unwrap(),
+ });
+ } else if let Some(params) = payment_params {
+ retry = Some(RouteParameters {
+ payment_params: params.clone(),
+ final_value_msat: path_last_hop.fee_msat,
+ final_cltv_expiry_delta:
+ if let Some(delta) = params.final_cltv_expiry_delta { delta }
+ else { path_last_hop.cltv_expiry_delta },
+ });
+ }
+