From fb7c006187f7fb8c95e375f6b3d52b60091d3dc3 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Sun, 12 Jan 2020 15:33:59 +0100 Subject: [PATCH] wire: add towire_int() and use it in connectd Add towire_int() and fromwire_int() functions to "(de)serialize" "int". This will only work as long as both the caller of towire_int() and the caller of fromwire_int() use the same in-memory representation of signed integers and have the same sizeof(int). Changelog-None --- connectd/connect_wire.csv | 2 +- connectd/connectd.c | 4 ++-- lightningd/connect_control.c | 8 +++----- tools/generate-wire.py | 2 ++ wire/fromwire.c | 9 +++++++++ wire/towire.c | 5 +++++ wire/wire.h | 2 ++ 7 files changed, 24 insertions(+), 8 deletions(-) diff --git a/connectd/connect_wire.csv b/connectd/connect_wire.csv index 660453eae..bfc98aff5 100644 --- a/connectd/connect_wire.csv +++ b/connectd/connect_wire.csv @@ -44,7 +44,7 @@ msgdata,connectctl_connect_to_peer,addrhint,?wireaddr_internal, # Connectd->master: connect failed. msgtype,connectctl_connect_failed,2020 msgdata,connectctl_connect_failed,id,node_id, -msgdata,connectctl_connect_failed,failcode,u32, +msgdata,connectctl_connect_failed,failcode,int, msgdata,connectctl_connect_failed,failreason,wirestring, msgdata,connectctl_connect_failed,seconds_to_delay,u32, msgdata,connectctl_connect_failed,addrhint,?wireaddr_internal, diff --git a/connectd/connectd.c b/connectd/connectd.c index da6b8995b..e8bc76944 100644 --- a/connectd/connectd.c +++ b/connectd/connectd.c @@ -566,7 +566,7 @@ static void connect_failed(struct daemon *daemon, const struct node_id *id, u32 seconds_waited, const struct wireaddr_internal *addrhint, - u32 errcode, + int errcode, const char *errfmt, ...) PRINTF_FMT(6,7); @@ -574,7 +574,7 @@ static void connect_failed(struct daemon *daemon, const struct node_id *id, u32 seconds_waited, const struct wireaddr_internal *addrhint, - u32 errcode, + int errcode, const char *errfmt, ...) { u8 *msg; diff --git a/lightningd/connect_control.c b/lightningd/connect_control.c index bd74b5d78..542e5b304 100644 --- a/lightningd/connect_control.c +++ b/lightningd/connect_control.c @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include @@ -232,7 +231,7 @@ void delay_then_reconnect(struct channel *channel, u32 seconds_delay, static void connect_failed(struct lightningd *ld, const u8 *msg) { struct node_id id; - u32 errcode; + int errcode; char *errmsg; struct connect *c; u32 seconds_to_delay; @@ -240,15 +239,14 @@ static void connect_failed(struct lightningd *ld, const u8 *msg) struct channel *channel; if (!fromwire_connectctl_connect_failed(tmpctx, msg, &id, &errcode, &errmsg, - &seconds_to_delay, &addrhint) || - errcode > INT_MAX) + &seconds_to_delay, &addrhint)) fatal("Connect gave bad CONNECTCTL_CONNECT_FAILED message %s", tal_hex(msg, msg)); /* We can have multiple connect commands: fail them all */ while ((c = find_connect(ld, &id)) != NULL) { /* They delete themselves from list */ - was_pending(command_fail(c->cmd, (int)errcode, "%s", errmsg)); + was_pending(command_fail(c->cmd, errcode, "%s", errmsg)); } /* If we have an active channel, then reconnect. */ diff --git a/tools/generate-wire.py b/tools/generate-wire.py index 6b507cfa5..7c4fa9967 100755 --- a/tools/generate-wire.py +++ b/tools/generate-wire.py @@ -185,6 +185,7 @@ class Type(FieldSet): 'bool', 'amount_sat', 'amount_msat', + 'int', 'bigsize', 'varint' ] @@ -199,6 +200,7 @@ class Type(FieldSet): 'secp256k1_ecdsa_recoverable_signature', 'wirestring', 'double', + 'int', 'bigsize', 'varint', ] diff --git a/wire/fromwire.c b/wire/fromwire.c index 9fadeeb6b..879b755d3 100644 --- a/wire/fromwire.c +++ b/wire/fromwire.c @@ -165,6 +165,15 @@ bool fromwire_bool(const u8 **cursor, size_t *max) return ret; } +int fromwire_int(const u8 **cursor, size_t *max) +{ + int ret; + + if (!fromwire(cursor, max, &ret, sizeof(ret))) + return 0; + return ret; +} + bigsize_t fromwire_bigsize(const u8 **cursor, size_t *max) { bigsize_t v; diff --git a/wire/towire.c b/wire/towire.c index 09f689d61..b38736374 100644 --- a/wire/towire.c +++ b/wire/towire.c @@ -87,6 +87,11 @@ void towire_bool(u8 **pptr, bool v) towire(pptr, &val, sizeof(val)); } +void towire_int(u8 **pptr, int v) +{ + towire(pptr, &v, sizeof(v)); +} + void towire_bigsize(u8 **pptr, const bigsize_t val) { u8 buf[BIGSIZE_MAX_LEN]; diff --git a/wire/wire.h b/wire/wire.h index f9781ab34..302a4af98 100644 --- a/wire/wire.h +++ b/wire/wire.h @@ -79,6 +79,7 @@ void towire_tu64(u8 **pptr, u64 v); void towire_double(u8 **pptr, const double *v); void towire_pad(u8 **pptr, size_t num); void towire_bool(u8 **pptr, bool v); +void towire_int(u8 **pptr, int v); void towire_bigsize(u8 **pptr, const bigsize_t val); void towire_u8_array(u8 **pptr, const u8 *arr, size_t num); @@ -101,6 +102,7 @@ u32 fromwire_tu32(const u8 **cursor, size_t *max); u64 fromwire_tu64(const u8 **cursor, size_t *max); void fromwire_double(const u8 **cursor, size_t *max, double *v); bool fromwire_bool(const u8 **cursor, size_t *max); +int fromwire_int(const u8 **cursor, size_t *max); bigsize_t fromwire_bigsize(const u8 **cursor, size_t *max); void fromwire_secret(const u8 **cursor, size_t *max, struct secret *secret); void fromwire_privkey(const u8 **cursor, size_t *max, struct privkey *privkey);