Moved cleaup_friend functionality to Messenger.

This commit is contained in:
irungentoo 2014-09-26 21:01:18 -04:00
parent c618263acd
commit a8b7ddc1a3
No known key found for this signature in database
GPG Key ID: 10349DC9BED89E98
3 changed files with 20 additions and 24 deletions

View File

@ -193,6 +193,8 @@ static void dht_pk_callback(void *data, int32_t number, const uint8_t *dht_publi
if (friend_not_valid(m, number)) if (friend_not_valid(m, number))
return; return;
m->friendlist[number].dht_ping_lastrecv = unix_time();
if (memcmp(m->friendlist[number].dht_temp_pk, dht_public_key, crypto_box_PUBLICKEYBYTES) == 0) if (memcmp(m->friendlist[number].dht_temp_pk, dht_public_key, crypto_box_PUBLICKEYBYTES) == 0)
return; return;
@ -1765,6 +1767,8 @@ static int handle_status(void *object, int i, uint8_t status)
} else { /* Went offline. */ } else { /* Went offline. */
m->friendlist[i].crypt_connection_id = -1; m->friendlist[i].crypt_connection_id = -1;
m->friendlist[i].dht_ping_lastrecv = temp_time;
if (m->friendlist[i].status == FRIEND_ONLINE) { if (m->friendlist[i].status == FRIEND_ONLINE) {
set_friend_status(m, i, FRIEND_CONFIRMED); set_friend_status(m, i, FRIEND_CONFIRMED);
} }
@ -2400,6 +2404,17 @@ void do_friends(Messenger *m)
*/ */
check_friend_request_timed_out(m, i, temp_time); check_friend_request_timed_out(m, i, temp_time);
} else {
if (m->friendlist[i].dht_ping_lastrecv + FRIEND_DHT_TIMEOUT < temp_time) {
if (m->friendlist[i].dht_lock) {
DHT_delfriend(m->dht, m->friendlist[i].dht_temp_pk, m->friendlist[i].dht_lock);
m->friendlist[i].dht_lock = 0;
}
}
}
friend_new_connection(m, i, m->friendlist[i].client_id);
if (m->friendlist[i].dht_lock) if (m->friendlist[i].dht_lock)
set_connection_dht_public_key(m->net_crypto, m->friendlist[i].crypt_connection_id, m->friendlist[i].dht_temp_pk, set_connection_dht_public_key(m->net_crypto, m->friendlist[i].crypt_connection_id, m->friendlist[i].dht_temp_pk,
current_time_monotonic()); current_time_monotonic());
@ -2408,9 +2423,6 @@ void do_friends(Messenger *m)
} }
friend_new_connection(m, i, m->friendlist[i].client_id);
}
if (m->friendlist[i].status == FRIEND_ONLINE) { /* friend is online. */ if (m->friendlist[i].status == FRIEND_ONLINE) { /* friend is online. */
if (m->friendlist[i].name_sent == 0) { if (m->friendlist[i].name_sent == 0) {
if (m_sendname(m, i, m->name, m->name_length)) if (m_sendname(m, i, m->name, m->name_length))

View File

@ -120,6 +120,7 @@ enum {
#define AVATAR_DATA_TRANSFER_LIMIT (10*AVATAR_MAX_DATA_LENGTH) #define AVATAR_DATA_TRANSFER_LIMIT (10*AVATAR_MAX_DATA_LENGTH)
#define AVATAR_DATA_TRANSFER_TIMEOUT (60) /* 164kB every 60 seconds is not a lot */ #define AVATAR_DATA_TRANSFER_TIMEOUT (60) /* 164kB every 60 seconds is not a lot */
#define FRIEND_DHT_TIMEOUT (5 * 60) /* Time before friend is removed from the DHT after last hearing about him. */
/* USERSTATUS - /* USERSTATUS -
* Represents userstatuses someone can have. * Represents userstatuses someone can have.
@ -200,6 +201,7 @@ typedef struct {
uint8_t dht_temp_pk[crypto_box_PUBLICKEYBYTES]; uint8_t dht_temp_pk[crypto_box_PUBLICKEYBYTES];
uint16_t dht_lock; uint16_t dht_lock;
IP_Port dht_ip_port; IP_Port dht_ip_port;
uint64_t dht_ping_lastrecv;
uint32_t onion_friendnum; uint32_t onion_friendnum;
int crypt_connection_id; int crypt_connection_id;

View File

@ -1204,23 +1204,6 @@ static void do_friend(Onion_Client *onion_c, uint16_t friendnum)
} }
} }
/* Timeout before which a peer is considered dead and removed from the DHT search. */
#define DEAD_ONION_TIMEOUT (10 * 60)
static void cleanup_friend(Onion_Client *onion_c, uint16_t friendnum)
{
if (friendnum >= onion_c->num_friends)
return;
if (onion_c->friends_list[friendnum].status == 0)
return;
if (onion_c->friends_list[friendnum].is_fake_clientid && !onion_c->friends_list[friendnum].is_online
&& is_timeout(onion_c->friends_list[friendnum].last_seen, DEAD_ONION_TIMEOUT)) {
onion_c->friends_list[friendnum].is_fake_clientid = 0;
//DHT_delfriend(onion_c->dht, onion_c->friends_list[friendnum].fake_client_id, 0);
}
}
/* Function to call when onion data packet with contents beginning with byte is received. */ /* Function to call when onion data packet with contents beginning with byte is received. */
void oniondata_registerhandler(Onion_Client *onion_c, uint8_t byte, oniondata_handler_callback cb, void *object) void oniondata_registerhandler(Onion_Client *onion_c, uint8_t byte, oniondata_handler_callback cb, void *object)
@ -1293,7 +1276,6 @@ void do_onion_client(Onion_Client *onion_c)
if (onion_isconnected(onion_c)) { if (onion_isconnected(onion_c)) {
for (i = 0; i < onion_c->num_friends; ++i) { for (i = 0; i < onion_c->num_friends; ++i) {
do_friend(onion_c, i); do_friend(onion_c, i);
cleanup_friend(onion_c, i);
} }
} }