From b787bad53637f936966610811027e2a9adbf948d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Gallou=C3=ABt?= Date: Wed, 14 Mar 2018 06:40:37 +0000 Subject: [PATCH] Store addr on errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Adrien Gallouët --- mud.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/mud.c b/mud.c index 10732f7..5330baf 100644 --- a/mud.c +++ b/mud.c @@ -163,9 +163,9 @@ struct mud { } peer; struct { struct { - size_t count; + struct sockaddr_storage addr; uint64_t time; - } decrypt; + } decrypt, difftime; } bad; struct { unsigned char kiss[MUD_KISS_SIZE]; @@ -1195,14 +1195,17 @@ mud_recv(struct mud *mud, void *data, size_t size) send_time = mud_read48(&packet[MUD_U48_SIZE]); } - if (mud_abs_diff(now, send_time) >= mud->time_tolerance) + mud_unmapv4(&addr); + + if (mud_abs_diff(now, send_time) >= mud->time_tolerance) { + mud->bad.difftime.addr = addr; + mud->bad.difftime.time = now; return 0; + } if (mud_packet && mud_packet_check(mud, packet, packet_size)) return 0; - mud_unmapv4(&addr); - struct sockaddr_storage local_addr; if (mud_localaddr(&local_addr, &msg, addr.ss_family)) @@ -1213,7 +1216,7 @@ mud_recv(struct mud *mud, void *data, size_t size) if (!mud_packet) { ret = mud_decrypt(mud, data, size, packet, packet_size); if (ret == -1) { - mud->bad.decrypt.count++; + mud->bad.decrypt.addr = addr; mud->bad.decrypt.time = now; return 0; }