Coverage Report

Created: 2024-01-26 01:52

/work/toxcore/events/conference_connected.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_Conference_Connected {
25
    uint32_t conference_number;
26
};
27
28
non_null()
29
static void tox_event_conference_connected_set_conference_number(Tox_Event_Conference_Connected *conference_connected,
30
        uint32_t conference_number)
31
29
{
32
29
    assert(conference_connected != nullptr);
33
29
    conference_connected->conference_number = conference_number;
34
29
}
35
uint32_t tox_event_conference_connected_get_conference_number(const Tox_Event_Conference_Connected *conference_connected)
36
0
{
37
0
    assert(conference_connected != nullptr);
38
0
    return conference_connected->conference_number;
39
0
}
40
41
non_null()
42
static void tox_event_conference_connected_construct(Tox_Event_Conference_Connected *conference_connected)
43
33
{
44
33
    *conference_connected = (Tox_Event_Conference_Connected) {
45
33
        0
46
33
    };
47
33
}
48
non_null()
49
static void tox_event_conference_connected_destruct(Tox_Event_Conference_Connected *conference_connected, const Memory *mem)
50
33
{
51
33
    return;
52
33
}
53
54
bool tox_event_conference_connected_pack(
55
    const Tox_Event_Conference_Connected *event, Bin_Pack *bp)
56
8
{
57
8
    return bin_pack_u32(bp, event->conference_number);
58
8
}
59
60
non_null()
61
static bool tox_event_conference_connected_unpack_into(
62
    Tox_Event_Conference_Connected *event, Bin_Unpack *bu)
63
4
{
64
4
    assert(event != nullptr);
65
4
    return bin_unpack_u32(bu, &event->conference_number);
66
4
}
67
68
69
/*****************************************************
70
 *
71
 * :: new/free/add/get/size/unpack
72
 *
73
 *****************************************************/
74
75
const Tox_Event_Conference_Connected *tox_event_get_conference_connected(const Tox_Event *event)
76
0
{
77
0
    return event->type == TOX_EVENT_CONFERENCE_CONNECTED ? event->data.conference_connected : nullptr;
78
0
}
79
80
Tox_Event_Conference_Connected *tox_event_conference_connected_new(const Memory *mem)
81
35
{
82
35
    Tox_Event_Conference_Connected *const conference_connected =
83
35
        (Tox_Event_Conference_Connected *)mem_alloc(mem, sizeof(Tox_Event_Conference_Connected));
84
85
35
    if (conference_connected == nullptr) {
86
2
        return nullptr;
87
2
    }
88
89
33
    tox_event_conference_connected_construct(conference_connected);
90
33
    return conference_connected;
91
35
}
92
93
void tox_event_conference_connected_free(Tox_Event_Conference_Connected *conference_connected, const Memory *mem)
94
34
{
95
34
    if (conference_connected != nullptr) {
96
33
        tox_event_conference_connected_destruct(conference_connected, mem);
97
33
    }
98
34
    mem_delete(mem, conference_connected);
99
34
}
100
101
non_null()
102
static Tox_Event_Conference_Connected *tox_events_add_conference_connected(Tox_Events *events, const Memory *mem)
103
30
{
104
30
    Tox_Event_Conference_Connected *const conference_connected = tox_event_conference_connected_new(mem);
105
106
30
    if (conference_connected == nullptr) {
107
1
        return nullptr;
108
1
    }
109
110
29
    Tox_Event event;
111
29
    event.type = TOX_EVENT_CONFERENCE_CONNECTED;
112
29
    event.data.conference_connected = conference_connected;
113
114
29
    tox_events_add(events, &event);
115
29
    return conference_connected;
116
30
}
117
118
bool tox_event_conference_connected_unpack(
119
    Tox_Event_Conference_Connected **event, Bin_Unpack *bu, const Memory *mem)
120
5
{
121
5
    assert(event != nullptr);
122
5
    assert(*event == nullptr);
123
5
    *event = tox_event_conference_connected_new(mem);
124
125
5
    if (*event == nullptr) {
126
1
        return false;
127
1
    }
128
129
4
    return tox_event_conference_connected_unpack_into(*event, bu);
130
5
}
131
132
non_null()
133
static Tox_Event_Conference_Connected *tox_event_conference_connected_alloc(void *user_data)
134
30
{
135
30
    Tox_Events_State *state = tox_events_alloc(user_data);
136
30
    assert(state != nullptr);
137
138
30
    if (state->events == nullptr) {
139
0
        return nullptr;
140
0
    }
141
142
30
    Tox_Event_Conference_Connected *conference_connected = tox_events_add_conference_connected(state->events, state->mem);
143
144
30
    if (conference_connected == nullptr) {
145
1
        state->error = TOX_ERR_EVENTS_ITERATE_MALLOC;
146
1
        return nullptr;
147
1
    }
148
149
29
    return conference_connected;
150
30
}
151
152
153
/*****************************************************
154
 *
155
 * :: event handler
156
 *
157
 *****************************************************/
158
159
160
void tox_events_handle_conference_connected(Tox *tox, uint32_t conference_number,
161
        void *user_data)
162
30
{
163
30
    Tox_Event_Conference_Connected *conference_connected = tox_event_conference_connected_alloc(user_data);
164
165
30
    if (conference_connected == nullptr) {
166
1
        return;
167
1
    }
168
169
29
    tox_event_conference_connected_set_conference_number(conference_connected, conference_number);
170
29
}