From fff7dd0826a2c718e7b741c1c58da70e1ac2a598 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 1 Feb 2018 10:38:37 +1030 Subject: [PATCH] devtools/decodemsg: new tool. $ ./devtools/decodemsg 00110000000000000000000000000000000000000000000000000000000000000000000e496e7465726e616c206572726f72 WIRE_ERROR: channel_id=0000000000000000000000000000000000000000000000000000000000000000 data=[Internal error] Signed-off-by: Rusty Russell --- devtools/Makefile | 29 ++++++++++++++------- devtools/decodemsg.c | 9 +++++++ devtools/print_wire.c | 60 +++++++++++++++++++++++++++++++++++++++++++ devtools/print_wire.h | 22 ++++++++++++++++ 4 files changed, 111 insertions(+), 9 deletions(-) create mode 100644 devtools/decodemsg.c create mode 100644 devtools/print_wire.c create mode 100644 devtools/print_wire.h diff --git a/devtools/Makefile b/devtools/Makefile index b8973ebd5..8942cab55 100644 --- a/devtools/Makefile +++ b/devtools/Makefile @@ -1,7 +1,9 @@ -DEVTOOLS_CLI_SRC := devtools/bolt11-cli.c -DEVTOOLS_CLI_OBJS := $(DEVTOOLS_CLI_SRC:.c=.o) +DEVTOOLS_SRC := devtools/gen_print_wire.c devtools/print_wire.c +DEVTOOLS_OBJS := $(DEVTOOLS_SRC:.c=.o) +DEVTOOLS_TOOL_SRC := devtools/bolt11-cli.c devtools/decodemsg.c +DEVTOOLS_TOOL_OBJS := $(DEVTOOLS_TOOL_SRC:.c=.o) -DEVTOOLS_CLI_COMMON_OBJS := \ +DEVTOOLS_COMMON_OBJS := \ common/bech32.o \ common/bolt11.o \ common/hash_u5.o \ @@ -9,17 +11,26 @@ DEVTOOLS_CLI_COMMON_OBJS := \ common/utils.o \ common/version.o -devtools-all: devtools/bolt11-cli +devtools-all: devtools/bolt11-cli devtools/decodemsg -devtools/bolt11-cli: $(DEVTOOLS_CLI_OBJS) $(DEVTOOLS_CLI_COMMON_OBJS) $(JSMN_OBJS) $(CCAN_OBJS) $(BITCOIN_OBJS) wire/fromwire.o wire/towire.o +devtools/gen_print_wire.h: $(WIRE_GEN) wire/gen_peer_wire_csv + $(WIRE_GEN) --bolt --printwire --header $@ wire_type < wire/gen_peer_wire_csv > $@ -$(DEVTOOLS_CLI_OBJS): wire/wire.h +devtools/gen_print_wire.c: $(WIRE_GEN) wire/gen_peer_wire_csv + $(WIRE_GEN) --bolt --printwire ${@:.c=.h} wire_type < wire/gen_peer_wire_csv > $@ + +devtools/bolt11-cli: $(DEVTOOLS_OBJS) $(DEVTOOLS_COMMON_OBJS) $(JSMN_OBJS) $(CCAN_OBJS) $(BITCOIN_OBJS) wire/fromwire.o wire/towire.o devtools/bolt11-cli.o + +devtools/decodemsg: $(DEVTOOLS_OBJS) $(DEVTOOLS_COMMON_OBJS) $(JSMN_OBJS) $(CCAN_OBJS) $(BITCOIN_OBJS) wire/fromwire.o wire/towire.o devtools/decodemsg.o + +$(DEVTOOLS_OBJS) $(DEVTOOLS_TOOL_OBJS): wire/wire.h devtools/gen_print_wire.h +devtools/gen_print_wire.o: devtools/gen_print_wire.h wire/gen_peer_wire.h # Make sure these depend on everything. -ALL_PROGRAMS += devtools/bolt11-cli -ALL_OBJS += $(DEVTOOLS_CLI_OBJS) +ALL_PROGRAMS += devtools/bolt11-cli devtools/decodemsg +ALL_OBJS += $(DEVTOOLS_OBJS) $(DEVTOOLS_TOOL_OBJS) -check-source: $(DEVTOOLS_CLI_SRC:%=check-src-include-order/%) +check-source: $(DEVTOOLS_SRC:%=check-src-include-order/%) $(DEVTOOLS_TOOLS_SRC:%=check-src-include-order/%) clean: devtools-clean diff --git a/devtools/decodemsg.c b/devtools/decodemsg.c new file mode 100644 index 000000000..79697b374 --- /dev/null +++ b/devtools/decodemsg.c @@ -0,0 +1,9 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + u8 *m = tal_hexdata(NULL, argv[1], strlen(argv[1])); + print_message(m); + return 0; +} diff --git a/devtools/print_wire.c b/devtools/print_wire.c new file mode 100644 index 000000000..a11e2d65f --- /dev/null +++ b/devtools/print_wire.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include + +void printwire_u8(const u8 *v) +{ + printf("%u", *v); +} + +void printwire_u16(const u16 *v) +{ + printf("%u", *v); +} + +void printwire_u32(const u32 *v) +{ + printf("%u", *v); +} + +void printwire_u64(const u64 *v) +{ + printf("%"PRIu64, *v); +} + +void printwire_u8_array(const u8 **cursor, size_t *plen, size_t len) +{ + printf("["); + while (len) { + u8 v = fromwire_u8(cursor, plen); + if (!*cursor) + return; + if (isprint(v)) + printf("%c", v); + else + printf("\\x%02x", v); + len--; + } + printf("]\n"); +} + +#define PRINTWIRE_TYPE_TO_STRING(T, N) \ + void printwire_##N(const T *v) \ + { \ + const char *s = type_to_string(NULL, T, v); \ + printf("%s\n", s); \ + tal_free(s); \ + } + +#define PRINTWIRE_STRUCT_TYPE_TO_STRING(T) \ + PRINTWIRE_TYPE_TO_STRING(struct T, T) + +PRINTWIRE_STRUCT_TYPE_TO_STRING(bitcoin_blkid); +PRINTWIRE_STRUCT_TYPE_TO_STRING(bitcoin_txid); +PRINTWIRE_STRUCT_TYPE_TO_STRING(channel_id); +PRINTWIRE_STRUCT_TYPE_TO_STRING(preimage); +PRINTWIRE_STRUCT_TYPE_TO_STRING(pubkey); +PRINTWIRE_STRUCT_TYPE_TO_STRING(sha256); +PRINTWIRE_STRUCT_TYPE_TO_STRING(short_channel_id); +PRINTWIRE_TYPE_TO_STRING(secp256k1_ecdsa_signature, secp256k1_ecdsa_signature); diff --git a/devtools/print_wire.h b/devtools/print_wire.h new file mode 100644 index 000000000..b51a3a949 --- /dev/null +++ b/devtools/print_wire.h @@ -0,0 +1,22 @@ +#ifndef LIGHTNING_DEVTOOLS_PRINT_WIRE_H +#define LIGHTNING_DEVTOOLS_PRINT_WIRE_H +#include +#include +#include + +void printwire_u8(const u8 *v); +void printwire_u16(const u16 *v); +void printwire_u32(const u32 *v); +void printwire_u64(const u64 *v); +void printwire_u8_array(const u8 **cursor, size_t *plen, size_t len); + +void printwire_bitcoin_blkid(const struct bitcoin_blkid *bitcoin_blkid); +void printwire_bitcoin_txid(const struct bitcoin_txid *bitcoin_txid); +void printwire_channel_id(const struct channel_id *channel_id); +void printwire_preimage(const struct preimage *preimage); +void printwire_pubkey(const struct pubkey *pubkey); +void printwire_secp256k1_ecdsa_signature(const secp256k1_ecdsa_signature *); +void printwire_sha256(const struct sha256 *sha256); +void printwire_short_channel_id(const struct short_channel_id *short_channel_id); + +#endif /* LIGHTNING_DEVTOOLS_PRINT_WIRE_H */