Coverage Report

Created: 2024-01-26 01:52

/work/toxcore/events/group_peer_join.c
Line
Count
Source (jump to first uncovered line)
1
/* SPDX-License-Identifier: GPL-3.0-or-later
2
 * Copyright © 2023-2024 The TokTok team.
3
 */
4
5
#include "events_alloc.h"
6
7
#include <assert.h>
8
9
#include "../bin_pack.h"
10
#include "../bin_unpack.h"
11
#include "../ccompat.h"
12
#include "../mem.h"
13
#include "../tox.h"
14
#include "../tox_events.h"
15
16
17
/*****************************************************
18
 *
19
 * :: struct and accessors
20
 *
21
 *****************************************************/
22
23
24
struct Tox_Event_Group_Peer_Join {
25
    uint32_t group_number;
26
    uint32_t peer_id;
27
};
28
29
non_null()
30
static void tox_event_group_peer_join_set_group_number(Tox_Event_Group_Peer_Join *group_peer_join,
31
        uint32_t group_number)
32
242
{
33
242
    assert(group_peer_join != nullptr);
34
242
    group_peer_join->group_number = group_number;
35
242
}
36
uint32_t tox_event_group_peer_join_get_group_number(const Tox_Event_Group_Peer_Join *group_peer_join)
37
24
{
38
24
    assert(group_peer_join != nullptr);
39
24
    return group_peer_join->group_number;
40
24
}
41
42
non_null()
43
static void tox_event_group_peer_join_set_peer_id(Tox_Event_Group_Peer_Join *group_peer_join,
44
        uint32_t peer_id)
45
242
{
46
242
    assert(group_peer_join != nullptr);
47
242
    group_peer_join->peer_id = peer_id;
48
242
}
49
uint32_t tox_event_group_peer_join_get_peer_id(const Tox_Event_Group_Peer_Join *group_peer_join)
50
48
{
51
48
    assert(group_peer_join != nullptr);
52
48
    return group_peer_join->peer_id;
53
48
}
54
55
non_null()
56
static void tox_event_group_peer_join_construct(Tox_Event_Group_Peer_Join *group_peer_join)
57
263
{
58
263
    *group_peer_join = (Tox_Event_Group_Peer_Join) {
59
263
        0
60
263
    };
61
263
}
62
non_null()
63
static void tox_event_group_peer_join_destruct(Tox_Event_Group_Peer_Join *group_peer_join, const Memory *mem)
64
262
{
65
262
    return;
66
262
}
67
68
bool tox_event_group_peer_join_pack(
69
    const Tox_Event_Group_Peer_Join *event, Bin_Pack *bp)
70
20
{
71
20
    return bin_pack_array(bp, 2)
72
20
           && bin_pack_u32(bp, event->group_number)
73
20
           && bin_pack_u32(bp, event->peer_id);
74
20
}
75
76
non_null()
77
static bool tox_event_group_peer_join_unpack_into(
78
    Tox_Event_Group_Peer_Join *event, Bin_Unpack *bu)
79
21
{
80
21
    assert(event != nullptr);
81
21
    if (!bin_unpack_array_fixed(bu, 2, nullptr)) {
82
2
        return false;
83
2
    }
84
85
19
    return bin_unpack_u32(bu, &event->group_number)
86
19
           && bin_unpack_u32(bu, &event->peer_id);
87
21
}
88
89
90
/*****************************************************
91
 *
92
 * :: new/free/add/get/size/unpack
93
 *
94
 *****************************************************/
95
96
const Tox_Event_Group_Peer_Join *tox_event_get_group_peer_join(const Tox_Event *event)
97
0
{
98
0
    return event->type == TOX_EVENT_GROUP_PEER_JOIN ? event->data.group_peer_join : nullptr;
99
0
}
100
101
Tox_Event_Group_Peer_Join *tox_event_group_peer_join_new(const Memory *mem)
102
265
{
103
265
    Tox_Event_Group_Peer_Join *const group_peer_join =
104
265
        (Tox_Event_Group_Peer_Join *)mem_alloc(mem, sizeof(Tox_Event_Group_Peer_Join));
105
106
265
    if (group_peer_join == nullptr) {
107
2
        return nullptr;
108
2
    }
109
110
263
    tox_event_group_peer_join_construct(group_peer_join);
111
263
    return group_peer_join;
112
265
}
113
114
void tox_event_group_peer_join_free(Tox_Event_Group_Peer_Join *group_peer_join, const Memory *mem)
115
263
{
116
263
    if (group_peer_join != nullptr) {
117
262
        tox_event_group_peer_join_destruct(group_peer_join, mem);
118
262
    }
119
263
    mem_delete(mem, group_peer_join);
120
263
}
121
122
non_null()
123
static Tox_Event_Group_Peer_Join *tox_events_add_group_peer_join(Tox_Events *events, const Memory *mem)
124
243
{
125
243
    Tox_Event_Group_Peer_Join *const group_peer_join = tox_event_group_peer_join_new(mem);
126
127
243
    if (group_peer_join == nullptr) {
128
1
        return nullptr;
129
1
    }
130
131
242
    Tox_Event event;
132
242
    event.type = TOX_EVENT_GROUP_PEER_JOIN;
133
242
    event.data.group_peer_join = group_peer_join;
134
135
242
    tox_events_add(events, &event);
136
242
    return group_peer_join;
137
243
}
138
139
bool tox_event_group_peer_join_unpack(
140
    Tox_Event_Group_Peer_Join **event, Bin_Unpack *bu, const Memory *mem)
141
22
{
142
22
    assert(event != nullptr);
143
22
    assert(*event == nullptr);
144
22
    *event = tox_event_group_peer_join_new(mem);
145
146
22
    if (*event == nullptr) {
147
1
        return false;
148
1
    }
149
150
21
    return tox_event_group_peer_join_unpack_into(*event, bu);
151
22
}
152
153
non_null()
154
static Tox_Event_Group_Peer_Join *tox_event_group_peer_join_alloc(void *user_data)
155
244
{
156
244
    Tox_Events_State *state = tox_events_alloc(user_data);
157
244
    assert(state != nullptr);
158
159
244
    if (state->events == nullptr) {
160
1
        return nullptr;
161
1
    }
162
163
243
    Tox_Event_Group_Peer_Join *group_peer_join = tox_events_add_group_peer_join(state->events, state->mem);
164
165
243
    if (group_peer_join == nullptr) {
166
1
        state->error = TOX_ERR_EVENTS_ITERATE_MALLOC;
167
1
        return nullptr;
168
1
    }
169
170
242
    return group_peer_join;
171
243
}
172
173
174
/*****************************************************
175
 *
176
 * :: event handler
177
 *
178
 *****************************************************/
179
180
181
void tox_events_handle_group_peer_join(Tox *tox, uint32_t group_number, uint32_t peer_id,
182
        void *user_data)
183
244
{
184
244
    Tox_Event_Group_Peer_Join *group_peer_join = tox_event_group_peer_join_alloc(user_data);
185
186
244
    if (group_peer_join == nullptr) {
187
2
        return;
188
2
    }
189
190
242
    tox_event_group_peer_join_set_group_number(group_peer_join, group_number);
191
242
    tox_event_group_peer_join_set_peer_id(group_peer_join, peer_id);
192
242
}