Coverage Report

Created: 2024-01-26 01:52

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