summaryrefslogtreecommitdiff
path: root/toxcore/group.c
diff options
context:
space:
mode:
authoriphydf <iphydf@users.noreply.github.com>2018-07-12 20:56:22 +0000
committeriphydf <iphydf@users.noreply.github.com>2018-07-12 21:15:51 +0000
commit2377cac94ba801f4b6363f23490dfdbcc332a8ad (patch)
tree107138063e36bc7f067ce14df88a4541d54ab0d1 /toxcore/group.c
parentbeeb9b4335d9ca6f947a52528453753a51f194f3 (diff)
Use named function types for group callbacks.
Also some other cleanups. This PR means that future PRs, i.e. the PGC PR, must not break the rules established here.
Diffstat (limited to 'toxcore/group.c')
-rw-r--r--toxcore/group.c63
1 files changed, 30 insertions, 33 deletions
diff --git a/toxcore/group.c b/toxcore/group.c
index 4942d872..a2ebca16 100644
--- a/toxcore/group.c
+++ b/toxcore/group.c
@@ -221,11 +221,11 @@ static uint64_t calculate_comp_value(const uint8_t *pk1, const uint8_t *pk2)
221 return (cmp1 - cmp2); 221 return (cmp1 - cmp2);
222} 222}
223 223
224enum { 224typedef enum Groupchat_Closest {
225 GROUPCHAT_CLOSEST_NONE, 225 GROUPCHAT_CLOSEST_NONE,
226 GROUPCHAT_CLOSEST_ADDED, 226 GROUPCHAT_CLOSEST_ADDED,
227 GROUPCHAT_CLOSEST_REMOVED 227 GROUPCHAT_CLOSEST_REMOVED
228}; 228} Groupchat_Closest;
229 229
230static int friend_in_close(Group_c *g, int friendcon_id); 230static int friend_in_close(Group_c *g, int friendcon_id);
231static int add_conn_to_groupchat(Group_Chats *g_c, int friendcon_id, uint32_t groupnumber, uint8_t closest, 231static int add_conn_to_groupchat(Group_Chats *g_c, int friendcon_id, uint32_t groupnumber, uint8_t closest,
@@ -1114,9 +1114,7 @@ int join_groupchat(Group_Chats *g_c, uint32_t friendnumber, uint8_t expected_typ
1114 * 1114 *
1115 * Function(void *group object (set with group_set_object), uint32_t groupnumber, uint32_t friendgroupnumber, void *group peer object (set with group_peer_set_object), const uint8_t *packet, uint16_t length) 1115 * Function(void *group object (set with group_set_object), uint32_t groupnumber, uint32_t friendgroupnumber, void *group peer object (set with group_peer_set_object), const uint8_t *packet, uint16_t length)
1116 */ 1116 */
1117void group_lossy_packet_registerhandler(Group_Chats *g_c, uint8_t byte, int (*function)(void *, uint32_t, uint32_t, 1117void group_lossy_packet_registerhandler(Group_Chats *g_c, uint8_t byte, lossy_packet_cb *function)
1118 void *,
1119 const uint8_t *, uint16_t))
1120{ 1118{
1121 g_c->lossy_packethandlers[byte].function = function; 1119 g_c->lossy_packethandlers[byte].function = function;
1122} 1120}
@@ -1127,8 +1125,7 @@ void group_lossy_packet_registerhandler(Group_Chats *g_c, uint8_t byte, int (*fu
1127 * 1125 *
1128 * data of length is what needs to be passed to join_groupchat(). 1126 * data of length is what needs to be passed to join_groupchat().
1129 */ 1127 */
1130void g_callback_group_invite(Group_Chats *g_c, void (*function)(Messenger *m, uint32_t, int, const uint8_t *, 1128void g_callback_group_invite(Group_Chats *g_c, g_conference_invite_cb *function)
1131 size_t, void *))
1132{ 1129{
1133 g_c->invite_callback = function; 1130 g_c->invite_callback = function;
1134} 1131}
@@ -1138,8 +1135,7 @@ void g_callback_group_invite(Group_Chats *g_c, void (*function)(Messenger *m, ui
1138 * 1135 *
1139 * Function(Group_Chats *g_c, uint32_t groupnumber, uint32_t friendgroupnumber, uint8_t * message, size_t length, void *userdata) 1136 * Function(Group_Chats *g_c, uint32_t groupnumber, uint32_t friendgroupnumber, uint8_t * message, size_t length, void *userdata)
1140 */ 1137 */
1141void g_callback_group_message(Group_Chats *g_c, void (*function)(Messenger *m, uint32_t, uint32_t, int, const uint8_t *, 1138void g_callback_group_message(Group_Chats *g_c, g_conference_message_cb *function)
1142 size_t, void *))
1143{ 1139{
1144 g_c->message_callback = function; 1140 g_c->message_callback = function;
1145} 1141}
@@ -1149,8 +1145,7 @@ void g_callback_group_message(Group_Chats *g_c, void (*function)(Messenger *m, u
1149 * It gets called every time a peer changes their nickname. 1145 * It gets called every time a peer changes their nickname.
1150 * Function(Group_Chats *g_c, uint32_t groupnumber, uint32_t peernumber, const uint8_t *nick, size_t nick_len, void *userdata) 1146 * Function(Group_Chats *g_c, uint32_t groupnumber, uint32_t peernumber, const uint8_t *nick, size_t nick_len, void *userdata)
1151 */ 1147 */
1152void g_callback_peer_name(Group_Chats *g_c, void (*function)(Messenger *m, uint32_t, uint32_t, const uint8_t *, 1148void g_callback_peer_name(Group_Chats *g_c, peer_name_cb *function)
1153 size_t, void *))
1154{ 1149{
1155 g_c->peer_name_callback = function; 1150 g_c->peer_name_callback = function;
1156} 1151}
@@ -1160,7 +1155,7 @@ void g_callback_peer_name(Group_Chats *g_c, void (*function)(Messenger *m, uint3
1160 * It gets called every time the name list changes(new peer, deleted peer) 1155 * It gets called every time the name list changes(new peer, deleted peer)
1161 * Function(Group_Chats *g_c, uint32_t groupnumber, void *userdata) 1156 * Function(Group_Chats *g_c, uint32_t groupnumber, void *userdata)
1162 */ 1157 */
1163void g_callback_peer_list_changed(Group_Chats *g_c, void (*function)(Messenger *m, uint32_t, void *)) 1158void g_callback_peer_list_changed(Group_Chats *g_c, peer_list_changed_cb *function)
1164{ 1159{
1165 g_c->peer_list_changed_callback = function; 1160 g_c->peer_list_changed_callback = function;
1166} 1161}
@@ -1171,8 +1166,7 @@ void g_callback_peer_list_changed(Group_Chats *g_c, void (*function)(Messenger *
1171 * Function(Group_Chats *g_c, int groupnumber, int friendgroupnumber, uint8_t * title, uint8_t length, void *userdata) 1166 * Function(Group_Chats *g_c, int groupnumber, int friendgroupnumber, uint8_t * title, uint8_t length, void *userdata)
1172 * if friendgroupnumber == -1, then author is unknown (e.g. initial joining the group) 1167 * if friendgroupnumber == -1, then author is unknown (e.g. initial joining the group)
1173 */ 1168 */
1174void g_callback_group_title(Group_Chats *g_c, void (*function)(Messenger *m, uint32_t, uint32_t, const uint8_t *, 1169void g_callback_group_title(Group_Chats *g_c, title_cb *function)
1175 size_t, void *))
1176{ 1170{
1177 g_c->title_callback = function; 1171 g_c->title_callback = function;
1178} 1172}
@@ -1184,8 +1178,7 @@ void g_callback_group_title(Group_Chats *g_c, void (*function)(Messenger *m, uin
1184 * return 0 on success. 1178 * return 0 on success.
1185 * return -1 on failure. 1179 * return -1 on failure.
1186 */ 1180 */
1187int callback_groupchat_peer_new(const Group_Chats *g_c, uint32_t groupnumber, void (*function)(void *, uint32_t, 1181int callback_groupchat_peer_new(const Group_Chats *g_c, uint32_t groupnumber, peer_on_join_cb *function)
1188 uint32_t))
1189{ 1182{
1190 Group_c *g = get_group_c(g_c, groupnumber); 1183 Group_c *g = get_group_c(g_c, groupnumber);
1191 1184
@@ -1204,7 +1197,7 @@ int callback_groupchat_peer_new(const Group_Chats *g_c, uint32_t groupnumber, vo
1204 * return 0 on success. 1197 * return 0 on success.
1205 * return -1 on failure. 1198 * return -1 on failure.
1206 */ 1199 */
1207int callback_groupchat_peer_delete(Group_Chats *g_c, uint32_t groupnumber, void (*function)(void *, uint32_t, void *)) 1200int callback_groupchat_peer_delete(Group_Chats *g_c, uint32_t groupnumber, peer_on_leave_cb *function)
1208{ 1201{
1209 Group_c *g = get_group_c(g_c, groupnumber); 1202 Group_c *g = get_group_c(g_c, groupnumber);
1210 1203
@@ -1223,7 +1216,7 @@ int callback_groupchat_peer_delete(Group_Chats *g_c, uint32_t groupnumber, void
1223 * return 0 on success. 1216 * return 0 on success.
1224 * return -1 on failure. 1217 * return -1 on failure.
1225 */ 1218 */
1226int callback_groupchat_delete(Group_Chats *g_c, uint32_t groupnumber, void (*function)(void *, uint32_t)) 1219int callback_groupchat_delete(Group_Chats *g_c, uint32_t groupnumber, group_on_delete_cb *function)
1227{ 1220{
1228 Group_c *g = get_group_c(g_c, groupnumber); 1221 Group_c *g = get_group_c(g_c, groupnumber);
1229 1222
@@ -1414,7 +1407,7 @@ static void handle_friend_invite_packet(Messenger *m, uint32_t friendnumber, con
1414 1407
1415 if (groupnumber == -1) { 1408 if (groupnumber == -1) {
1416 if (g_c->invite_callback) { 1409 if (g_c->invite_callback) {
1417 g_c->invite_callback(m, friendnumber, *(invite_data + sizeof(uint16_t)), invite_data, invite_length, userdata); 1410 g_c->invite_callback(m, friendnumber, invite_data[sizeof(uint16_t)], invite_data, invite_length, userdata);
1418 } 1411 }
1419 1412
1420 return; 1413 return;
@@ -1631,22 +1624,24 @@ static unsigned int send_peers(Group_Chats *g_c, uint32_t groupnumber, int frien
1631 return 0; 1624 return 0;
1632 } 1625 }
1633 1626
1634 uint8_t packet[MAX_CRYPTO_DATA_SIZE - (1 + sizeof(uint16_t))]; 1627 uint8_t response_packet[MAX_CRYPTO_DATA_SIZE - (1 + sizeof(uint16_t))];
1635 packet[0] = PEER_RESPONSE_ID; 1628 response_packet[0] = PEER_RESPONSE_ID;
1636 uint8_t *p = packet + 1; 1629 uint8_t *p = response_packet + 1;
1637 1630
1638 uint16_t sent = 0; 1631 uint16_t sent = 0;
1639 unsigned int i; 1632 unsigned int i;
1640 1633
1641 for (i = 0; i < g->numpeers; ++i) { 1634 for (i = 0; i < g->numpeers; ++i) {
1642 if ((p - packet) + sizeof(uint16_t) + CRYPTO_PUBLIC_KEY_SIZE * 2 + 1 + g->group[i].nick_len > sizeof(packet)) { 1635 if ((p - response_packet) + sizeof(uint16_t) + CRYPTO_PUBLIC_KEY_SIZE * 2 + 1 + g->group[i].nick_len > sizeof(
1643 if (send_packet_group_peer(g_c->fr_c, friendcon_id, PACKET_ID_DIRECT_CONFERENCE, group_num, packet, (p - packet))) { 1636 response_packet)) {
1637 if (send_packet_group_peer(g_c->fr_c, friendcon_id, PACKET_ID_DIRECT_CONFERENCE, group_num, response_packet,
1638 (p - response_packet))) {
1644 sent = i; 1639 sent = i;
1645 } else { 1640 } else {
1646 return sent; 1641 return sent;
1647 } 1642 }
1648 1643
1649 p = packet + 1; 1644 p = response_packet + 1;
1650 } 1645 }
1651 1646
1652 uint16_t peer_num = net_htons(g->group[i].peer_number); 1647 uint16_t peer_num = net_htons(g->group[i].peer_number);
@@ -1663,16 +1658,18 @@ static unsigned int send_peers(Group_Chats *g_c, uint32_t groupnumber, int frien
1663 } 1658 }
1664 1659
1665 if (sent != i) { 1660 if (sent != i) {
1666 if (send_packet_group_peer(g_c->fr_c, friendcon_id, PACKET_ID_DIRECT_CONFERENCE, group_num, packet, (p - packet))) { 1661 if (send_packet_group_peer(g_c->fr_c, friendcon_id, PACKET_ID_DIRECT_CONFERENCE, group_num, response_packet,
1662 (p - response_packet))) {
1667 sent = i; 1663 sent = i;
1668 } 1664 }
1669 } 1665 }
1670 1666
1671 if (g->title_len) { 1667 if (g->title_len) {
1672 VLA(uint8_t, Packet, 1 + g->title_len); 1668 VLA(uint8_t, title_packet, 1 + g->title_len);
1673 Packet[0] = PEER_TITLE_ID; 1669 title_packet[0] = PEER_TITLE_ID;
1674 memcpy(Packet + 1, g->title, g->title_len); 1670 memcpy(title_packet + 1, g->title, g->title_len);
1675 send_packet_group_peer(g_c->fr_c, friendcon_id, PACKET_ID_DIRECT_CONFERENCE, group_num, Packet, SIZEOF_VLA(Packet)); 1671 send_packet_group_peer(g_c->fr_c, friendcon_id, PACKET_ID_DIRECT_CONFERENCE, group_num, title_packet,
1672 SIZEOF_VLA(title_packet));
1676 } 1673 }
1677 1674
1678 return sent; 1675 return sent;
@@ -2528,9 +2525,9 @@ uint32_t count_chatlist(Group_Chats *g_c)
2528 uint32_t ret = 0; 2525 uint32_t ret = 0;
2529 uint32_t i; 2526 uint32_t i;
2530 2527
2531 for (i = 0; i < g_c->num_chats; i++) { 2528 for (i = 0; i < g_c->num_chats; ++i) {
2532 if (g_c->chats[i].status != GROUPCHAT_STATUS_NONE) { 2529 if (g_c->chats[i].status != GROUPCHAT_STATUS_NONE) {
2533 ret++; 2530 ++ret;
2534 } 2531 }
2535 } 2532 }
2536 2533
@@ -2561,7 +2558,7 @@ uint32_t copy_chatlist(Group_Chats *g_c, uint32_t *out_list, uint32_t list_size)
2561 2558
2562 if (g_c->chats[i].status > GROUPCHAT_STATUS_NONE) { 2559 if (g_c->chats[i].status > GROUPCHAT_STATUS_NONE) {
2563 out_list[ret] = i; 2560 out_list[ret] = i;
2564 ret++; 2561 ++ret;
2565 } 2562 }
2566 } 2563 }
2567 2564