diff options
-rw-r--r-- | toxcore/DHT.c | 24 | ||||
-rw-r--r-- | toxcore/ping.c | 7 |
2 files changed, 19 insertions, 12 deletions
diff --git a/toxcore/DHT.c b/toxcore/DHT.c index ad4c8a1d..db3c5883 100644 --- a/toxcore/DHT.c +++ b/toxcore/DHT.c | |||
@@ -51,7 +51,7 @@ | |||
51 | /* Ping interval in seconds for each random sending of a get nodes request. */ | 51 | /* Ping interval in seconds for each random sending of a get nodes request. */ |
52 | #define GET_NODE_INTERVAL 10 | 52 | #define GET_NODE_INTERVAL 10 |
53 | 53 | ||
54 | #define MAX_PUNCHING_PORTS 32 | 54 | #define MAX_PUNCHING_PORTS 128 |
55 | 55 | ||
56 | /* Interval in seconds between punching attempts*/ | 56 | /* Interval in seconds between punching attempts*/ |
57 | #define PUNCH_INTERVAL 10 | 57 | #define PUNCH_INTERVAL 10 |
@@ -137,11 +137,12 @@ static int client_or_ip_port_in_list(Client_data *list, uint32_t length, uint8_t | |||
137 | uint64_t temp_time = unix_time(); | 137 | uint64_t temp_time = unix_time(); |
138 | 138 | ||
139 | uint8_t candropipv4 = 1; | 139 | uint8_t candropipv4 = 1; |
140 | |||
140 | if (ip_port.ip.family == AF_INET6) { | 141 | if (ip_port.ip.family == AF_INET6) { |
141 | uint8_t ipv6cnt = 0; | 142 | uint8_t ipv6cnt = 0; |
142 | 143 | ||
143 | /* ipv6: count how many spots are used */ | 144 | /* ipv6: count how many spots are used */ |
144 | for(i = 0; i < length; i++) | 145 | for (i = 0; i < length; i++) |
145 | if (list[i].ip_port.ip.family == AF_INET6) | 146 | if (list[i].ip_port.ip.family == AF_INET6) |
146 | ipv6cnt++; | 147 | ipv6cnt++; |
147 | 148 | ||
@@ -318,11 +319,12 @@ static int replace_bad( Client_data *list, | |||
318 | uint64_t temp_time = unix_time(); | 319 | uint64_t temp_time = unix_time(); |
319 | 320 | ||
320 | uint8_t candropipv4 = 1; | 321 | uint8_t candropipv4 = 1; |
322 | |||
321 | if (ip_port.ip.family == AF_INET6) { | 323 | if (ip_port.ip.family == AF_INET6) { |
322 | uint32_t ipv6cnt = 0; | 324 | uint32_t ipv6cnt = 0; |
323 | 325 | ||
324 | /* ipv6: count how many spots are used */ | 326 | /* ipv6: count how many spots are used */ |
325 | for(i = 0; i < length; i++) | 327 | for (i = 0; i < length; i++) |
326 | if (list[i].ip_port.ip.family == AF_INET6) | 328 | if (list[i].ip_port.ip.family == AF_INET6) |
327 | ipv6cnt++; | 329 | ipv6cnt++; |
328 | 330 | ||
@@ -334,8 +336,9 @@ static int replace_bad( Client_data *list, | |||
334 | for (i = 0; i < length; ++i) { | 336 | for (i = 0; i < length; ++i) { |
335 | /* If node is bad */ | 337 | /* If node is bad */ |
336 | Client_data *client = &list[i]; | 338 | Client_data *client = &list[i]; |
339 | |||
337 | if ((candropipv4 || (client->ip_port.ip.family == AF_INET6)) && | 340 | if ((candropipv4 || (client->ip_port.ip.family == AF_INET6)) && |
338 | is_timeout(temp_time, client->timestamp, BAD_NODE_TIMEOUT)) { | 341 | is_timeout(temp_time, client->timestamp, BAD_NODE_TIMEOUT)) { |
339 | memcpy(client->client_id, client_id, CLIENT_ID_SIZE); | 342 | memcpy(client->client_id, client_id, CLIENT_ID_SIZE); |
340 | client->ip_port = ip_port; | 343 | client->ip_port = ip_port; |
341 | client->timestamp = temp_time; | 344 | client->timestamp = temp_time; |
@@ -381,11 +384,12 @@ static int replace_good( Client_data *list, | |||
381 | sort_list(list, length, comp_client_id); | 384 | sort_list(list, length, comp_client_id); |
382 | 385 | ||
383 | uint8_t candropipv4 = 1; | 386 | uint8_t candropipv4 = 1; |
387 | |||
384 | if (ip_port.ip.family == AF_INET6) { | 388 | if (ip_port.ip.family == AF_INET6) { |
385 | uint32_t i, ipv6cnt = 0; | 389 | uint32_t i, ipv6cnt = 0; |
386 | 390 | ||
387 | /* ipv6: count how many spots are used */ | 391 | /* ipv6: count how many spots are used */ |
388 | for(i = 0; i < length; i++) | 392 | for (i = 0; i < length; i++) |
389 | if (list[i].ip_port.ip.family == AF_INET6) | 393 | if (list[i].ip_port.ip.family == AF_INET6) |
390 | ipv6cnt++; | 394 | ipv6cnt++; |
391 | 395 | ||
@@ -419,6 +423,7 @@ static int replace_good( Client_data *list, | |||
419 | */ | 423 | */ |
420 | for (i = 0; i < length; i++) { | 424 | for (i = 0; i < length; i++) { |
421 | Client_data *client = &list[i]; | 425 | Client_data *client = &list[i]; |
426 | |||
422 | if (client->ip_port.ip.family == AF_INET6) { | 427 | if (client->ip_port.ip.family == AF_INET6) { |
423 | if (id_closest(comp_client_id, list[i].client_id, client_id) == 2) | 428 | if (id_closest(comp_client_id, list[i].client_id, client_id) == 2) |
424 | replace = i; | 429 | replace = i; |
@@ -1138,14 +1143,13 @@ static int friend_iplist(DHT *dht, IP_Port *ip_portlist, uint16_t friend_num) | |||
1138 | Client_data *client; | 1143 | Client_data *client; |
1139 | 1144 | ||
1140 | for (i = 0; i < MAX_FRIEND_CLIENTS; ++i) { | 1145 | for (i = 0; i < MAX_FRIEND_CLIENTS; ++i) { |
1141 | client = &friend->client_list[i]; | 1146 | client = &(friend->client_list[i]); |
1147 | |||
1148 | if (id_equal(client->client_id, friend->client_id) && !is_timeout(temp_time, client->timestamp, BAD_NODE_TIMEOUT)) | ||
1149 | return 0; | ||
1142 | 1150 | ||
1143 | /* If ip is not zero and node is good. */ | 1151 | /* If ip is not zero and node is good. */ |
1144 | if (ip_isset(&client->ret_ip_port.ip) && !is_timeout(temp_time, client->ret_timestamp, BAD_NODE_TIMEOUT)) { | 1152 | if (ip_isset(&client->ret_ip_port.ip) && !is_timeout(temp_time, client->ret_timestamp, BAD_NODE_TIMEOUT)) { |
1145 | |||
1146 | if (id_equal(client->client_id, friend->client_id)) | ||
1147 | return 0; | ||
1148 | |||
1149 | ip_portlist[num_ips] = client->ret_ip_port; | 1153 | ip_portlist[num_ips] = client->ret_ip_port; |
1150 | ++num_ips; | 1154 | ++num_ips; |
1151 | } | 1155 | } |
diff --git a/toxcore/ping.c b/toxcore/ping.c index 09b80f0d..b9940ce1 100644 --- a/toxcore/ping.c +++ b/toxcore/ping.c | |||
@@ -15,7 +15,7 @@ | |||
15 | #include "net_crypto.h" | 15 | #include "net_crypto.h" |
16 | #include "DHT.h" | 16 | #include "DHT.h" |
17 | 17 | ||
18 | #define PING_NUM_MAX 256 | 18 | #define PING_NUM_MAX 384 |
19 | #define PING_TIMEOUT 5 // 5s | 19 | #define PING_TIMEOUT 5 // 5s |
20 | 20 | ||
21 | /* Ping newly announced nodes to ping per TIME_TOPING seconds*/ | 21 | /* Ping newly announced nodes to ping per TIME_TOPING seconds*/ |
@@ -180,6 +180,7 @@ static int handle_ping_request(void *_dht, IP_Port source, uint8_t *packet, uint | |||
180 | return 1; | 180 | return 1; |
181 | 181 | ||
182 | PING *ping = dht->ping; | 182 | PING *ping = dht->ping; |
183 | |||
183 | if (id_eq(packet + 1, ping->c->self_public_key)) | 184 | if (id_eq(packet + 1, ping->c->self_public_key)) |
184 | return 1; | 185 | return 1; |
185 | 186 | ||
@@ -211,6 +212,7 @@ static int handle_ping_response(void *_dht, IP_Port source, uint8_t *packet, uin | |||
211 | return 1; | 212 | return 1; |
212 | 213 | ||
213 | PING *ping = dht->ping; | 214 | PING *ping = dht->ping; |
215 | |||
214 | if (id_eq(packet + 1, ping->c->self_public_key)) | 216 | if (id_eq(packet + 1, ping->c->self_public_key)) |
215 | return 1; | 217 | return 1; |
216 | 218 | ||
@@ -283,7 +285,7 @@ static int is_timeout(uint64_t time_now, uint64_t timestamp, uint64_t timeout) | |||
283 | void do_toping(PING *ping) | 285 | void do_toping(PING *ping) |
284 | { | 286 | { |
285 | uint64_t temp_time = unix_time(); | 287 | uint64_t temp_time = unix_time(); |
286 | 288 | ||
287 | if (!is_timeout(temp_time, ping->last_toping, TIME_TOPING)) | 289 | if (!is_timeout(temp_time, ping->last_toping, TIME_TOPING)) |
288 | return; | 290 | return; |
289 | 291 | ||
@@ -303,6 +305,7 @@ void do_toping(PING *ping) | |||
303 | PING *new_ping(DHT *dht, Net_Crypto *c) | 305 | PING *new_ping(DHT *dht, Net_Crypto *c) |
304 | { | 306 | { |
305 | PING *ping = calloc(1, sizeof(PING)); | 307 | PING *ping = calloc(1, sizeof(PING)); |
308 | |||
306 | if (ping == NULL) | 309 | if (ping == NULL) |
307 | return NULL; | 310 | return NULL; |
308 | 311 | ||