From e13ee2954422b352194c5af401e34245e409b295 Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Thu, 7 Nov 2019 21:58:32 +0100 Subject: [PATCH] pay: Split the onion construction from sendpay --- lightningd/pay.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/lightningd/pay.c b/lightningd/pay.c index 14d40ecf4..5f1828581 100644 --- a/lightningd/pay.c +++ b/lightningd/pay.c @@ -630,6 +630,22 @@ static bool should_use_tlv(enum route_hop_style style) abort(); } +static enum onion_type send_onion(struct lightningd *ld, + const struct onionpacket *packet, + const struct route_hop *first_hop, + const struct sha256 *payment_hash, + struct channel *channel, + struct htlc_out **hout) +{ + const u8 *onion; + unsigned int base_expiry; + base_expiry = get_block_height(ld->topology) + 1; + onion = serialize_onionpacket(tmpctx, packet); + return send_htlc_out(channel, first_hop->amount, + base_expiry + first_hop->delay, + payment_hash, onion, NULL, hout); +} + /* Returns command_result if cmd was resolved, NULL if not yet called. */ static struct command_result * send_payment(struct lightningd *ld, @@ -641,8 +657,6 @@ send_payment(struct lightningd *ld, const char *b11str TAKES, const struct secret *payment_secret) { - const u8 *onion; - u8 sessionkey[32]; unsigned int base_expiry; struct onionpacket *packet; struct secret *path_secrets; @@ -751,19 +765,12 @@ send_payment(struct lightningd *ld, return command_failed(cmd, data); } - randombytes_buf(&sessionkey, sizeof(sessionkey)); - - /* Onion will carry us from first peer onwards. */ packet = create_onionpacket(tmpctx, path, &path_secrets); - onion = serialize_onionpacket(tmpctx, packet); - + failcode = send_onion(ld, packet, &route[0], rhash, channel, &hout); log_info(ld->log, "Sending %s over %zu hops to deliver %s", type_to_string(tmpctx, struct amount_msat, &route[0].amount), n_hops, type_to_string(tmpctx, struct amount_msat, &msat)); - failcode = send_htlc_out(channel, route[0].amount, - base_expiry + route[0].delay, - rhash, onion, NULL, &hout); if (failcode) { fail = immediate_routing_failure(cmd, ld, failcode,