diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/DHT.c | 30 | ||||
-rw-r--r-- | core/DHT.h | 4 |
2 files changed, 16 insertions, 18 deletions
@@ -214,7 +214,7 @@ int replace_bad(Client_data * list, uint32_t length, char * client_id, IP_Port i | |||
214 | 214 | ||
215 | } | 215 | } |
216 | 216 | ||
217 | //replace the first good node further to the comp_client_id than that of the client_id | 217 | //replace the first good node that is further to the comp_client_id than that of the client_id in the list |
218 | int replace_good(Client_data * list, uint32_t length, char * client_id, IP_Port ip_port, char * comp_client_id) | 218 | int replace_good(Client_data * list, uint32_t length, char * client_id, IP_Port ip_port, char * comp_client_id) |
219 | { | 219 | { |
220 | uint32_t i; | 220 | uint32_t i; |
@@ -266,7 +266,7 @@ void addto_lists(IP_Port ip_port, char * client_id) | |||
266 | 266 | ||
267 | 267 | ||
268 | //ping timeout in seconds | 268 | //ping timeout in seconds |
269 | #define PING_TIMEOUT 10 | 269 | #define PING_TIMEOUT 5 |
270 | //check if we are currently pinging an ip_port and/or a ping_id | 270 | //check if we are currently pinging an ip_port and/or a ping_id |
271 | //Variables with values of zero will not be checked. | 271 | //Variables with values of zero will not be checked. |
272 | //if we are already, return 1 | 272 | //if we are already, return 1 |
@@ -282,24 +282,23 @@ int is_pinging(IP_Port ip_port, uint32_t ping_id) | |||
282 | { | 282 | { |
283 | if((pings[i].timestamp + PING_TIMEOUT) > temp_time) | 283 | if((pings[i].timestamp + PING_TIMEOUT) > temp_time) |
284 | { | 284 | { |
285 | pinging = 0; | ||
285 | if(ip_port.ip.i != 0) | 286 | if(ip_port.ip.i != 0) |
286 | { | 287 | { |
287 | pinging = 0; | ||
288 | if(pings[i].ip_port.ip.i == ip_port.ip.i && | 288 | if(pings[i].ip_port.ip.i == ip_port.ip.i && |
289 | pings[i].ip_port.port == ip_port.port) | 289 | pings[i].ip_port.port == ip_port.port) |
290 | { | 290 | { |
291 | pinging = 1; | 291 | pinging++; |
292 | } | 292 | } |
293 | } | 293 | } |
294 | if(ping_id != 0) | 294 | if(ping_id != 0) |
295 | { | 295 | { |
296 | pinging = 0; | ||
297 | if(pings[i].ping_id == ping_id) | 296 | if(pings[i].ping_id == ping_id) |
298 | { | 297 | { |
299 | pinging = 1; | 298 | pinging++; |
300 | } | 299 | } |
301 | } | 300 | } |
302 | if(pinging == 1) | 301 | if(pinging == (ping_id != 0) + (ip_port.ip.i != 0)) |
303 | { | 302 | { |
304 | return 1; | 303 | return 1; |
305 | } | 304 | } |
@@ -323,24 +322,23 @@ int is_gettingnodes(IP_Port ip_port, uint32_t ping_id) | |||
323 | { | 322 | { |
324 | if((send_nodes[i].timestamp + PING_TIMEOUT) > temp_time) | 323 | if((send_nodes[i].timestamp + PING_TIMEOUT) > temp_time) |
325 | { | 324 | { |
325 | pinging = 0; | ||
326 | if(ip_port.ip.i != 0) | 326 | if(ip_port.ip.i != 0) |
327 | { | 327 | { |
328 | pinging = 0; | ||
329 | if(send_nodes[i].ip_port.ip.i == ip_port.ip.i && | 328 | if(send_nodes[i].ip_port.ip.i == ip_port.ip.i && |
330 | send_nodes[i].ip_port.port == ip_port.port) | 329 | send_nodes[i].ip_port.port == ip_port.port) |
331 | { | 330 | { |
332 | pinging = 1; | 331 | pinging++; |
333 | } | 332 | } |
334 | } | 333 | } |
335 | if(ping_id != 0) | 334 | if(ping_id != 0) |
336 | { | 335 | { |
337 | pinging = 0; | ||
338 | if(send_nodes[i].ping_id == ping_id) | 336 | if(send_nodes[i].ping_id == ping_id) |
339 | { | 337 | { |
340 | pinging = 1; | 338 | pinging++; |
341 | } | 339 | } |
342 | } | 340 | } |
343 | if(pinging == 1) | 341 | if(pinging == (ping_id != 0) + (ip_port.ip.i != 0)) |
344 | { | 342 | { |
345 | return 1; | 343 | return 1; |
346 | } | 344 | } |
@@ -407,7 +405,7 @@ int add_gettingnodes(IP_Port ip_port) | |||
407 | 405 | ||
408 | 406 | ||
409 | //send a ping request | 407 | //send a ping request |
410 | //Ping request only works if there is none hos been sent to that ip/port in the last 5 seconds. | 408 | //Ping request only works if none has been sent to that ip/port in the last 5 seconds. |
411 | int pingreq(IP_Port ip_port) | 409 | int pingreq(IP_Port ip_port) |
412 | { | 410 | { |
413 | if(is_pinging(ip_port, 0)) | 411 | if(is_pinging(ip_port, 0)) |
@@ -474,7 +472,7 @@ int getnodes(IP_Port ip_port, char * client_id) | |||
474 | //send a send nodes response | 472 | //send a send nodes response |
475 | int sendnodes(IP_Port ip_port, char * client_id, uint32_t ping_id) | 473 | int sendnodes(IP_Port ip_port, char * client_id, uint32_t ping_id) |
476 | { | 474 | { |
477 | char data[5 + (CLIENT_ID_SIZE + sizeof(IP_Port))*MAX_SENT_NODES]; | 475 | char data[5 + CLIENT_ID_SIZE + (CLIENT_ID_SIZE + sizeof(IP_Port))*MAX_SENT_NODES]; |
478 | Node_format nodes_list[MAX_SENT_NODES]; | 476 | Node_format nodes_list[MAX_SENT_NODES]; |
479 | 477 | ||
480 | int num_nodes = get_close_nodes(client_id, nodes_list); | 478 | int num_nodes = get_close_nodes(client_id, nodes_list); |
@@ -703,7 +701,7 @@ int DHT_recvpacket(char * packet, uint32_t length, IP_Port source) | |||
703 | //Ping each client in the "friends" list every 60 seconds. | 701 | //Ping each client in the "friends" list every 60 seconds. |
704 | //Send a get nodes request every 20 seconds to a random good node for each "friend" in our "friends" list. | 702 | //Send a get nodes request every 20 seconds to a random good node for each "friend" in our "friends" list. |
705 | 703 | ||
706 | uint32_t friend_lastgetnode[MAX_FRIENDS]; | 704 | static uint32_t friend_lastgetnode[MAX_FRIENDS]; |
707 | 705 | ||
708 | 706 | ||
709 | void doFriends() | 707 | void doFriends() |
@@ -742,7 +740,7 @@ void doFriends() | |||
742 | } | 740 | } |
743 | } | 741 | } |
744 | 742 | ||
745 | uint32_t close_lastgetnodes; | 743 | static uint32_t close_lastgetnodes; |
746 | 744 | ||
747 | //Ping each client in the close nodes list every 60 seconds. | 745 | //Ping each client in the close nodes list every 60 seconds. |
748 | //Send a get nodes request every 20 seconds to a random good node int the list. | 746 | //Send a get nodes request every 20 seconds to a random good node int the list. |
@@ -117,8 +117,8 @@ IP_Port getfriendip(char * client_id); | |||
117 | void doDHT(); | 117 | void doDHT(); |
118 | 118 | ||
119 | //if we recieve a DHT packet we call this function so it can be handled. | 119 | //if we recieve a DHT packet we call this function so it can be handled. |
120 | //Return 0 if packet is handled correctly or if the packet was shit. | 120 | //Return 0 if packet is handled correctly. |
121 | //return 1 if it didn't handle the packet. | 121 | //return 1 if it didn't handle the packet or if the packet was shit. |
122 | int DHT_recvpacket(char * packet, uint32_t length, IP_Port source); | 122 | int DHT_recvpacket(char * packet, uint32_t length, IP_Port source); |
123 | 123 | ||
124 | //Use this function to bootstrap the client | 124 | //Use this function to bootstrap the client |