diff --git a/daemon/peer.c b/daemon/peer.c index f40a02a9a..bc62e2ac2 100644 --- a/daemon/peer.c +++ b/daemon/peer.c @@ -1360,7 +1360,7 @@ void peer_add_htlc_expiry(struct peer *peer, } struct newhtlc { - struct channel_htlc *htlc; + struct channel_htlc htlc; struct command *jsoncmd; }; @@ -1374,18 +1374,20 @@ static void do_newhtlc(struct peer *peer, struct newhtlc *newhtlc) * execute. */ cstate = copy_funding(newhtlc, peer->cstate); if (!funding_delta(peer->anchor.satoshis, - 0, newhtlc->htlc->msatoshis, + 0, newhtlc->htlc.msatoshis, &cstate->a, &cstate->b)) { command_fail(newhtlc->jsoncmd, "Cannot afford %"PRIu64" milli-satoshis", - newhtlc->htlc->msatoshis); + newhtlc->htlc.msatoshis); return; } + /* FIXME: Never propose duplicate rvalues? */ + /* Add the htlc to our side of channel. */ - funding_add_htlc(&cstate->a, newhtlc->htlc->msatoshis, - &newhtlc->htlc->expiry, &newhtlc->htlc->rhash); - peer_add_htlc_expiry(peer, &newhtlc->htlc->expiry); + funding_add_htlc(&cstate->a, newhtlc->htlc.msatoshis, + &newhtlc->htlc.expiry, &newhtlc->htlc.rhash); + peer_add_htlc_expiry(peer, &newhtlc->htlc.expiry); set_htlc_command(peer, cstate, newhtlc->jsoncmd, &cstate->a.htlcs[tal_count(cstate->a.htlcs)-1], @@ -1418,10 +1420,9 @@ static void json_newhtlc(struct command *cmd, /* Attach to cmd until it's complete. */ newhtlc = tal(cmd, struct newhtlc); - newhtlc->htlc = tal(newhtlc, struct channel_htlc); newhtlc->jsoncmd = cmd; - if (!json_tok_u64(buffer, msatoshistok, &newhtlc->htlc->msatoshis)) { + if (!json_tok_u64(buffer, msatoshistok, &newhtlc->htlc.msatoshis)) { command_fail(cmd, "'%.*s' is not a valid number", (int)(msatoshistok->end - msatoshistok->start), buffer + msatoshistok->start); @@ -1434,20 +1435,20 @@ static void json_newhtlc(struct command *cmd, return; } - if (!seconds_to_abs_locktime(expiry, &newhtlc->htlc->expiry)) { + if (!seconds_to_abs_locktime(expiry, &newhtlc->htlc.expiry)) { command_fail(cmd, "'%.*s' is not a valid number", (int)(expirytok->end - expirytok->start), buffer + expirytok->start); return; } - if (abs_locktime_to_seconds(&newhtlc->htlc->expiry) < + if (abs_locktime_to_seconds(&newhtlc->htlc.expiry) < controlled_time().ts.tv_sec + peer->dstate->config.min_expiry) { command_fail(cmd, "HTLC expiry too soon!"); return; } - if (abs_locktime_to_seconds(&newhtlc->htlc->expiry) > + if (abs_locktime_to_seconds(&newhtlc->htlc.expiry) > controlled_time().ts.tv_sec + peer->dstate->config.max_expiry) { command_fail(cmd, "HTLC expiry too far!"); return; @@ -1455,8 +1456,8 @@ static void json_newhtlc(struct command *cmd, if (!hex_decode(buffer + rhashtok->start, rhashtok->end - rhashtok->start, - &newhtlc->htlc->rhash, - sizeof(newhtlc->htlc->rhash))) { + &newhtlc->htlc.rhash, + sizeof(newhtlc->htlc.rhash))) { command_fail(cmd, "'%.*s' is not a valid sha256 hash", (int)(rhashtok->end - rhashtok->start), buffer + rhashtok->start);