summaryrefslogtreecommitdiff
path: root/toxcore/friend_connection.c
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2015-04-03 17:20:20 -0400
committerirungentoo <irungentoo@gmail.com>2015-04-03 17:20:20 -0400
commitb279a4a8835e4371df08a5ad4e590f87200cb883 (patch)
tree02a13cfe61e4d2c663c58f0d10809a022437bba5 /toxcore/friend_connection.c
parent62dad7b3f765d9ea69b97d123a4f945d894e8714 (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.c23
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;