Change way to iterate through assoc

This commit is contained in:
Diadlo 2017-04-13 23:33:28 +03:00
parent f9607bced5
commit ced07d6700
No known key found for this signature in database
GPG Key ID: 5AF9F2E29107C727

View File

@ -54,6 +54,8 @@
/* Number of get node requests to send to quickly find close nodes. */
#define MAX_BOOTSTRAP_TIMES 5
#define ASSOC_COUNT 2
/* Compares pk1 and pk2 with pk.
*
* return 0 if both are same distance.
@ -1554,10 +1556,11 @@ int DHT_getfriendip(const DHT *dht, const uint8_t *public_key, IP_Port *ip_port)
}
Client_data *client = &frnd->client_list[client_index];
IPPTsPng *assoc;
uint32_t a;
IPPTsPng *assocs[ASSOC_COUNT] = { &client->assoc6, &client->assoc4 };
for (size_t i = 0; i < ASSOC_COUNT; i++) {
IPPTsPng *assoc = assocs[i];
for (a = 0, assoc = &client->assoc6; a < 2; a++, assoc = &client->assoc4) {
if (!is_timeout(assoc->timestamp, BAD_NODE_TIMEOUT)) {
*ip_port = assoc->ip_port;
return 1;
@ -1583,10 +1586,12 @@ static uint8_t do_ping_and_sendnode_requests(DHT *dht, uint64_t *lastgetnode, co
for (uint32_t i = 0; i < list_count; i++) {
/* If node is not dead. */
Client_data *client = &list[i];
IPPTsPng *assoc;
uint32_t a;
for (a = 0, assoc = &client->assoc6; a < 2; a++, assoc = &client->assoc4) {
IPPTsPng *assocs[ASSOC_COUNT] = { &client->assoc6, &client->assoc4 };
for (size_t i = 0; i < ASSOC_COUNT; i++) {
IPPTsPng *assoc = assocs[i];
if (!is_timeout(assoc->timestamp, KILL_NODE_TIMEOUT)) {
sort = 0;
not_kill++;
@ -1679,10 +1684,12 @@ static void do_Close(DHT *dht)
for (size_t i = 0; i < LCLIENT_LIST; i++) {
Client_data *client = &dht->close_clientlist[i];
IPPTsPng *assoc;
uint32_t a;
for (a = 0, assoc = &client->assoc4; a < 2; a++, assoc = &client->assoc6) {
IPPTsPng *assocs[ASSOC_COUNT] = { &client->assoc6, &client->assoc4 };
for (size_t j = 0; j < ASSOC_COUNT; j++) {
IPPTsPng *assoc = assocs[j];
if (assoc->timestamp) {
assoc->timestamp = badonly;
}
@ -1739,13 +1746,14 @@ int route_packet(const DHT *dht, const uint8_t *public_key, const uint8_t *packe
for (uint32_t i = 0; i < LCLIENT_LIST; ++i) {
if (id_equal(public_key, dht->close_clientlist[i].public_key)) {
const Client_data *client = &dht->close_clientlist[i];
const IPPTsPng *assocs[ASSOC_COUNT] = { &client->assoc6, &client->assoc4 };
if (ip_isset(&client->assoc6.ip_port.ip)) {
return sendpacket(dht->net, client->assoc6.ip_port, packet, length);
for (size_t j = 0; j < ASSOC_COUNT; j++) {
const IPPTsPng *assoc = assocs[j];
if (ip_isset(&assoc->ip_port.ip)) {
return sendpacket(dht->net, assoc->ip_port, packet, length);
}
if (ip_isset(&client->assoc4.ip_port.ip)) {
return sendpacket(dht->net, client->assoc4.ip_port, packet, length);
}
break;
@ -1859,20 +1867,17 @@ int route_tofriend(const DHT *dht, const uint8_t *friend_id, const uint8_t *pack
/* extra legwork, because having the outside allocating the space for us
* is *usually* good(tm) (bites us in the behind in this case though) */
for (uint32_t a = 0; a < 2; a++) {
for (uint32_t i = 0; i < MAX_FRIEND_CLIENTS; ++i) {
if (friend_sent[i]) {/* Send one packet per client.*/
continue;
}
client = &dht_friend->client_list[i];
IPPTsPng *assoc = NULL;
if (!a) {
assoc = &client->assoc4;
} else {
assoc = &client->assoc6;
}
const IPPTsPng *assocs[ASSOC_COUNT] = { &client->assoc4, &client->assoc6 };
for (size_t j = 0; j < ASSOC_COUNT; j++) {
const IPPTsPng *assoc = assocs[j];
/* If ip is not zero and node is good. */
if (ip_isset(&assoc->ret_ip_port.ip) && !is_timeout(assoc->ret_timestamp, BAD_NODE_TIMEOUT)) {
@ -1910,16 +1915,13 @@ static int routeone_tofriend(DHT *dht, const uint8_t *friend_id, const uint8_t *
/* extra legwork, because having the outside allocating the space for us
* is *usually* good(tm) (bites us in the behind in this case though) */
for (uint32_t a = 0; a < 2; a++) {
for (uint32_t i = 0; i < MAX_FRIEND_CLIENTS; ++i) {
client = &dht_friend->client_list[i];
IPPTsPng *assoc = NULL;
if (!a) {
assoc = &client->assoc4;
} else {
assoc = &client->assoc6;
}
const IPPTsPng *assocs[ASSOC_COUNT] = { &client->assoc4, &client->assoc6 };
for (size_t j = 0; j < ASSOC_COUNT; j++) {
const IPPTsPng *assoc = assocs[j];
/* If ip is not zero and node is good. */
if (ip_isset(&assoc->ret_ip_port.ip) && !is_timeout(assoc->ret_timestamp, BAD_NODE_TIMEOUT)) {