From bb0bf2b5ad0b8e3d27b8e4cd6eece6fa9bb9ab0c Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 31 Aug 2016 16:06:32 +0930 Subject: [PATCH] log: add easy way to log hex blobs. Use it in one case, and also fix another logging FIXME. Signed-off-by: Rusty Russell --- daemon/cryptopkt.c | 5 +++-- daemon/log.c | 20 ++++++++++++++++++++ daemon/log.h | 16 ++++++++++++++++ daemon/peer.c | 5 +++-- 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/daemon/cryptopkt.c b/daemon/cryptopkt.c index 16fc9bdf3..e0ba031b4 100644 --- a/daemon/cryptopkt.c +++ b/daemon/cryptopkt.c @@ -495,8 +495,9 @@ static struct io_plan *keys_exchanged(struct io_conn *conn, neg->their_sessionpubkey, sizeof(neg->their_sessionpubkey), &sessionkey)) { - /* FIXME: Dump key in this case. */ - log_unusual(neg->log, "Bad sessionkey"); + log_unusual_blob(neg->log, "Bad sessionkey %s", + neg->their_sessionpubkey, + sizeof(neg->their_sessionpubkey)); return io_close(conn); } diff --git a/daemon/log.c b/daemon/log.c index 6ee6a3608..b69202e61 100644 --- a/daemon/log.c +++ b/daemon/log.c @@ -359,6 +359,26 @@ void log_struct_(struct log *log, int level, tal_free(ctx); } +void log_blob_(struct log *log, enum log_level level, const char *fmt, + size_t len, ...) +{ + va_list ap; + const void *blob; + const char *hex; + + /* Macro wrappers ensure we only have one arg. */ + va_start(ap, len); + blob = va_arg(ap, void *); + va_end(ap); + + hex = tal_hexstr(log, blob, len); + if (level == -1) + log_add(log, fmt, hex); + else + log_(log, level, fmt, hex); + tal_free(hex); +} + void log_each_line_(const struct log_record *lr, void (*func)(unsigned int skipped, struct timerel time, diff --git a/daemon/log.h b/daemon/log.h index 7f45c3276..5dde1e612 100644 --- a/daemon/log.h +++ b/daemon/log.h @@ -42,6 +42,22 @@ void log_(struct log *log, enum log_level level, const char *fmt, ...) void log_add(struct log *log, const char *fmt, ...) PRINTF_FMT(2,3); void logv(struct log *log, enum log_level level, const char *fmt, va_list ap); +void log_blob_(struct log *log, enum log_level level, const char *fmt, + size_t len, ...) + PRINTF_FMT(3,5); + +/* These must have %s where the blob is to go. */ +#define log_add_blob(log, fmt, blob, len) \ + log_blob_((log), -1, (fmt), (len), (char *)(blob)) + +#define log_debug_blob(log, fmt, blob, len) \ + log_blob_((log), LOG_DBG, (fmt), (len), (char *)(blob)) +#define log_info_blob(log, fmt, blob, len) \ + log_blob_((log), LOG_INFORM, (fmt), (len), (char *)(blob)) +#define log_unusual_blob(log, fmt, blob, len) \ + log_blob_((log), LOG_UNUSUAL, (fmt), (len), (char *)(blob)) +#define log_broken_blob(log, fmt, blob, len) \ + log_blob_((log), LOG_BROKEN, (fmt), (len), (char *)(blob)) /* Makes sure ptr is a 'structtype', makes sure it's in loggable_structs. */ #define log_struct_check_(log, loglevel, fmt, structtype, ptr) \ diff --git a/daemon/peer.c b/daemon/peer.c index e02efd07f..b9748788d 100644 --- a/daemon/peer.c +++ b/daemon/peer.c @@ -3197,8 +3197,9 @@ static const struct bitcoin_tx *htlc_timeout_tx(const struct peer *peer, static void reset_onchain_closing(struct peer *peer) { if (peer->onchain.tx) { - /* FIXME: Log old txid */ - log_unusual(peer->log, "New anchor spend, forgetting old"); + log_unusual_struct(peer->log, + "New anchor spend, forgetting old tx %s", + struct sha256_double, &peer->onchain.txid); peer->onchain.tx = tal_free(peer->onchain.tx); peer->onchain.resolved = NULL; peer->onchain.htlcs = NULL;