diff options
author | Jeffail <ash.jeffs@gmail.com> | 2013-08-02 10:49:54 +0100 |
---|---|---|
committer | Jeffail <ash.jeffs@gmail.com> | 2013-08-02 10:49:54 +0100 |
commit | f9816b43f329045b1ea6e699f87f3e3b13a37d0d (patch) | |
tree | 1460365520eb6ef86967307102d55a78a99556ca /core | |
parent | cef8a3e4e58b7a1939c5b806f780f4e56ec3fac7 (diff) |
Refactored DHT.c down to line 881
Diffstat (limited to 'core')
-rw-r--r-- | core/DHT.c | 62 |
1 files changed, 37 insertions, 25 deletions
@@ -785,12 +785,13 @@ int DHT_addfriend(uint8_t * client_id) | |||
785 | { | 785 | { |
786 | Friend * temp; | 786 | Friend * temp; |
787 | temp = realloc(friends_list, sizeof(Friend) * (num_friends + 1)); | 787 | temp = realloc(friends_list, sizeof(Friend) * (num_friends + 1)); |
788 | if(temp == NULL) | 788 | if (temp == NULL) |
789 | return 1; | 789 | return 1; |
790 | 790 | ||
791 | friends_list = temp; | 791 | friends_list = temp; |
792 | memset(&friends_list[num_friends], 0, sizeof(Friend)); | 792 | memset(&friends_list[num_friends], 0, sizeof(Friend)); |
793 | memcpy(friends_list[num_friends].client_id, client_id, CLIENT_ID_SIZE); | 793 | memcpy(friends_list[num_friends].client_id, client_id, CLIENT_ID_SIZE); |
794 | |||
794 | friends_list[num_friends].NATping_id = ((uint64_t)random_int() << 32) + random_int(); | 795 | friends_list[num_friends].NATping_id = ((uint64_t)random_int() << 32) + random_int(); |
795 | ++num_friends; | 796 | ++num_friends; |
796 | return 0; | 797 | return 0; |
@@ -800,17 +801,21 @@ int DHT_delfriend(uint8_t * client_id) | |||
800 | { | 801 | { |
801 | uint32_t i; | 802 | uint32_t i; |
802 | Friend * temp; | 803 | Friend * temp; |
803 | for(i = 0; i < num_friends; ++i) | 804 | for (i = 0; i < num_friends; ++i) { |
804 | /* Equal */ | 805 | /* Equal */ |
805 | if(memcmp(friends_list[i].client_id, client_id, CLIENT_ID_SIZE) == 0) { | 806 | if (memcmp(friends_list[i].client_id, client_id, CLIENT_ID_SIZE) == 0) { |
806 | --num_friends; | 807 | --num_friends; |
807 | if(num_friends != i) | 808 | if (num_friends != i) { |
808 | memcpy(friends_list[i].client_id, friends_list[num_friends].client_id, CLIENT_ID_SIZE); | 809 | memcpy( friends_list[i].client_id, |
810 | friends_list[num_friends].client_id, | ||
811 | CLIENT_ID_SIZE ); | ||
812 | } | ||
809 | temp = realloc(friends_list, sizeof(Friend) * (num_friends)); | 813 | temp = realloc(friends_list, sizeof(Friend) * (num_friends)); |
810 | if(temp != NULL) | 814 | if (temp != NULL) |
811 | friends_list = temp; | 815 | friends_list = temp; |
812 | return 0; | 816 | return 0; |
813 | } | 817 | } |
818 | } | ||
814 | 819 | ||
815 | return 1; | 820 | return 1; |
816 | } | 821 | } |
@@ -818,26 +823,29 @@ int DHT_delfriend(uint8_t * client_id) | |||
818 | /* TODO: Optimize this. */ | 823 | /* TODO: Optimize this. */ |
819 | IP_Port DHT_getfriendip(uint8_t * client_id) | 824 | IP_Port DHT_getfriendip(uint8_t * client_id) |
820 | { | 825 | { |
821 | uint32_t i, j; | 826 | uint32_t i, j, temp_time = unix_time(); |
822 | IP_Port empty = {{{0}}, 0}; | 827 | IP_Port empty = {{{0}}, 0}; |
823 | uint32_t temp_time = unix_time(); | 828 | |
824 | for(i = 0; i < num_friends; ++i) | 829 | for (i = 0; i < num_friends; ++i) { |
825 | /* Equal */ | 830 | /* Equal */ |
826 | if(memcmp(friends_list[i].client_id, client_id, CLIENT_ID_SIZE) == 0) { | 831 | if (memcmp(friends_list[i].client_id, client_id, CLIENT_ID_SIZE) == 0) { |
827 | for(j = 0; j < MAX_FRIEND_CLIENTS; ++j) | 832 | for (j = 0; j < MAX_FRIEND_CLIENTS; ++j) { |
828 | if(memcmp(friends_list[i].client_list[j].client_id, client_id, CLIENT_ID_SIZE) == 0 && | 833 | if (memcmp( friends_list[i].client_list[j].client_id, |
834 | client_id, | ||
835 | CLIENT_ID_SIZE ) == 0 && | ||
829 | friends_list[i].client_list[j].timestamp + BAD_NODE_TIMEOUT > temp_time) | 836 | friends_list[i].client_list[j].timestamp + BAD_NODE_TIMEOUT > temp_time) |
830 | return friends_list[i].client_list[j].ip_port; | 837 | return friends_list[i].client_list[j].ip_port; |
831 | 838 | } | |
832 | return empty; | 839 | return empty; |
833 | } | 840 | } |
841 | } | ||
834 | empty.ip.i = 1; | 842 | empty.ip.i = 1; |
835 | return empty; | 843 | return empty; |
836 | |||
837 | } | 844 | } |
838 | 845 | ||
839 | /* Ping each client in the "friends" list every 60 seconds. | 846 | /* Ping each client in the "friends" list every 60 seconds. Send a get nodes request |
840 | Send a get nodes request every 20 seconds to a random good node for each "friend" in our "friends" list. */ | 847 | * every 20 seconds to a random good node for each "friend" in our "friends" list. |
848 | */ | ||
841 | void doDHTFriends() | 849 | void doDHTFriends() |
842 | { | 850 | { |
843 | uint32_t i, j; | 851 | uint32_t i, j; |
@@ -845,24 +853,28 @@ void doDHTFriends() | |||
845 | uint32_t rand_node; | 853 | uint32_t rand_node; |
846 | uint32_t index[MAX_FRIEND_CLIENTS]; | 854 | uint32_t index[MAX_FRIEND_CLIENTS]; |
847 | 855 | ||
848 | for(i = 0; i < num_friends; ++i) { | 856 | for (i = 0; i < num_friends; ++i) { |
849 | uint32_t num_nodes = 0; | 857 | uint32_t num_nodes = 0; |
850 | for(j = 0; j < MAX_FRIEND_CLIENTS; ++j) | 858 | for (j = 0; j < MAX_FRIEND_CLIENTS; ++j) { |
851 | if(friends_list[i].client_list[j].timestamp + Kill_NODE_TIMEOUT > temp_time) { /* if node is not dead. */ | 859 | /* if node is not dead. */ |
852 | if((friends_list[i].client_list[j].last_pinged + PING_INTERVAL) <= temp_time) { | 860 | if (friends_list[i].client_list[j].timestamp + Kill_NODE_TIMEOUT > temp_time) { |
853 | pingreq(friends_list[i].client_list[j].ip_port, friends_list[i].client_list[j].client_id); | 861 | if ((friends_list[i].client_list[j].last_pinged + PING_INTERVAL) <= temp_time) { |
862 | pingreq( friends_list[i].client_list[j].ip_port, | ||
863 | friends_list[i].client_list[j].client_id ); | ||
854 | friends_list[i].client_list[j].last_pinged = temp_time; | 864 | friends_list[i].client_list[j].last_pinged = temp_time; |
855 | } | 865 | } |
856 | if(friends_list[i].client_list[j].timestamp + BAD_NODE_TIMEOUT > temp_time) { /* if node is good. */ | 866 | /* if node is good. */ |
867 | if (friends_list[i].client_list[j].timestamp + BAD_NODE_TIMEOUT > temp_time) { | ||
857 | index[num_nodes] = j; | 868 | index[num_nodes] = j; |
858 | ++num_nodes; | 869 | ++num_nodes; |
859 | } | 870 | } |
860 | } | 871 | } |
872 | } | ||
861 | if(friends_list[i].lastgetnode + GET_NODE_INTERVAL <= temp_time && num_nodes != 0) { | 873 | if(friends_list[i].lastgetnode + GET_NODE_INTERVAL <= temp_time && num_nodes != 0) { |
862 | rand_node = rand() % num_nodes; | 874 | rand_node = rand() % num_nodes; |
863 | getnodes(friends_list[i].client_list[index[rand_node]].ip_port, | 875 | getnodes( friends_list[i].client_list[index[rand_node]].ip_port, |
864 | friends_list[i].client_list[index[rand_node]].client_id, | 876 | friends_list[i].client_list[index[rand_node]].client_id, |
865 | friends_list[i].client_id); | 877 | friends_list[i].client_id ); |
866 | friends_list[i].lastgetnode = temp_time; | 878 | friends_list[i].lastgetnode = temp_time; |
867 | } | 879 | } |
868 | } | 880 | } |