/work/toxcore/tox_dispatch.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* SPDX-License-Identifier: GPL-3.0-or-later |
2 | | * Copyright © 2022-2026 The TokTok team. |
3 | | */ |
4 | | |
5 | | #include "tox_dispatch.h" |
6 | | |
7 | | #include <stdint.h> |
8 | | #include <stdlib.h> |
9 | | |
10 | | #include "attributes.h" |
11 | | #include "ccompat.h" |
12 | | #include "events/events_alloc.h" // IWYU pragma: keep |
13 | | #include "tox_event.h" |
14 | | #include "tox_events.h" |
15 | | |
16 | | struct Tox_Dispatch { |
17 | | tox_events_conference_connected_cb *_Nullable conference_connected_callback; |
18 | | tox_events_conference_invite_cb *_Nullable conference_invite_callback; |
19 | | tox_events_conference_message_cb *_Nullable conference_message_callback; |
20 | | tox_events_conference_peer_list_changed_cb *_Nullable conference_peer_list_changed_callback; |
21 | | tox_events_conference_peer_name_cb *_Nullable conference_peer_name_callback; |
22 | | tox_events_conference_title_cb *_Nullable conference_title_callback; |
23 | | tox_events_file_chunk_request_cb *_Nullable file_chunk_request_callback; |
24 | | tox_events_file_recv_cb *_Nullable file_recv_callback; |
25 | | tox_events_file_recv_chunk_cb *_Nullable file_recv_chunk_callback; |
26 | | tox_events_file_recv_control_cb *_Nullable file_recv_control_callback; |
27 | | tox_events_friend_connection_status_cb *_Nullable friend_connection_status_callback; |
28 | | tox_events_friend_lossless_packet_cb *_Nullable friend_lossless_packet_callback; |
29 | | tox_events_friend_lossy_packet_cb *_Nullable friend_lossy_packet_callback; |
30 | | tox_events_friend_message_cb *_Nullable friend_message_callback; |
31 | | tox_events_friend_name_cb *_Nullable friend_name_callback; |
32 | | tox_events_friend_read_receipt_cb *_Nullable friend_read_receipt_callback; |
33 | | tox_events_friend_request_cb *_Nullable friend_request_callback; |
34 | | tox_events_friend_status_cb *_Nullable friend_status_callback; |
35 | | tox_events_friend_status_message_cb *_Nullable friend_status_message_callback; |
36 | | tox_events_friend_typing_cb *_Nullable friend_typing_callback; |
37 | | tox_events_self_connection_status_cb *_Nullable self_connection_status_callback; |
38 | | tox_events_group_peer_name_cb *_Nullable group_peer_name_callback; |
39 | | tox_events_group_peer_status_cb *_Nullable group_peer_status_callback; |
40 | | tox_events_group_topic_cb *_Nullable group_topic_callback; |
41 | | tox_events_group_privacy_state_cb *_Nullable group_privacy_state_callback; |
42 | | tox_events_group_voice_state_cb *_Nullable group_voice_state_callback; |
43 | | tox_events_group_topic_lock_cb *_Nullable group_topic_lock_callback; |
44 | | tox_events_group_peer_limit_cb *_Nullable group_peer_limit_callback; |
45 | | tox_events_group_password_cb *_Nullable group_password_callback; |
46 | | tox_events_group_message_cb *_Nullable group_message_callback; |
47 | | tox_events_group_private_message_cb *_Nullable group_private_message_callback; |
48 | | tox_events_group_custom_packet_cb *_Nullable group_custom_packet_callback; |
49 | | tox_events_group_custom_private_packet_cb *_Nullable group_custom_private_packet_callback; |
50 | | tox_events_group_invite_cb *_Nullable group_invite_callback; |
51 | | tox_events_group_peer_join_cb *_Nullable group_peer_join_callback; |
52 | | tox_events_group_peer_exit_cb *_Nullable group_peer_exit_callback; |
53 | | tox_events_group_self_join_cb *_Nullable group_self_join_callback; |
54 | | tox_events_group_join_fail_cb *_Nullable group_join_fail_callback; |
55 | | tox_events_group_moderation_cb *_Nullable group_moderation_callback; |
56 | | tox_events_dht_nodes_response_cb *_Nullable dht_nodes_response_callback; |
57 | | }; |
58 | | |
59 | | Tox_Dispatch *_Nullable tox_dispatch_new(Tox_Err_Dispatch_New *_Nullable error) |
60 | 1.06k | { |
61 | 1.06k | Tox_Dispatch *dispatch = (Tox_Dispatch *)calloc(1, sizeof(Tox_Dispatch)); |
62 | | |
63 | 1.06k | if (dispatch == nullptr) { |
64 | 0 | if (error != nullptr) { |
65 | 0 | *error = TOX_ERR_DISPATCH_NEW_MALLOC; |
66 | 0 | } |
67 | |
|
68 | 0 | return nullptr; |
69 | 0 | } |
70 | | |
71 | 1.06k | *dispatch = (Tox_Dispatch) { |
72 | 1.06k | nullptr |
73 | 1.06k | }; |
74 | | |
75 | 1.06k | if (error != nullptr) { |
76 | 1 | *error = TOX_ERR_DISPATCH_NEW_OK; |
77 | 1 | } |
78 | | |
79 | 1.06k | return dispatch; |
80 | 1.06k | } |
81 | | |
82 | | void tox_dispatch_free(Tox_Dispatch *_Nullable dispatch) |
83 | 1.06k | { |
84 | 1.06k | free(dispatch); |
85 | 1.06k | } |
86 | | |
87 | | void tox_events_callback_conference_connected( |
88 | | Tox_Dispatch *_Nonnull dispatch, tox_events_conference_connected_cb *_Nullable callback) |
89 | 781 | { |
90 | 781 | dispatch->conference_connected_callback = callback; |
91 | 781 | } |
92 | | void tox_events_callback_conference_invite( |
93 | | Tox_Dispatch *_Nonnull dispatch, tox_events_conference_invite_cb *_Nullable callback) |
94 | 756 | { |
95 | 756 | dispatch->conference_invite_callback = callback; |
96 | 756 | } |
97 | | void tox_events_callback_conference_message( |
98 | | Tox_Dispatch *_Nonnull dispatch, tox_events_conference_message_cb *_Nullable callback) |
99 | 743 | { |
100 | 743 | dispatch->conference_message_callback = callback; |
101 | 743 | } |
102 | | void tox_events_callback_conference_peer_list_changed( |
103 | | Tox_Dispatch *_Nonnull dispatch, tox_events_conference_peer_list_changed_cb *_Nullable callback) |
104 | 749 | { |
105 | 749 | dispatch->conference_peer_list_changed_callback = callback; |
106 | 749 | } |
107 | | void tox_events_callback_conference_peer_name( |
108 | | Tox_Dispatch *_Nonnull dispatch, tox_events_conference_peer_name_cb *_Nullable callback) |
109 | 725 | { |
110 | 725 | dispatch->conference_peer_name_callback = callback; |
111 | 725 | } |
112 | | void tox_events_callback_conference_title( |
113 | | Tox_Dispatch *_Nonnull dispatch, tox_events_conference_title_cb *_Nullable callback) |
114 | 725 | { |
115 | 725 | dispatch->conference_title_callback = callback; |
116 | 725 | } |
117 | | void tox_events_callback_file_chunk_request( |
118 | | Tox_Dispatch *_Nonnull dispatch, tox_events_file_chunk_request_cb *_Nullable callback) |
119 | 728 | { |
120 | 728 | dispatch->file_chunk_request_callback = callback; |
121 | 728 | } |
122 | | void tox_events_callback_file_recv( |
123 | | Tox_Dispatch *_Nonnull dispatch, tox_events_file_recv_cb *_Nullable callback) |
124 | 729 | { |
125 | 729 | dispatch->file_recv_callback = callback; |
126 | 729 | } |
127 | | void tox_events_callback_file_recv_chunk( |
128 | | Tox_Dispatch *_Nonnull dispatch, tox_events_file_recv_chunk_cb *_Nullable callback) |
129 | 728 | { |
130 | 728 | dispatch->file_recv_chunk_callback = callback; |
131 | 728 | } |
132 | | void tox_events_callback_file_recv_control( |
133 | | Tox_Dispatch *_Nonnull dispatch, tox_events_file_recv_control_cb *_Nullable callback) |
134 | 727 | { |
135 | 727 | dispatch->file_recv_control_callback = callback; |
136 | 727 | } |
137 | | void tox_events_callback_friend_connection_status( |
138 | | Tox_Dispatch *_Nonnull dispatch, tox_events_friend_connection_status_cb *_Nullable callback) |
139 | 727 | { |
140 | 727 | dispatch->friend_connection_status_callback = callback; |
141 | 727 | } |
142 | | void tox_events_callback_friend_lossless_packet( |
143 | | Tox_Dispatch *_Nonnull dispatch, tox_events_friend_lossless_packet_cb *_Nullable callback) |
144 | 725 | { |
145 | 725 | dispatch->friend_lossless_packet_callback = callback; |
146 | 725 | } |
147 | | void tox_events_callback_friend_lossy_packet( |
148 | | Tox_Dispatch *_Nonnull dispatch, tox_events_friend_lossy_packet_cb *_Nullable callback) |
149 | 725 | { |
150 | 725 | dispatch->friend_lossy_packet_callback = callback; |
151 | 725 | } |
152 | | void tox_events_callback_friend_message( |
153 | | Tox_Dispatch *_Nonnull dispatch, tox_events_friend_message_cb *_Nullable callback) |
154 | 728 | { |
155 | 728 | dispatch->friend_message_callback = callback; |
156 | 728 | } |
157 | | void tox_events_callback_friend_name( |
158 | | Tox_Dispatch *_Nonnull dispatch, tox_events_friend_name_cb *_Nullable callback) |
159 | 725 | { |
160 | 725 | dispatch->friend_name_callback = callback; |
161 | 725 | } |
162 | | void tox_events_callback_friend_read_receipt( |
163 | | Tox_Dispatch *_Nonnull dispatch, tox_events_friend_read_receipt_cb *_Nullable callback) |
164 | 726 | { |
165 | 726 | dispatch->friend_read_receipt_callback = callback; |
166 | 726 | } |
167 | | void tox_events_callback_friend_request( |
168 | | Tox_Dispatch *_Nonnull dispatch, tox_events_friend_request_cb *_Nullable callback) |
169 | 860 | { |
170 | 860 | dispatch->friend_request_callback = callback; |
171 | 860 | } |
172 | | void tox_events_callback_friend_status( |
173 | | Tox_Dispatch *_Nonnull dispatch, tox_events_friend_status_cb *_Nullable callback) |
174 | 726 | { |
175 | 726 | dispatch->friend_status_callback = callback; |
176 | 726 | } |
177 | | void tox_events_callback_friend_status_message( |
178 | | Tox_Dispatch *_Nonnull dispatch, tox_events_friend_status_message_cb *_Nullable callback) |
179 | 725 | { |
180 | 725 | dispatch->friend_status_message_callback = callback; |
181 | 725 | } |
182 | | void tox_events_callback_friend_typing( |
183 | | Tox_Dispatch *_Nonnull dispatch, tox_events_friend_typing_cb *_Nullable callback) |
184 | 725 | { |
185 | 725 | dispatch->friend_typing_callback = callback; |
186 | 725 | } |
187 | | void tox_events_callback_self_connection_status( |
188 | | Tox_Dispatch *_Nonnull dispatch, tox_events_self_connection_status_cb *_Nullable callback) |
189 | 726 | { |
190 | 726 | dispatch->self_connection_status_callback = callback; |
191 | 726 | } |
192 | | void tox_events_callback_group_peer_name( |
193 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_peer_name_cb *_Nullable callback) |
194 | 696 | { |
195 | 696 | dispatch->group_peer_name_callback = callback; |
196 | 696 | } |
197 | | void tox_events_callback_group_peer_status( |
198 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_peer_status_cb *_Nullable callback) |
199 | 696 | { |
200 | 696 | dispatch->group_peer_status_callback = callback; |
201 | 696 | } |
202 | | void tox_events_callback_group_topic( |
203 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_topic_cb *_Nullable callback) |
204 | 703 | { |
205 | 703 | dispatch->group_topic_callback = callback; |
206 | 703 | } |
207 | | void tox_events_callback_group_privacy_state( |
208 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_privacy_state_cb *_Nullable callback) |
209 | 699 | { |
210 | 699 | dispatch->group_privacy_state_callback = callback; |
211 | 699 | } |
212 | | void tox_events_callback_group_voice_state( |
213 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_voice_state_cb *_Nullable callback) |
214 | 704 | { |
215 | 704 | dispatch->group_voice_state_callback = callback; |
216 | 704 | } |
217 | | void tox_events_callback_group_topic_lock( |
218 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_topic_lock_cb *_Nullable callback) |
219 | 702 | { |
220 | 702 | dispatch->group_topic_lock_callback = callback; |
221 | 702 | } |
222 | | void tox_events_callback_group_peer_limit( |
223 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_peer_limit_cb *_Nullable callback) |
224 | 699 | { |
225 | 699 | dispatch->group_peer_limit_callback = callback; |
226 | 699 | } |
227 | | void tox_events_callback_group_password( |
228 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_password_cb *_Nullable callback) |
229 | 699 | { |
230 | 699 | dispatch->group_password_callback = callback; |
231 | 699 | } |
232 | | void tox_events_callback_group_message( |
233 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_message_cb *_Nullable callback) |
234 | 698 | { |
235 | 698 | dispatch->group_message_callback = callback; |
236 | 698 | } |
237 | | void tox_events_callback_group_private_message( |
238 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_private_message_cb *_Nullable callback) |
239 | 697 | { |
240 | 697 | dispatch->group_private_message_callback = callback; |
241 | 697 | } |
242 | | void tox_events_callback_group_custom_packet( |
243 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_custom_packet_cb *_Nullable callback) |
244 | 696 | { |
245 | 696 | dispatch->group_custom_packet_callback = callback; |
246 | 696 | } |
247 | | void tox_events_callback_group_custom_private_packet( |
248 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_custom_private_packet_cb *_Nullable callback) |
249 | 696 | { |
250 | 696 | dispatch->group_custom_private_packet_callback = callback; |
251 | 696 | } |
252 | | void tox_events_callback_group_invite( |
253 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_invite_cb *_Nullable callback) |
254 | 698 | { |
255 | 698 | dispatch->group_invite_callback = callback; |
256 | 698 | } |
257 | | void tox_events_callback_group_peer_join( |
258 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_peer_join_cb *_Nullable callback) |
259 | 720 | { |
260 | 720 | dispatch->group_peer_join_callback = callback; |
261 | 720 | } |
262 | | void tox_events_callback_group_peer_exit( |
263 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_peer_exit_cb *_Nullable callback) |
264 | 696 | { |
265 | 696 | dispatch->group_peer_exit_callback = callback; |
266 | 696 | } |
267 | | void tox_events_callback_group_self_join( |
268 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_self_join_cb *_Nullable callback) |
269 | 713 | { |
270 | 713 | dispatch->group_self_join_callback = callback; |
271 | 713 | } |
272 | | void tox_events_callback_group_join_fail( |
273 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_join_fail_cb *_Nullable callback) |
274 | 698 | { |
275 | 698 | dispatch->group_join_fail_callback = callback; |
276 | 698 | } |
277 | | void tox_events_callback_group_moderation( |
278 | | Tox_Dispatch *_Nonnull dispatch, tox_events_group_moderation_cb *_Nullable callback) |
279 | 703 | { |
280 | 703 | dispatch->group_moderation_callback = callback; |
281 | 703 | } |
282 | | void tox_events_callback_dht_nodes_response( |
283 | | Tox_Dispatch *_Nonnull dispatch, tox_events_dht_nodes_response_cb *_Nullable callback) |
284 | 30 | { |
285 | 30 | dispatch->dht_nodes_response_callback = callback; |
286 | 30 | } |
287 | | |
288 | | static void tox_dispatch_invoke_event(const Tox_Dispatch *_Nonnull dispatch, const Tox_Event *_Nonnull event, void *_Nullable user_data) |
289 | 356k | { |
290 | 356k | switch (event->type) { |
291 | 50 | case TOX_EVENT_CONFERENCE_CONNECTED: { |
292 | 50 | if (dispatch->conference_connected_callback != nullptr) { |
293 | 45 | dispatch->conference_connected_callback(event->data.conference_connected, user_data); |
294 | 45 | } |
295 | | |
296 | 50 | break; |
297 | 0 | } |
298 | | |
299 | 40 | case TOX_EVENT_CONFERENCE_INVITE: { |
300 | 40 | if (dispatch->conference_invite_callback != nullptr) { |
301 | 40 | dispatch->conference_invite_callback(event->data.conference_invite, user_data); |
302 | 40 | } |
303 | | |
304 | 40 | break; |
305 | 0 | } |
306 | | |
307 | 29 | case TOX_EVENT_CONFERENCE_MESSAGE: { |
308 | 29 | if (dispatch->conference_message_callback != nullptr) { |
309 | 28 | dispatch->conference_message_callback(event->data.conference_message, user_data); |
310 | 28 | } |
311 | | |
312 | 29 | break; |
313 | 0 | } |
314 | | |
315 | 401 | case TOX_EVENT_CONFERENCE_PEER_LIST_CHANGED: { |
316 | 401 | if (dispatch->conference_peer_list_changed_callback != nullptr) { |
317 | 346 | dispatch->conference_peer_list_changed_callback(event->data.conference_peer_list_changed, user_data); |
318 | 346 | } |
319 | | |
320 | 401 | break; |
321 | 0 | } |
322 | | |
323 | 13 | case TOX_EVENT_CONFERENCE_PEER_NAME: { |
324 | 13 | if (dispatch->conference_peer_name_callback != nullptr) { |
325 | 10 | dispatch->conference_peer_name_callback(event->data.conference_peer_name, user_data); |
326 | 10 | } |
327 | | |
328 | 13 | break; |
329 | 0 | } |
330 | | |
331 | 34 | case TOX_EVENT_CONFERENCE_TITLE: { |
332 | 34 | if (dispatch->conference_title_callback != nullptr) { |
333 | 34 | dispatch->conference_title_callback(event->data.conference_title, user_data); |
334 | 34 | } |
335 | | |
336 | 34 | break; |
337 | 0 | } |
338 | | |
339 | 1.20k | case TOX_EVENT_FILE_CHUNK_REQUEST: { |
340 | 1.20k | if (dispatch->file_chunk_request_callback != nullptr) { |
341 | 1.20k | dispatch->file_chunk_request_callback(event->data.file_chunk_request, user_data); |
342 | 1.20k | } |
343 | | |
344 | 1.20k | break; |
345 | 0 | } |
346 | | |
347 | 1.16k | case TOX_EVENT_FILE_RECV_CHUNK: { |
348 | 1.16k | if (dispatch->file_recv_chunk_callback != nullptr) { |
349 | 1.16k | dispatch->file_recv_chunk_callback(event->data.file_recv_chunk, user_data); |
350 | 1.16k | } |
351 | | |
352 | 1.16k | break; |
353 | 0 | } |
354 | | |
355 | 17 | case TOX_EVENT_FILE_RECV_CONTROL: { |
356 | 17 | if (dispatch->file_recv_control_callback != nullptr) { |
357 | 15 | dispatch->file_recv_control_callback(event->data.file_recv_control, user_data); |
358 | 15 | } |
359 | | |
360 | 17 | break; |
361 | 0 | } |
362 | | |
363 | 23 | case TOX_EVENT_FILE_RECV: { |
364 | 23 | if (dispatch->file_recv_callback != nullptr) { |
365 | 23 | dispatch->file_recv_callback(event->data.file_recv, user_data); |
366 | 23 | } |
367 | | |
368 | 23 | break; |
369 | 0 | } |
370 | | |
371 | 468 | case TOX_EVENT_FRIEND_CONNECTION_STATUS: { |
372 | 468 | if (dispatch->friend_connection_status_callback != nullptr) { |
373 | 23 | dispatch->friend_connection_status_callback(event->data.friend_connection_status, user_data); |
374 | 23 | } |
375 | | |
376 | 468 | break; |
377 | 0 | } |
378 | | |
379 | 11 | case TOX_EVENT_FRIEND_LOSSLESS_PACKET: { |
380 | 11 | if (dispatch->friend_lossless_packet_callback != nullptr) { |
381 | 10 | dispatch->friend_lossless_packet_callback(event->data.friend_lossless_packet, user_data); |
382 | 10 | } |
383 | | |
384 | 11 | break; |
385 | 0 | } |
386 | | |
387 | 14 | case TOX_EVENT_FRIEND_LOSSY_PACKET: { |
388 | 14 | if (dispatch->friend_lossy_packet_callback != nullptr) { |
389 | 13 | dispatch->friend_lossy_packet_callback(event->data.friend_lossy_packet, user_data); |
390 | 13 | } |
391 | | |
392 | 14 | break; |
393 | 0 | } |
394 | | |
395 | 82.7k | case TOX_EVENT_FRIEND_MESSAGE: { |
396 | 82.7k | if (dispatch->friend_message_callback != nullptr) { |
397 | 80.0k | dispatch->friend_message_callback(event->data.friend_message, user_data); |
398 | 80.0k | } |
399 | | |
400 | 82.7k | break; |
401 | 0 | } |
402 | | |
403 | 445 | case TOX_EVENT_FRIEND_NAME: { |
404 | 445 | if (dispatch->friend_name_callback != nullptr) { |
405 | 12 | dispatch->friend_name_callback(event->data.friend_name, user_data); |
406 | 12 | } |
407 | | |
408 | 445 | break; |
409 | 0 | } |
410 | | |
411 | 81.7k | case TOX_EVENT_FRIEND_READ_RECEIPT: { |
412 | 81.7k | if (dispatch->friend_read_receipt_callback != nullptr) { |
413 | 19 | dispatch->friend_read_receipt_callback(event->data.friend_read_receipt, user_data); |
414 | 19 | } |
415 | | |
416 | 81.7k | break; |
417 | 0 | } |
418 | | |
419 | 147 | case TOX_EVENT_FRIEND_REQUEST: { |
420 | 147 | if (dispatch->friend_request_callback != nullptr) { |
421 | 146 | dispatch->friend_request_callback(event->data.friend_request, user_data); |
422 | 146 | } |
423 | | |
424 | 147 | break; |
425 | 0 | } |
426 | | |
427 | 444 | case TOX_EVENT_FRIEND_STATUS: { |
428 | 444 | if (dispatch->friend_status_callback != nullptr) { |
429 | 14 | dispatch->friend_status_callback(event->data.friend_status, user_data); |
430 | 14 | } |
431 | | |
432 | 444 | break; |
433 | 0 | } |
434 | | |
435 | 442 | case TOX_EVENT_FRIEND_STATUS_MESSAGE: { |
436 | 442 | if (dispatch->friend_status_message_callback != nullptr) { |
437 | 10 | dispatch->friend_status_message_callback(event->data.friend_status_message, user_data); |
438 | 10 | } |
439 | | |
440 | 442 | break; |
441 | 0 | } |
442 | | |
443 | 448 | case TOX_EVENT_FRIEND_TYPING: { |
444 | 448 | if (dispatch->friend_typing_callback != nullptr) { |
445 | 15 | dispatch->friend_typing_callback(event->data.friend_typing, user_data); |
446 | 15 | } |
447 | | |
448 | 448 | break; |
449 | 0 | } |
450 | | |
451 | 449 | case TOX_EVENT_SELF_CONNECTION_STATUS: { |
452 | 449 | if (dispatch->self_connection_status_callback != nullptr) { |
453 | 114 | dispatch->self_connection_status_callback(event->data.self_connection_status, user_data); |
454 | 114 | } |
455 | | |
456 | 449 | break; |
457 | 0 | } |
458 | | |
459 | 12 | case TOX_EVENT_GROUP_PEER_NAME: { |
460 | 12 | if (dispatch->group_peer_name_callback != nullptr) { |
461 | 11 | dispatch->group_peer_name_callback(event->data.group_peer_name, user_data); |
462 | 11 | } |
463 | | |
464 | 12 | break; |
465 | 0 | } |
466 | | |
467 | 12 | case TOX_EVENT_GROUP_PEER_STATUS: { |
468 | 12 | if (dispatch->group_peer_status_callback != nullptr) { |
469 | 11 | dispatch->group_peer_status_callback(event->data.group_peer_status, user_data); |
470 | 11 | } |
471 | | |
472 | 12 | break; |
473 | 0 | } |
474 | | |
475 | 43 | case TOX_EVENT_GROUP_TOPIC: { |
476 | 43 | if (dispatch->group_topic_callback != nullptr) { |
477 | 42 | dispatch->group_topic_callback(event->data.group_topic, user_data); |
478 | 42 | } |
479 | | |
480 | 43 | break; |
481 | 0 | } |
482 | | |
483 | 20 | case TOX_EVENT_GROUP_PRIVACY_STATE: { |
484 | 20 | if (dispatch->group_privacy_state_callback != nullptr) { |
485 | 14 | dispatch->group_privacy_state_callback(event->data.group_privacy_state, user_data); |
486 | 14 | } |
487 | | |
488 | 20 | break; |
489 | 0 | } |
490 | | |
491 | 35 | case TOX_EVENT_GROUP_VOICE_STATE: { |
492 | 35 | if (dispatch->group_voice_state_callback != nullptr) { |
493 | 35 | dispatch->group_voice_state_callback(event->data.group_voice_state, user_data); |
494 | 35 | } |
495 | | |
496 | 35 | break; |
497 | 0 | } |
498 | | |
499 | 23 | case TOX_EVENT_GROUP_TOPIC_LOCK: { |
500 | 23 | if (dispatch->group_topic_lock_callback != nullptr) { |
501 | 18 | dispatch->group_topic_lock_callback(event->data.group_topic_lock, user_data); |
502 | 18 | } |
503 | | |
504 | 23 | break; |
505 | 0 | } |
506 | | |
507 | 23 | case TOX_EVENT_GROUP_PEER_LIMIT: { |
508 | 23 | if (dispatch->group_peer_limit_callback != nullptr) { |
509 | 19 | dispatch->group_peer_limit_callback(event->data.group_peer_limit, user_data); |
510 | 19 | } |
511 | | |
512 | 23 | break; |
513 | 0 | } |
514 | | |
515 | 25 | case TOX_EVENT_GROUP_PASSWORD: { |
516 | 25 | if (dispatch->group_password_callback != nullptr) { |
517 | 22 | dispatch->group_password_callback(event->data.group_password, user_data); |
518 | 22 | } |
519 | | |
520 | 25 | break; |
521 | 0 | } |
522 | | |
523 | 125 | case TOX_EVENT_GROUP_MESSAGE: { |
524 | 125 | if (dispatch->group_message_callback != nullptr) { |
525 | 113 | dispatch->group_message_callback(event->data.group_message, user_data); |
526 | 113 | } |
527 | | |
528 | 125 | break; |
529 | 0 | } |
530 | | |
531 | 21 | case TOX_EVENT_GROUP_PRIVATE_MESSAGE: { |
532 | 21 | if (dispatch->group_private_message_callback != nullptr) { |
533 | 21 | dispatch->group_private_message_callback(event->data.group_private_message, user_data); |
534 | 21 | } |
535 | | |
536 | 21 | break; |
537 | 0 | } |
538 | | |
539 | 12 | case TOX_EVENT_GROUP_CUSTOM_PACKET: { |
540 | 12 | if (dispatch->group_custom_packet_callback != nullptr) { |
541 | 12 | dispatch->group_custom_packet_callback(event->data.group_custom_packet, user_data); |
542 | 12 | } |
543 | | |
544 | 12 | break; |
545 | 0 | } |
546 | | |
547 | 14 | case TOX_EVENT_GROUP_CUSTOM_PRIVATE_PACKET: { |
548 | 14 | if (dispatch->group_custom_private_packet_callback != nullptr) { |
549 | 14 | dispatch->group_custom_private_packet_callback(event->data.group_custom_private_packet, user_data); |
550 | 14 | } |
551 | | |
552 | 14 | break; |
553 | 0 | } |
554 | | |
555 | 14 | case TOX_EVENT_GROUP_INVITE: { |
556 | 14 | if (dispatch->group_invite_callback != nullptr) { |
557 | 14 | dispatch->group_invite_callback(event->data.group_invite, user_data); |
558 | 14 | } |
559 | | |
560 | 14 | break; |
561 | 0 | } |
562 | | |
563 | 96 | case TOX_EVENT_GROUP_PEER_JOIN: { |
564 | 96 | if (dispatch->group_peer_join_callback != nullptr) { |
565 | 89 | dispatch->group_peer_join_callback(event->data.group_peer_join, user_data); |
566 | 89 | } |
567 | | |
568 | 96 | break; |
569 | 0 | } |
570 | | |
571 | 25 | case TOX_EVENT_GROUP_PEER_EXIT: { |
572 | 25 | if (dispatch->group_peer_exit_callback != nullptr) { |
573 | 16 | dispatch->group_peer_exit_callback(event->data.group_peer_exit, user_data); |
574 | 16 | } |
575 | | |
576 | 25 | break; |
577 | 0 | } |
578 | | |
579 | 41 | case TOX_EVENT_GROUP_SELF_JOIN: { |
580 | 41 | if (dispatch->group_self_join_callback != nullptr) { |
581 | 32 | dispatch->group_self_join_callback(event->data.group_self_join, user_data); |
582 | 32 | } |
583 | | |
584 | 41 | break; |
585 | 0 | } |
586 | | |
587 | 21 | case TOX_EVENT_GROUP_JOIN_FAIL: { |
588 | 21 | if (dispatch->group_join_fail_callback != nullptr) { |
589 | 21 | dispatch->group_join_fail_callback(event->data.group_join_fail, user_data); |
590 | 21 | } |
591 | | |
592 | 21 | break; |
593 | 0 | } |
594 | | |
595 | 86 | case TOX_EVENT_GROUP_MODERATION: { |
596 | 86 | if (dispatch->group_moderation_callback != nullptr) { |
597 | 65 | dispatch->group_moderation_callback(event->data.group_moderation, user_data); |
598 | 65 | } |
599 | | |
600 | 86 | break; |
601 | 0 | } |
602 | | |
603 | 185k | case TOX_EVENT_DHT_NODES_RESPONSE: { |
604 | 185k | if (dispatch->dht_nodes_response_callback != nullptr) { |
605 | 101k | dispatch->dht_nodes_response_callback(event->data.dht_nodes_response, user_data); |
606 | 101k | } |
607 | | |
608 | 185k | break; |
609 | 0 | } |
610 | | |
611 | 0 | case TOX_EVENT_INVALID: { |
612 | 0 | break; |
613 | 0 | } |
614 | 356k | } |
615 | 356k | } |
616 | | |
617 | | void tox_dispatch_invoke(const Tox_Dispatch *_Nonnull dispatch, const Tox_Events *_Nonnull events, |
618 | | void *_Nullable user_data) |
619 | 5.81k | { |
620 | 5.81k | const uint32_t size = tox_events_get_size(events); |
621 | 362k | for (uint32_t i = 0; i < size; ++i) { |
622 | 356k | const Tox_Event *event = &events->events[i]; |
623 | 356k | tox_dispatch_invoke_event(dispatch, event, user_data); |
624 | 356k | } |
625 | 5.81k | } |