Skip to content

Commit

Permalink
lightningd: rename htlc_in field from failcode to badonion.
Browse files Browse the repository at this point in the history
That's all it's used for now.

And remove unreferenced failoutchannel.

Signed-off-by: Rusty Russell <[email protected]>
  • Loading branch information
rustyrussell committed Feb 3, 2020
1 parent 8f9082d commit 6b03ae2
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 33 deletions.
26 changes: 13 additions & 13 deletions lightningd/htlc_end.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,9 @@ struct htlc_in *htlc_in_check(const struct htlc_in *hin, const char *abortstr)
htlc_state_name(hin->hstate));
else if (hin->failonion && hin->preimage)
return corrupt(abortstr, "Both failonion and succeeded");
else if (hin->failcode != 0 && hin->preimage)
return corrupt(abortstr, "Both failcode and succeeded");
else if (hin->failonion && (hin->failcode & BADONION))
else if (hin->badonion != 0 && hin->preimage)
return corrupt(abortstr, "Both badonion and succeeded");
else if (hin->failonion && hin->badonion)
return corrupt(abortstr, "Both failed and malformed");

/* Can't have a resolution while still being added. */
Expand All @@ -112,11 +112,11 @@ struct htlc_in *htlc_in_check(const struct htlc_in *hin, const char *abortstr)
return corrupt(abortstr, "Still adding, has preimage");
if (hin->failonion)
return corrupt(abortstr, "Still adding, has failmsg");
if (hin->failcode)
return corrupt(abortstr, "Still adding, has failcode");
if (hin->badonion)
return corrupt(abortstr, "Still adding, has badonion");
} else if (hin->hstate >= SENT_REMOVE_HTLC
&& hin->hstate <= SENT_REMOVE_ACK_REVOCATION) {
if (!hin->preimage && !hin->failonion && !hin->failcode)
if (!hin->preimage && !hin->failonion && !hin->badonion)
return corrupt(abortstr, "Removing, no resolution");
} else
return corrupt(abortstr, "Bad state %s",
Expand Down Expand Up @@ -148,7 +148,7 @@ struct htlc_in *new_htlc_in(const tal_t *ctx,
sizeof(hin->onion_routing_packet));

hin->hstate = RCVD_ADD_COMMIT;
hin->failcode = 0;
hin->badonion = 0;
hin->failonion = NULL;
hin->preimage = NULL;

Expand Down Expand Up @@ -186,9 +186,9 @@ struct htlc_out *htlc_out_check(const struct htlc_out *hout,
/* If output is resolved, input must be resolved same
* way (or not resolved yet). */
if (hout->failonion) {
if (hout->in->failcode)
if (hout->in->badonion)
return corrupt(abortstr,
"Output failmsg, input failcode");
"Output failmsg, input badonion");
if (hout->in->preimage)
return corrupt(abortstr,
"Output failmsg, input preimage");
Expand All @@ -203,19 +203,19 @@ struct htlc_out *htlc_out_check(const struct htlc_out *hout,
if (hout->in->failonion)
return corrupt(abortstr,
"Output preimage, input failonion");
if (hout->in->failcode)
if (hout->in->badonion)
return corrupt(abortstr,
"Output preimage, input failcode");
"Output preimage, input badonion");
} else {
if (hout->in->preimage)
return corrupt(abortstr,
"Output unresolved, input preimage");
if (hout->in->failonion)
return corrupt(abortstr,
"Output unresovled, input failmsg");
if (hout->in->failcode)
if (hout->in->badonion)
return corrupt(abortstr,
"Output unresolved, input failcode");
"Output unresolved, input badonion");
}
}

