Skip to content

Commit

Permalink
diagnostic: get the number of close dht nodes with announce/store sup…
Browse files Browse the repository at this point in the history
…port
  • Loading branch information
Green-Sky committed Nov 12, 2023
1 parent 6be29f0 commit 0dea30f
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 0 deletions.
8 changes: 8 additions & 0 deletions auto_tests/dht_getnodes_api_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,14 @@ static void test_dht_getnodes(AutoTox *autotoxes)

tox_self_get_dht_id(autotoxes[i].tox, public_key_list[i]);
tox_callback_dht_get_nodes_response(autotoxes[i].tox, getnodes_response_cb);


tox_dht_get_num_closelist(autotoxes[i].tox);
printf("Peer %zu dht closenode count total/annouce-capable: %d/%d\n",
i,
tox_dht_get_num_closelist(autotoxes[i].tox),
tox_dht_get_num_closelist_announce_capable(autotoxes[i].tox)
);
}

while (!all_nodes_crawled(autotoxes, NUM_TOXES, public_key_list)) {
Expand Down
28 changes: 28 additions & 0 deletions toxcore/DHT.c
Original file line number Diff line number Diff line change
Expand Up @@ -2965,6 +2965,34 @@ bool dht_non_lan_connected(const DHT *dht)
return false;
}

uint16_t dht_get_num_closelist(const DHT *dht) {
uint16_t num_valid_close_clients = 0;
for (size_t i = 0; i < LCLIENT_LIST; i++) {
const Client_data *const client = dht_get_close_client(dht, i);

// check if client is valid
if (!(assoc_timeout(dht->cur_time, &client->assoc4) && assoc_timeout(dht->cur_time, &client->assoc6))) {
num_valid_close_clients += 1;
}
}

return num_valid_close_clients;
}

uint16_t dht_get_num_closelist_announce_capable(const DHT *dht) {
uint16_t num_valid_close_clients_with_cap = 0;
for (size_t i = 0; i < LCLIENT_LIST; i++) {
const Client_data *const client = dht_get_close_client(dht, i);

// check if client is valid
if (!(assoc_timeout(dht->cur_time, &client->assoc4) && assoc_timeout(dht->cur_time, &client->assoc6)) && client->announce_node) {
num_valid_close_clients_with_cap += 1;
}
}

return num_valid_close_clients_with_cap;
}

unsigned int ipport_self_copy(const DHT *dht, IP_Port *dest)
{
ipport_reset(dest);
Expand Down
18 changes: 18 additions & 0 deletions toxcore/DHT.h
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,24 @@ bool dht_isconnected(const DHT *dht);
non_null()
bool dht_non_lan_connected(const DHT *dht);

/**
* This function returns the ratio of close dht nodes that are known to support announce/store.
* This function returns the number of DHT nodes in the closelist.
*
* @return number
*/
non_null()
uint16_t dht_get_num_closelist(const DHT *dht);

/**
* This function returns the number of DHT nodes in the closelist,
* that are capable to store annouce data (introduced in version 0.2.18).
*
* @return number
*/
non_null()
uint16_t dht_get_num_closelist_announce_capable(const DHT *dht);

/** @brief Attempt to add client with ip_port and public_key to the friends client list
* and close_clientlist.
*
Expand Down
17 changes: 17 additions & 0 deletions toxcore/tox_private.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,3 +149,20 @@ bool tox_dht_get_nodes(const Tox *tox, const uint8_t *public_key, const char *ip

return true;
}

uint16_t tox_dht_get_num_closelist(const Tox *tox) {
tox_lock(tox);
uint16_t num_total = dht_get_num_closelist(tox->m->dht);
tox_unlock(tox);

return num_total;
}

uint16_t tox_dht_get_num_closelist_announce_capable(const Tox *tox){
tox_lock(tox);
uint16_t num_cap = dht_get_num_closelist_announce_capable(tox->m->dht);
tox_unlock(tox);

return num_cap;
}

16 changes: 16 additions & 0 deletions toxcore/tox_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,22 @@ typedef enum Tox_Err_Dht_Get_Nodes {
bool tox_dht_get_nodes(const Tox *tox, const uint8_t *public_key, const char *ip, uint16_t port,
const uint8_t *target_public_key, Tox_Err_Dht_Get_Nodes *error);

/**
* This function returns the ratio of close dht nodes that are known to support announce/store.
* This function returns the number of DHT nodes in the closelist.
*
* @return number
*/
uint16_t tox_dht_get_num_closelist(const Tox *tox);

/**
* This function returns the number of DHT nodes in the closelist,
* that are capable to store annouce data (introduced in version 0.2.18).
*
* @return number
*/
uint16_t tox_dht_get_num_closelist_announce_capable(const Tox *tox);

#ifdef __cplusplus
}
#endif
Expand Down

0 comments on commit 0dea30f

Please sign in to comment.