From 8ebb3bc37ba16a7d78ee2f1cb8b92c3204e6a39f Mon Sep 17 00:00:00 2001 From: Sergey Lyubka Date: Wed, 5 Jan 2022 13:47:11 +0000 Subject: [PATCH] More detailed debug log - show ip/port for sender and receiver --- mongoose.c | 27 ++++++++++++++++++++------- src/net.c | 14 +++++++++----- src/net.h | 1 + src/sock.c | 13 +++++++++++-- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/mongoose.c b/mongoose.c index a580c694..986eeb3c 100644 --- a/mongoose.c +++ b/mongoose.c @@ -2375,14 +2375,18 @@ int mg_printf(struct mg_connection *c, const char *fmt, ...) { return len; } -char *mg_straddr(struct mg_connection *c, char *buf, size_t len) { - char tmp[100]; - const char *fmt = c->peer.is_ip6 ? "[%s]:%d" : "%s:%d"; - mg_ntoa(&c->peer, tmp, sizeof(tmp)); - snprintf(buf, len, fmt, tmp, (int) mg_ntohs(c->peer.port)); +char *mg_addr_to_str(struct mg_addr *a, char *buf, size_t len) { + char tmp[30]; + const char *fmt = a->is_ip6 ? "[%s]:%d" : "%s:%d"; + mg_ntoa(a, tmp, sizeof(tmp)); + snprintf(buf, len, fmt, tmp, (int) mg_ntohs(a->port)); return buf; } +char *mg_straddr(struct mg_connection *c, char *buf, size_t len) { + return mg_addr_to_str(&c->peer, buf, len); +} + char *mg_ntoa(const struct mg_addr *addr, char *buf, size_t len) { if (addr->is_ip6) { uint16_t *p = (uint16_t *) addr->ip6; @@ -2971,9 +2975,18 @@ static void iolog(struct mg_connection *c, char *buf, long n, bool r) { c->is_closing = 1; // Error, or normal termination } else if (n > 0) { if (c->is_hexdumping) { + union usa usa; + char t1[50] = "", t2[50] = ""; + socklen_t slen = sizeof(usa.sin); char *s = mg_hexdump(buf, (size_t) n); - LOG(LL_INFO, - ("\n-- %lu %s %s %ld\n%s", c->id, c->label, r ? "<-" : "->", n, s)); + struct mg_addr a; + memset(&usa, 0, sizeof(usa)); + memset(&a, 0, sizeof(a)); + getsockname(FD(c), &usa.sa, &slen); + tomgaddr(&usa, &a, c->peer.is_ip6); + LOG(LL_INFO, ("\n-- %lu %s %s %s %s %ld\n%s", c->id, + mg_addr_to_str(&a, t1, sizeof(t1)), r ? "<-" : "->", + mg_addr_to_str(&c->peer, t2, sizeof(t2)), c->label, n, s)); free(s); } if (r) { diff --git a/src/net.c b/src/net.c index 304844be..a01e1fb3 100644 --- a/src/net.c +++ b/src/net.c @@ -19,14 +19,18 @@ int mg_printf(struct mg_connection *c, const char *fmt, ...) { return len; } -char *mg_straddr(struct mg_connection *c, char *buf, size_t len) { - char tmp[100]; - const char *fmt = c->peer.is_ip6 ? "[%s]:%d" : "%s:%d"; - mg_ntoa(&c->peer, tmp, sizeof(tmp)); - snprintf(buf, len, fmt, tmp, (int) mg_ntohs(c->peer.port)); +char *mg_addr_to_str(struct mg_addr *a, char *buf, size_t len) { + char tmp[30]; + const char *fmt = a->is_ip6 ? "[%s]:%d" : "%s:%d"; + mg_ntoa(a, tmp, sizeof(tmp)); + snprintf(buf, len, fmt, tmp, (int) mg_ntohs(a->port)); return buf; } +char *mg_straddr(struct mg_connection *c, char *buf, size_t len) { + return mg_addr_to_str(&c->peer, buf, len); +} + char *mg_ntoa(const struct mg_addr *addr, char *buf, size_t len) { if (addr->is_ip6) { uint16_t *p = (uint16_t *) addr->ip6; diff --git a/src/net.h b/src/net.h index 527bf78d..985679f0 100644 --- a/src/net.h +++ b/src/net.h @@ -72,6 +72,7 @@ bool mg_send(struct mg_connection *, const void *, size_t); int mg_printf(struct mg_connection *, const char *fmt, ...); int mg_vprintf(struct mg_connection *, const char *fmt, va_list ap); char *mg_straddr(struct mg_connection *, char *, size_t); +char *mg_addr_to_str(struct mg_addr *, char *, size_t); bool mg_aton(struct mg_str str, struct mg_addr *addr); char *mg_ntoa(const struct mg_addr *addr, char *buf, size_t len); diff --git a/src/sock.c b/src/sock.c index b5b89c6d..0b5ac6df 100644 --- a/src/sock.c +++ b/src/sock.c @@ -112,9 +112,18 @@ static void iolog(struct mg_connection *c, char *buf, long n, bool r) { c->is_closing = 1; // Error, or normal termination } else if (n > 0) { if (c->is_hexdumping) { + union usa usa; + char t1[50] = "", t2[50] = ""; + socklen_t slen = sizeof(usa.sin); char *s = mg_hexdump(buf, (size_t) n); - LOG(LL_INFO, - ("\n-- %lu %s %s %ld\n%s", c->id, c->label, r ? "<-" : "->", n, s)); + struct mg_addr a; + memset(&usa, 0, sizeof(usa)); + memset(&a, 0, sizeof(a)); + getsockname(FD(c), &usa.sa, &slen); + tomgaddr(&usa, &a, c->peer.is_ip6); + LOG(LL_INFO, ("\n-- %lu %s %s %s %s %ld\n%s", c->id, + mg_addr_to_str(&a, t1, sizeof(t1)), r ? "<-" : "->", + mg_addr_to_str(&c->peer, t2, sizeof(t2)), c->label, n, s)); free(s); } if (r) {