diff options
author | irungentoo <irungentoo@gmail.com> | 2015-02-19 20:51:19 -0500 |
---|---|---|
committer | irungentoo <irungentoo@gmail.com> | 2015-02-19 20:51:19 -0500 |
commit | c87da9203e09cf1c7e0f19fc397808424fdaeea2 (patch) | |
tree | 6b87ef8608ccfcf77e6fd5eaf6e8390b8ea51675 /toxcore/Messenger.c | |
parent | 53d0eb8937b32fa638bf2f5d36d0da85975ebde7 (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.c | 36 |
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 | ||
364 | int m_friend_exists(const Messenger *m, int32_t friendnumber) | 376 | int 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 | ||
984 | static 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 | |||
972 | static void break_files(const Messenger *m, int32_t friendnumber); | 1001 | static void break_files(const Messenger *m, int32_t friendnumber); |
973 | static void check_friend_connectionstatus(Messenger *m, int32_t friendnumber, uint8_t status) | 1002 | static 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 | } |