X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fln%2Foutbound_payment.rs;h=d6d9f7aaca02f7fb3ae7296467a91fa6414dba29;hb=622f7f2f7943295ccf9393547390dc09852c8143;hp=1642f28efc7b36dbfa7739bf886ebb58b9eb7c70;hpb=c7219e46831751c52026932294c33fce24121d84;p=rust-lightning diff --git a/lightning/src/ln/outbound_payment.rs b/lightning/src/ln/outbound_payment.rs index 1642f28e..d6d9f7aa 100644 --- a/lightning/src/ln/outbound_payment.rs +++ b/lightning/src/ln/outbound_payment.rs @@ -594,10 +594,26 @@ impl RecipientOnionFields { /// Note that if this field is non-empty, it will contain strictly increasing TLVs, each /// represented by a `(u64, Vec)` for its type number and serialized value respectively. /// This is validated when setting this field using [`Self::with_custom_tlvs`]. + #[cfg(not(c_bindings))] pub fn custom_tlvs(&self) -> &Vec<(u64, Vec)> { &self.custom_tlvs } + /// Gets the custom TLVs that will be sent or have been received. + /// + /// Custom TLVs allow sending extra application-specific data with a payment. They provide + /// additional flexibility on top of payment metadata, as while other implementations may + /// require `payment_metadata` to reflect metadata provided in an invoice, custom TLVs + /// do not have this restriction. + /// + /// Note that if this field is non-empty, it will contain strictly increasing TLVs, each + /// represented by a `(u64, Vec)` for its type number and serialized value respectively. + /// This is validated when setting this field using [`Self::with_custom_tlvs`]. + #[cfg(c_bindings)] + pub fn custom_tlvs(&self) -> Vec<(u64, Vec)> { + self.custom_tlvs.clone() + } + /// When we have received some HTLC(s) towards an MPP payment, as we receive further HTLC(s) we /// have to make sure that some fields match exactly across the parts. For those that aren't /// required to match, if they don't match we should remove them so as to not expose data @@ -885,12 +901,10 @@ impl OutboundPayments { RetryableSendFailure::RouteNotFound })?; - if let Some(route_route_params) = route.route_params.as_mut() { - if route_route_params.final_value_msat != route_params.final_value_msat { - debug_assert!(false, - "Routers are expected to return a route which includes the requested final_value_msat"); - route_route_params.final_value_msat = route_params.final_value_msat; - } + if route.route_params.as_ref() != Some(&route_params) { + debug_assert!(false, + "Routers are expected to return a Route which includes the requested RouteParameters"); + route.route_params = Some(route_params.clone()); } let onion_session_privs = self.add_new_pending_payment(payment_hash, @@ -947,12 +961,10 @@ impl OutboundPayments { } }; - if let Some(route_route_params) = route.route_params.as_mut() { - if route_route_params.final_value_msat != route_params.final_value_msat { - debug_assert!(false, - "Routers are expected to return a route which includes the requested final_value_msat"); - route_route_params.final_value_msat = route_params.final_value_msat; - } + if route.route_params.as_ref() != Some(&route_params) { + debug_assert!(false, + "Routers are expected to return a Route which includes the requested RouteParameters"); + route.route_params = Some(route_params.clone()); } for path in route.paths.iter() { @@ -1942,7 +1954,9 @@ mod tests { router.expect_find_route(route_params.clone(), Ok(route.clone())); let mut route_params_w_failed_scid = route_params.clone(); route_params_w_failed_scid.payment_params.previously_failed_channels.push(failed_scid); - router.expect_find_route(route_params_w_failed_scid, Ok(route.clone())); + let mut route_w_failed_scid = route.clone(); + route_w_failed_scid.route_params = Some(route_params_w_failed_scid.clone()); + router.expect_find_route(route_params_w_failed_scid, Ok(route_w_failed_scid)); router.expect_find_route(route_params.clone(), Ok(route.clone())); router.expect_find_route(route_params.clone(), Ok(route.clone()));