diff options
author | irungentoo <irungentoo@gmail.com> | 2015-04-03 17:20:20 -0400 |
---|---|---|
committer | irungentoo <irungentoo@gmail.com> | 2015-04-03 17:20:20 -0400 |
commit | b279a4a8835e4371df08a5ad4e590f87200cb883 (patch) | |
tree | 02a13cfe61e4d2c663c58f0d10809a022437bba5 /toxcore/friend_connection.c | |
parent | 62dad7b3f765d9ea69b97d123a4f945d894e8714 (diff) |
Fixed offline callback being called when connection timed out and died
without ever actually being connected.
Diffstat (limited to 'toxcore/friend_connection.c')
-rw-r--r-- | toxcore/friend_connection.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/toxcore/friend_connection.c b/toxcore/friend_connection.c index 588f0d6a..074021da 100644 --- a/toxcore/friend_connection.c +++ b/toxcore/friend_connection.c | |||
@@ -224,23 +224,32 @@ static int handle_status(void *object, int number, uint8_t status) | |||
224 | if (!friend_con) | 224 | if (!friend_con) |
225 | return -1; | 225 | return -1; |
226 | 226 | ||
227 | _Bool call_cb = 0; | ||
228 | |||
227 | if (status) { /* Went online. */ | 229 | if (status) { /* Went online. */ |
230 | call_cb = 1; | ||
228 | friend_con->status = FRIENDCONN_STATUS_CONNECTED; | 231 | friend_con->status = FRIENDCONN_STATUS_CONNECTED; |
229 | friend_con->ping_lastrecv = unix_time(); | 232 | friend_con->ping_lastrecv = unix_time(); |
230 | onion_set_friend_online(fr_c->onion_c, friend_con->onion_friendnum, status); | 233 | onion_set_friend_online(fr_c->onion_c, friend_con->onion_friendnum, status); |
231 | } else { /* Went offline. */ | 234 | } else { /* Went offline. */ |
235 | if (friend_con->status != FRIENDCONN_STATUS_CONNECTING) { | ||
236 | call_cb = 1; | ||
237 | friend_con->dht_ping_lastrecv = unix_time(); | ||
238 | onion_set_friend_online(fr_c->onion_c, friend_con->onion_friendnum, status); | ||
239 | } | ||
240 | |||
232 | friend_con->status = FRIENDCONN_STATUS_CONNECTING; | 241 | friend_con->status = FRIENDCONN_STATUS_CONNECTING; |
233 | friend_con->crypt_connection_id = -1; | 242 | friend_con->crypt_connection_id = -1; |
234 | friend_con->dht_ping_lastrecv = unix_time(); | ||
235 | onion_set_friend_online(fr_c->onion_c, friend_con->onion_friendnum, status); | ||
236 | } | 243 | } |
237 | 244 | ||
238 | unsigned int i; | 245 | if (call_cb) { |
246 | unsigned int i; | ||
239 | 247 | ||
240 | for (i = 0; i < MAX_FRIEND_CONNECTION_CALLBACKS; ++i) { | 248 | for (i = 0; i < MAX_FRIEND_CONNECTION_CALLBACKS; ++i) { |
241 | if (friend_con->callbacks[i].status_callback) | 249 | if (friend_con->callbacks[i].status_callback) |
242 | friend_con->callbacks[i].status_callback(friend_con->callbacks[i].status_callback_object, | 250 | friend_con->callbacks[i].status_callback(friend_con->callbacks[i].status_callback_object, |
243 | friend_con->callbacks[i].status_callback_id, status); | 251 | friend_con->callbacks[i].status_callback_id, status); |
252 | } | ||
244 | } | 253 | } |
245 | 254 | ||
246 | return 0; | 255 | return 0; |