+ pub(super) fn send_spontaneous_payment<R: Deref, ES: Deref, NS: Deref, IH, SP, L: Deref>(
+ &self, payment_preimage: Option<PaymentPreimage>, payment_id: PaymentId,
+ retry_strategy: Retry, route_params: RouteParameters, router: &R,
+ first_hops: Vec<ChannelDetails>, inflight_htlcs: IH, entropy_source: &ES,
+ node_signer: &NS, best_block_height: u32, logger: &L, send_payment_along_path: SP
+ ) -> Result<PaymentHash, PaymentSendFailure>
+ where
+ R::Target: Router,
+ ES::Target: EntropySource,
+ NS::Target: NodeSigner,
+ L::Target: Logger,
+ IH: Fn() -> InFlightHtlcs,
+ SP: Fn(&Vec<RouteHop>, &Option<PaymentParameters>, &PaymentHash, &Option<PaymentSecret>, u64,
+ u32, PaymentId, &Option<PaymentPreimage>, [u8; 32]) -> Result<(), APIError>,
+ {
+ let preimage = payment_preimage
+ .unwrap_or_else(|| PaymentPreimage(entropy_source.get_secure_random_bytes()));
+ let payment_hash = PaymentHash(Sha256::hash(&preimage.0).into_inner());
+ self.pay_internal(payment_id, Some((payment_hash, &None, Some(preimage), retry_strategy)),
+ route_params, router, first_hops, &inflight_htlcs, entropy_source, node_signer,
+ best_block_height, logger, &send_payment_along_path)
+ .map(|()| payment_hash)
+ .map_err(|e| { self.remove_outbound_if_all_failed(payment_id, &e); e })
+ }
+
+ pub(super) fn send_spontaneous_payment_with_route<ES: Deref, NS: Deref, F>(