diff --git a/devtools/Makefile b/devtools/Makefile index b871a5c41..1b8625fce 100644 --- a/devtools/Makefile +++ b/devtools/Makefile @@ -1,4 +1,4 @@ -DEVTOOLS_SRC := devtools/gen_print_wire.c devtools/print_wire.c +DEVTOOLS_SRC := devtools/gen_print_wire.c devtools/gen_print_onion_wire.c devtools/print_wire.c DEVTOOLS_OBJS := $(DEVTOOLS_SRC:.c=.o) DEVTOOLS_TOOL_SRC := devtools/bolt11-cli.c devtools/decodemsg.c devtools/onion.c DEVTOOLS_TOOL_OBJS := $(DEVTOOLS_TOOL_SRC:.c=.o) @@ -23,6 +23,12 @@ devtools/gen_print_wire.h: $(WIRE_GEN) wire/gen_peer_wire_csv 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/gen_print_onion_wire.h: $(WIRE_GEN) wire/gen_onion_wire_csv + $(WIRE_GEN) --bolt --printwire --header $@ onion_type < wire/gen_onion_wire_csv > $@ + +devtools/gen_print_onion_wire.c: $(WIRE_GEN) wire/gen_onion_wire_csv + $(WIRE_GEN) --bolt --printwire ${@:.c=.h} onion_type < wire/gen_onion_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 @@ -31,8 +37,9 @@ devtools/onion.c: ccan/config.h devtools/onion: $(DEVTOOLS_OBJS) $(DEVTOOLS_COMMON_OBJS) $(JSMN_OBJS) $(CCAN_OBJS) $(BITCOIN_OBJS) wire/fromwire.o wire/towire.o devtools/onion.o common/sphinx.o -$(DEVTOOLS_OBJS) $(DEVTOOLS_TOOL_OBJS): wire/wire.h devtools/gen_print_wire.h +$(DEVTOOLS_OBJS) $(DEVTOOLS_TOOL_OBJS): wire/wire.h devtools/gen_print_wire.h devtools/gen_print_onion_wire.h devtools/gen_print_wire.o: devtools/gen_print_wire.h wire/gen_peer_wire.h devtools/print_wire.h +devtools/gen_print_onion_wire.o: devtools/gen_print_onion_wire.h devtools/print_wire.h # Make sure these depend on everything. ALL_PROGRAMS += devtools/bolt11-cli devtools/decodemsg devtools/onion diff --git a/devtools/decodemsg.c b/devtools/decodemsg.c index 5e5c94d20..f5bdf0c96 100644 --- a/devtools/decodemsg.c +++ b/devtools/decodemsg.c @@ -1,28 +1,36 @@ #include +#include #include #include +#include #include #include -static void usage(void) -{ - fprintf(stderr, "Usage: decodemsg \n"); - exit(1); -} - int main(int argc, char *argv[]) { const u8 *m; + bool onion = false; setup_locale(); - if (argc != 2) - usage(); + opt_register_noarg("--onion", opt_set_bool, &onion, + "Decode an error message instead of a peer message"); + opt_register_noarg("--help|-h", opt_usage_and_exit, + "" + "Decode a lightning spec wire message from hex.", + "Print this message."); - /* Last arg is hex string */ + opt_parse(&argc, argv, opt_log_stderr_exit); + if (argc != 2) + errx(1, "Need a hex message"); + + /* Arg is hex string */ m = tal_hexdata(NULL, argv[1], strlen(argv[1])); if (!m) errx(1, "'%s' is not valid hex", argv[1]); - print_message(m); + if (onion) + printonion_type_message(m); + else + printwire_type_message(m); return 0; } diff --git a/tools/generate-wire.py b/tools/generate-wire.py index fc88c2fa0..66361f7af 100755 --- a/tools/generate-wire.py +++ b/tools/generate-wire.py @@ -718,7 +718,7 @@ print_header_template = """/* This file was generated by generate-wire.py */ #include {includes} -void print_message(const u8 *msg); +void print{enumname}_message(const u8 *msg); {func_decls} #endif /* LIGHTNING_{idem} */ @@ -732,7 +732,7 @@ print_template = """/* This file was generated by generate-wire.py */ #include #include -void print_message(const u8 *msg) +void print{enumname}_message(const u8 *msg) {{ \tswitch ((enum {enumname})fromwire_peektype(msg)) {{ \t{printcases}