More detailed debug log - show ip/port for sender and receiver

This commit is contained in:
Sergey Lyubka 2022-01-05 13:47:11 +00:00
parent f7ff571c5f
commit 8ebb3bc37b
4 changed files with 41 additions and 14 deletions

View File

@ -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) {

View File

@ -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;

View File

@ -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);

View File

@ -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) {