summaryrefslogtreecommitdiff
path: root/toxcore/Messenger.c
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2015-02-19 20:51:19 -0500
committerirungentoo <irungentoo@gmail.com>2015-02-19 20:51:19 -0500
commitc87da9203e09cf1c7e0f19fc397808424fdaeea2 (patch)
tree6b87ef8608ccfcf77e6fd5eaf6e8390b8ea51675 /toxcore/Messenger.c
parent53d0eb8937b32fa638bf2f5d36d0da85975ebde7 (diff)
Tox connection function and callback should now work as expected.
Changes in Messenger to call the callback every time the connection type changes from TCP to UDP.
Diffstat (limited to 'toxcore/Messenger.c')
-rw-r--r--toxcore/Messenger.c36
1 files changed, 33 insertions, 3 deletions
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c
index ced02a12..11da5951 100644
--- a/toxcore/Messenger.c
+++ b/toxcore/Messenger.c
@@ -358,7 +358,19 @@ int m_get_friend_connectionstatus(const Messenger *m, int32_t friendnumber)
358 if (friend_not_valid(m, friendnumber)) 358 if (friend_not_valid(m, friendnumber))
359 return -1; 359 return -1;
360 360
361 return m->friendlist[friendnumber].status == FRIEND_ONLINE; 361 if (m->friendlist[friendnumber].status == FRIEND_ONLINE) {
362 uint8_t direct_connected = 0;
363 crypto_connection_status(m->net_crypto, friend_connection_crypt_connection_id(m->fr_c,
364 m->friendlist[friendnumber].friendcon_id), &direct_connected);
365
366 if (direct_connected) {
367 return CONNECTION_UDP;
368 } else {
369 return CONNECTION_TCP;
370 }
371 } else {
372 return CONNECTION_NONE;
373 }
362} 374}
363 375
364int m_friend_exists(const Messenger *m, int32_t friendnumber) 376int m_friend_exists(const Messenger *m, int32_t friendnumber)
@@ -969,6 +981,23 @@ void m_callback_avatar_data(Messenger *m, void (*function)(Messenger *m, uint32_
969 m->avatar_data_recv_userdata = userdata; 981 m->avatar_data_recv_userdata = userdata;
970} 982}
971 983
984static void check_friend_tcp_udp(Messenger *m, int32_t friendnumber)
985{
986 int last_connection_udp_tcp = m->friendlist[friendnumber].last_connection_udp_tcp;
987
988 int ret = m_get_friend_connectionstatus(m, friendnumber);
989
990 if (ret == -1)
991 return;
992
993 if (last_connection_udp_tcp != ret) {
994 if (m->friend_connectionstatuschange)
995 m->friend_connectionstatuschange(m, friendnumber, ret, m->friend_connectionstatuschange_userdata);
996 }
997
998 m->friendlist[friendnumber].last_connection_udp_tcp = ret;
999}
1000
972static void break_files(const Messenger *m, int32_t friendnumber); 1001static void break_files(const Messenger *m, int32_t friendnumber);
973static void check_friend_connectionstatus(Messenger *m, int32_t friendnumber, uint8_t status) 1002static void check_friend_connectionstatus(Messenger *m, int32_t friendnumber, uint8_t status)
974{ 1003{
@@ -988,8 +1017,7 @@ static void check_friend_connectionstatus(Messenger *m, int32_t friendnumber, ui
988 1017
989 m->friendlist[friendnumber].status = status; 1018 m->friendlist[friendnumber].status = status;
990 1019
991 if (m->friend_connectionstatuschange) 1020 check_friend_tcp_udp(m, friendnumber);
992 m->friend_connectionstatuschange(m, friendnumber, is_online, m->friend_connectionstatuschange_userdata);
993 1021
994 if (m->friend_connectionstatuschange_internal) 1022 if (m->friend_connectionstatuschange_internal)
995 m->friend_connectionstatuschange_internal(m, friendnumber, is_online, 1023 m->friend_connectionstatuschange_internal(m, friendnumber, is_online,
@@ -2316,6 +2344,8 @@ void do_friends(Messenger *m)
2316 if (m->friendlist[i].share_relays_lastsent + FRIEND_SHARE_RELAYS_INTERVAL < temp_time) { 2344 if (m->friendlist[i].share_relays_lastsent + FRIEND_SHARE_RELAYS_INTERVAL < temp_time) {
2317 send_relays(m, i); 2345 send_relays(m, i);
2318 } 2346 }
2347
2348 check_friend_tcp_udp(m, i);
2319 } 2349 }
2320 } 2350 }
2321} 2351}