pay: Allow payments initiated with sendonion to be retried

This commit is contained in:
Christian Decker 2019-11-12 11:00:06 +01:00
parent 16b6c31010
commit 705e189f0a

View File

@ -1002,8 +1002,19 @@ static struct command_result *json_sendonion(struct command *cmd,
path_secrets = NULL;
}
/* FIXME if the user specified a short_channel_id, but no peer nodeid,
* we need to resolve that first. */
/* Now, do we already have a payment? */
payment = wallet_payment_by_hash(tmpctx, ld->wallet, payment_hash);
if (payment) {
if (payment->status == PAYMENT_PENDING) {
log_debug(ld->log, "send_payment: previous still in progress");
return json_sendpay_in_progress(cmd, payment);
}
if (payment->status == PAYMENT_COMPLETE) {
log_debug(ld->log, "send_payment: previous succeeded");
return sendpay_success(cmd, payment);
}
log_debug(ld->log, "send_payment: found previous, retrying");
}
channel = active_channel_by_id(ld, &first_hop->nodeid, NULL);
if (!channel) {
@ -1020,6 +1031,12 @@ static struct command_result *json_sendonion(struct command *cmd,
return command_failed(cmd, data);
}
/* Cleanup any prior payment. We're about to retry. */
if (payment) {
wallet_payment_delete(ld->wallet, payment_hash);
wallet_local_htlc_out_delete(ld->wallet, channel, payment_hash);
}
failcode = send_onion(cmd->ld, packet, first_hop, payment_hash, channel,
&hout);