diff --git a/common/json.c b/common/json.c index e305320f4..f800a561d 100644 --- a/common/json.c +++ b/common/json.c @@ -90,6 +90,21 @@ bool json_to_number(const char *buffer, const jsmntok_t *tok, return true; } +bool json_to_u16(const char *buffer, const jsmntok_t *tok, + short unsigned int *num) +{ + uint64_t u64; + + if (!json_to_u64(buffer, tok, &u64)) + return false; + *num = u64; + + /* Just in case it doesn't fit. */ + if (*num != u64) + return false; + return true; +} + bool json_to_int(const char *buffer, const jsmntok_t *tok, int *num) { char *end; diff --git a/common/json.h b/common/json.h index 6efdc3f90..3206b3d98 100644 --- a/common/json.h +++ b/common/json.h @@ -36,6 +36,10 @@ bool json_to_number(const char *buffer, const jsmntok_t *tok, bool json_to_u64(const char *buffer, const jsmntok_t *tok, uint64_t *num); +/* Extract number from this (may be a string, or a number literal) */ +bool json_to_u16(const char *buffer, const jsmntok_t *tok, + uint16_t *num); + /* Extract double from this (must be a number literal) */ bool json_to_double(const char *buffer, const jsmntok_t *tok, double *num); diff --git a/plugins/pay.c b/plugins/pay.c index 4f3fd0762..fc3e2dd15 100644 --- a/plugins/pay.c +++ b/plugins/pay.c @@ -820,8 +820,6 @@ static struct command_result *add_shadow_route(struct command *cmd, const jsmntok_t *chan, *best = NULL; size_t i; u64 sample = 0; - /* FIXME: Use route_info's cltv_expiry_delta member instead */ - u32 cltv_fuzz; struct route_info *route = tal_arr(NULL, struct route_info, 1); json_for_each_arr(i, chan, channels) { @@ -835,9 +833,9 @@ static struct command_result *add_shadow_route(struct command *cmd, continue; /* Don't use if total would exceed 1/4 of our time allowance. */ - json_to_number(buf, json_get_member(buf, chan, "delay"), - &cltv_fuzz); - if ((pc->final_cltv + cltv_fuzz) * 4 > pc->maxdelay) + json_to_u16(buf, json_get_member(buf, chan, "delay"), + &route[0].cltv_expiry_delta); + if ((pc->final_cltv + route[0].cltv_expiry_delta) * 4 > pc->maxdelay) continue; json_to_number(buf, json_get_member(buf, chan, "base_fee_millisatoshi"), @@ -857,14 +855,14 @@ static struct command_result *add_shadow_route(struct command *cmd, return start_pay_attempt(cmd, pc, "Initial attempt"); } - pc->final_cltv += cltv_fuzz; + pc->final_cltv += route[0].cltv_expiry_delta; pc->shadow_dest = json_strdup(pc, buf, json_get_member(buf, best, "destination")); route_msatoshi(&pc->msat, pc->msat, route, 1); tal_append_fmt(&pc->ps->shadow, "Added %u cltv delay, %u base fee, and %u ppm fee " "for shadow to %s.", - cltv_fuzz, route[0].fee_base_msat, + route[0].cltv_expiry_delta, route[0].fee_base_msat, route[0].fee_proportional_millionths, pc->shadow_dest); tal_free(route);