diff --git a/daemon/control_ng.c b/daemon/control_ng.c index 469247153..86240d038 100644 --- a/daemon/control_ng.c +++ b/daemon/control_ng.c @@ -12,6 +12,49 @@ #include "sdp.h" +static void pretty_print(bencode_item_t *el, GString *s) { + bencode_item_t *chld; + const char *sep; + + switch (el->type) { + case BENCODE_STRING: + g_string_append(s, "\""); + g_string_append_len(s, el->iov[1].iov_base, el->iov[1].iov_len); + g_string_append(s, "\""); + break; + + case BENCODE_INTEGER: + g_string_append_printf(s, "%lli", el->value); + break; + + case BENCODE_LIST: + sep = "[ "; + for (chld = el->child; chld; chld = chld->sibling) { + g_string_append(s, sep); + pretty_print(chld, s); + sep = ", "; + } + g_string_append(s, " ]"); + break; + + case BENCODE_DICTIONARY: + sep = "{ "; + for (chld = el->child; chld; chld = chld->sibling) { + g_string_append(s, sep); + pretty_print(chld, s); + g_string_append(s, ": "); + chld = chld->sibling; + pretty_print(chld, s); + sep = ", "; + } + g_string_append(s, " }"); + break; + + default: + abort(); + } +} + static void control_ng_incoming(struct obj *obj, str *buf, struct sockaddr_in6 *sin, char *addr) { struct control_ng *c = (void *) obj; bencode_buffer_t bencbuf; @@ -20,6 +63,7 @@ static void control_ng_incoming(struct obj *obj, str *buf, struct sockaddr_in6 * const char *errstr; struct msghdr mh; struct iovec iov[3]; + GString *log_str; str_chr_str(&data, buf, ' '); if (!data.s || data.s == buf->s) { @@ -56,7 +100,11 @@ static void control_ng_incoming(struct obj *obj, str *buf, struct sockaddr_in6 * if (!cmd.s) goto err_send; - mylog(LOG_INFO, "Got valid command from %s: %.*s [%.*s]", addr, STR_FMT(&cmd), STR_FMT(&data)); + log_str = g_string_sized_new(256); + g_string_append_printf(log_str, "Got valid command from %s: %.*s - ", addr, STR_FMT(&cmd)); + pretty_print(dict, log_str); + mylog(LOG_INFO, "%.*s", (int) log_str->len, log_str->str); + g_string_free(log_str, TRUE); errstr = NULL; if (!str_cmp(&cmd, "ping"))