Store addr on errors
Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
15
mud.c
15
mud.c
@@ -163,9 +163,9 @@ struct mud {
|
|||||||
} peer;
|
} peer;
|
||||||
struct {
|
struct {
|
||||||
struct {
|
struct {
|
||||||
size_t count;
|
struct sockaddr_storage addr;
|
||||||
uint64_t time;
|
uint64_t time;
|
||||||
} decrypt;
|
} decrypt, difftime;
|
||||||
} bad;
|
} bad;
|
||||||
struct {
|
struct {
|
||||||
unsigned char kiss[MUD_KISS_SIZE];
|
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]);
|
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;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (mud_packet && mud_packet_check(mud, packet, packet_size))
|
if (mud_packet && mud_packet_check(mud, packet, packet_size))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
mud_unmapv4(&addr);
|
|
||||||
|
|
||||||
struct sockaddr_storage local_addr;
|
struct sockaddr_storage local_addr;
|
||||||
|
|
||||||
if (mud_localaddr(&local_addr, &msg, addr.ss_family))
|
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) {
|
if (!mud_packet) {
|
||||||
ret = mud_decrypt(mud, data, size, packet, packet_size);
|
ret = mud_decrypt(mud, data, size, packet, packet_size);
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
mud->bad.decrypt.count++;
|
mud->bad.decrypt.addr = addr;
|
||||||
mud->bad.decrypt.time = now;
|
mud->bad.decrypt.time = now;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user