From 221d761ff49f3e6fb3e9ae0a0be49366054d7339 Mon Sep 17 00:00:00 2001 From: Jfreegman Date: Wed, 21 Sep 2016 00:28:16 -0400 Subject: [PATCH] Ignore bootstrap nodes that use a domain instead of IP address Domains cause toxcore to do blocking DNS requests which creates noticable lag and might (??) leak IP addresses when using a proxy --- src/bootstrap.c | 6 +++++- src/misc_tools.c | 9 +++++++++ src/misc_tools.h | 3 +++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/bootstrap.c b/src/bootstrap.c index eb259ab..6d807b8 100644 --- a/src/bootstrap.c +++ b/src/bootstrap.c @@ -77,7 +77,6 @@ static struct DHT_Nodes { char keys[MAXNODES][TOX_PUBLIC_KEY_SIZE]; } Nodes; - /* Return true if nodeslist pointed to by fp needs to be updated. * This will be the case if the file is empty, has an invalid format, * or if the file is older than the given timeout. @@ -297,6 +296,11 @@ int load_DHT_nodeslist(void) memcpy(ipv4_string, ip_start, ip_len); ipv4_string[ip_len] = 0; + /* ignore domains because we don't want toxcore doing DNS requests during bootstrap. */ + if (!is_ip4_address(ipv4_string)) { + continue; + } + /* Extract port */ const char *port_start = strstr(ip_start, PORT_JSON_VALUE); diff --git a/src/misc_tools.c b/src/misc_tools.c index 438e748..98bfdaf 100644 --- a/src/misc_tools.c +++ b/src/misc_tools.c @@ -26,7 +26,9 @@ #include #include #include + #include +#include #include "toxic.h" #include "windows.h" @@ -478,3 +480,10 @@ void set_window_title(ToxWindow *self, const char *title, int len) snprintf(self->name, sizeof(self->name), "%s", cpy); } + +/* Return true if address appears to be a valid ipv4 address. */ +bool is_ip4_address(const char *address) +{ + struct sockaddr_in s_addr; + return inet_pton(AF_INET, address, &(s_addr.sin_addr)) != 0; +} diff --git a/src/misc_tools.h b/src/misc_tools.h index 8d109a3..dbd4277 100644 --- a/src/misc_tools.h +++ b/src/misc_tools.h @@ -161,4 +161,7 @@ int check_file_signature(const char *signature, size_t size, FILE *fp); /* sets window title in tab bar. */ void set_window_title(ToxWindow *self, const char *title, int len); +/* Return true if address appears to be a valid ipv4 address. */ +bool is_ip4_address(const char *address); + #endif /* #define MISC_TOOLS_H */