Expand Down
10 changes: 3 additions & 7 deletions lightningd/htlc_end.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,12 @@ struct htlc_in {
/* Shared secret for us to send any failure message (NULL if malformed) */
struct secret *shared_secret;

/* FIXME: Use failed_htlc here */
/* If a local error, this is non-zero. */
enum onion_type failcode;
/* If we couldn't decode the onion, this contains the error code.. */
enum onion_type badonion;

/* For a remote error. */
/* Otherwise, this contains the failure message to send. */
const struct onionreply *failonion;

/* If failcode & UPDATE, this is the channel which failed. */
struct short_channel_id failoutchannel;

/* If they fulfilled, here's the preimage. */
struct preimage *preimage;

Expand Down
14 changes: 7 additions & 7 deletions lightningd/peer_htlcs.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ static bool htlc_in_update_state(struct channel *channel,

wallet_htlc_update(channel->peer->ld->wallet,
hin->dbid, newstate, hin->preimage,
hin->failcode, hin->failonion, NULL);
hin->badonion, hin->failonion, NULL);

hin->hstate = newstate;
return true;
Expand Down Expand Up @@ -161,7 +161,7 @@ static void local_fail_in_htlc_badonion(struct htlc_in *hin,
assert(!hin->preimage);

assert(badonion & BADONION);
hin->failcode = badonion;
hin->badonion = badonion;
/* We update state now to signal it's in progress, for persistence. */
htlc_in_update_state(hin->key.channel, hin, SENT_REMOVE_HTLC);
htlc_in_check(hin, __func__);
Expand Down Expand Up @@ -714,7 +714,7 @@ static void channel_resolve_reply(struct subd *gossip, const u8 *msg,
wallet_forwarded_payment_add(gr->hin->key.channel->peer->ld->wallet,
gr->hin, NULL,
FORWARD_LOCAL_FAILED,
gr->hin->failcode);
WIRE_UNKNOWN_NEXT_PEER);
tal_free(gr);
return;
}
Expand Down Expand Up @@ -1290,12 +1290,12 @@ void onchain_failed_our_htlc(const struct channel *channel,
static void remove_htlc_in(struct channel *channel, struct htlc_in *hin)
{
htlc_in_check(hin, __func__);
assert(hin->failonion || hin->preimage || hin->failcode);
assert(hin->failonion || hin->preimage || hin->badonion);

log_debug(channel->log, "Removing in HTLC %"PRIu64" state %s %s",
hin->key.id, htlc_state_name(hin->hstate),
hin->preimage ? "FULFILLED"
: hin->failcode ? onion_type_name(hin->failcode)
: hin->badonion ? onion_type_name(hin->badonion)
: "REMOTEFAIL");

/* If we fulfilled their HTLC, credit us. */
Expand Down Expand Up @@ -2015,8 +2015,8 @@ void peer_htlcs(const tal_t *ctx,
hin->cltv_expiry, hin->onion_routing_packet,
hin->hstate);

if (hin->failcode)
add_fail_badonion(hin, hin->failcode, failed_in);
if (hin->badonion)
add_fail_badonion(hin, hin->badonion, failed_in);
if (hin->failonion)
add_fail(hin, hin->failonion, failed_in);
if (hin->preimage)
Expand Down
14 changes: 8 additions & 6 deletions wallet/wallet.c
Original file line number Diff line number Diff line change
Expand Up @@ -1828,7 +1828,7 @@ static bool wallet_stmt2htlc_in(struct channel *channel,
in->failonion = NULL;
else
in->failonion = db_column_onionreply(in, stmt, 8);
in->failcode = db_column_int(stmt, 9);
in->badonion = db_column_int(stmt, 9);
if (db_column_is_null(stmt, 11)) {
in->shared_secret = NULL;
} else {
Expand All @@ -1847,12 +1847,12 @@ static bool wallet_stmt2htlc_in(struct channel *channel,
#ifdef COMPAT_V080
/* This field is now reserved for badonion codes: the rest should
* use the failonion field. */
if (in->failcode && !(in->failcode & BADONION)) {
if (in->badonion && !(in->badonion & BADONION)) {
log_broken(channel->log,
"Replacing incoming HTLC %"PRIu64" error "
"%s with WIRE_TEMPORARY_NODE_FAILURE",
in->key.id, onion_type_name(in->failcode));
in->failcode = 0;
in->key.id, onion_type_name(in->badonion));
in->badonion = 0;
in->failonion = create_onionreply(in,
in->shared_secret,
towire_temporary_node_failure(tmpctx));
Expand Down Expand Up @@ -1941,10 +1941,12 @@ static void fixup_hin(struct wallet *wallet, struct htlc_in *hin)
return;

/* Failed ones (only happens after db fixed!) OK. */
if (hin->failcode || hin->failonion)
if (hin->badonion || hin->failonion)
return;

hin->failcode = WIRE_TEMPORARY_NODE_FAILURE;
hin->failonion = create_onionreply(hin,
hin->shared_secret,
towire_temporary_node_failure(tmpctx));

log_broken(wallet->log, "HTLC #%"PRIu64" (%s) "
" for amount %s"
Expand Down

0 comments on commit 6b03ae2

Please sign in to comment.