Coverage Report

Created: 2026-06-30 06:14

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/open5gs/lib/sbi/openapi/model/udr_info.c
Line
Count
Source
1
2
#include <stdlib.h>
3
#include <string.h>
4
#include <stdio.h>
5
#include "udr_info.h"
6
7
OpenAPI_udr_info_t *OpenAPI_udr_info_create(
8
    char *group_id,
9
    OpenAPI_list_t *supi_ranges,
10
    OpenAPI_list_t *gpsi_ranges,
11
    OpenAPI_list_t *external_group_identifiers_ranges,
12
    OpenAPI_list_t *supported_data_sets,
13
    OpenAPI_list_t *shared_data_id_ranges,
14
    bool is_any_ue_ind,
15
    int any_ue_ind
16
)
17
3.24k
{
18
3.24k
    OpenAPI_udr_info_t *udr_info_local_var = ogs_malloc(sizeof(OpenAPI_udr_info_t));
19
3.24k
    ogs_assert(udr_info_local_var);
20
21
3.24k
    udr_info_local_var->group_id = group_id;
22
3.24k
    udr_info_local_var->supi_ranges = supi_ranges;
23
3.24k
    udr_info_local_var->gpsi_ranges = gpsi_ranges;
24
3.24k
    udr_info_local_var->external_group_identifiers_ranges = external_group_identifiers_ranges;
25
3.24k
    udr_info_local_var->supported_data_sets = supported_data_sets;
26
3.24k
    udr_info_local_var->shared_data_id_ranges = shared_data_id_ranges;
27
3.24k
    udr_info_local_var->is_any_ue_ind = is_any_ue_ind;
28
3.24k
    udr_info_local_var->any_ue_ind = any_ue_ind;
29
30
3.24k
    return udr_info_local_var;
31
3.24k
}
32
33
void OpenAPI_udr_info_free(OpenAPI_udr_info_t *udr_info)
34
5.47k
{
35
5.47k
    OpenAPI_lnode_t *node = NULL;
36
37
5.47k
    if (NULL == udr_info) {
38
2.22k
        return;
39
2.22k
    }
40
3.24k
    if (udr_info->group_id) {
41
205
        ogs_free(udr_info->group_id);
42
205
        udr_info->group_id = NULL;
43
205
    }
44
3.24k
    if (udr_info->supi_ranges) {
45
153
        OpenAPI_list_for_each(udr_info->supi_ranges, node) {
46
82
            OpenAPI_supi_range_free(node->data);
47
82
        }
48
153
        OpenAPI_list_free(udr_info->supi_ranges);
49
153
        udr_info->supi_ranges = NULL;
50
153
    }
51
3.24k
    if (udr_info->gpsi_ranges) {
52
130
        OpenAPI_list_for_each(udr_info->gpsi_ranges, node) {
53
23
            OpenAPI_identity_range_free(node->data);
54
23
        }
55
130
        OpenAPI_list_free(udr_info->gpsi_ranges);
56
130
        udr_info->gpsi_ranges = NULL;
57
130
    }
58
3.24k
    if (udr_info->external_group_identifiers_ranges) {
59
77
        OpenAPI_list_for_each(udr_info->external_group_identifiers_ranges, node) {
60
10
            OpenAPI_identity_range_free(node->data);
61
10
        }
62
77
        OpenAPI_list_free(udr_info->external_group_identifiers_ranges);
63
77
        udr_info->external_group_identifiers_ranges = NULL;
64
77
    }
65
3.24k
    if (udr_info->supported_data_sets) {
66
0
        OpenAPI_list_free(udr_info->supported_data_sets);
67
0
        udr_info->supported_data_sets = NULL;
68
0
    }
69
3.24k
    if (udr_info->shared_data_id_ranges) {
70
67
        OpenAPI_list_for_each(udr_info->shared_data_id_ranges, node) {
71
0
            OpenAPI_shared_data_id_range_free(node->data);
72
0
        }
73
67
        OpenAPI_list_free(udr_info->shared_data_id_ranges);
74
67
        udr_info->shared_data_id_ranges = NULL;
75
67
    }
76
3.24k
    ogs_free(udr_info);
77
3.24k
}
78
79
cJSON *OpenAPI_udr_info_convertToJSON(OpenAPI_udr_info_t *udr_info)
80
0
{
81
0
    cJSON *item = NULL;
82
0
    OpenAPI_lnode_t *node = NULL;
83
84
0
    if (udr_info == NULL) {
85
0
        ogs_error("OpenAPI_udr_info_convertToJSON() failed [UdrInfo]");
86
0
        return NULL;
87
0
    }
88
89
0
    item = cJSON_CreateObject();
90
0
    if (udr_info->group_id) {
91
0
    if (cJSON_AddStringToObject(item, "groupId", udr_info->group_id) == NULL) {
92
0
        ogs_error("OpenAPI_udr_info_convertToJSON() failed [group_id]");
93
0
        goto end;
94
0
    }
95
0
    }
96
97
0
    if (udr_info->supi_ranges) {
98
0
    cJSON *supi_rangesList = cJSON_AddArrayToObject(item, "supiRanges");
99
0
    if (supi_rangesList == NULL) {
100
0
        ogs_error("OpenAPI_udr_info_convertToJSON() failed [supi_ranges]");
101
0
        goto end;
102
0
    }
103
0
    OpenAPI_list_for_each(udr_info->supi_ranges, node) {
104
0
        cJSON *itemLocal = OpenAPI_supi_range_convertToJSON(node->data);
105
0
        if (itemLocal == NULL) {
106
0
            ogs_error("OpenAPI_udr_info_convertToJSON() failed [supi_ranges]");
107
0
            goto end;
108
0
        }
109
0
        cJSON_AddItemToArray(supi_rangesList, itemLocal);
110
0
    }
111
0
    }
112
113
0
    if (udr_info->gpsi_ranges) {
114
0
    cJSON *gpsi_rangesList = cJSON_AddArrayToObject(item, "gpsiRanges");
115
0
    if (gpsi_rangesList == NULL) {
116
0
        ogs_error("OpenAPI_udr_info_convertToJSON() failed [gpsi_ranges]");
117
0
        goto end;
118
0
    }
119
0
    OpenAPI_list_for_each(udr_info->gpsi_ranges, node) {
120
0
        cJSON *itemLocal = OpenAPI_identity_range_convertToJSON(node->data);
121
0
        if (itemLocal == NULL) {
122
0
            ogs_error("OpenAPI_udr_info_convertToJSON() failed [gpsi_ranges]");
123
0
            goto end;
124
0
        }
125
0
        cJSON_AddItemToArray(gpsi_rangesList, itemLocal);
126
0
    }
127
0
    }
128
129
0
    if (udr_info->external_group_identifiers_ranges) {
130
0
    cJSON *external_group_identifiers_rangesList = cJSON_AddArrayToObject(item, "externalGroupIdentifiersRanges");
131
0
    if (external_group_identifiers_rangesList == NULL) {
132
0
        ogs_error("OpenAPI_udr_info_convertToJSON() failed [external_group_identifiers_ranges]");
133
0
        goto end;
134
0
    }
135
0
    OpenAPI_list_for_each(udr_info->external_group_identifiers_ranges, node) {
136
0
        cJSON *itemLocal = OpenAPI_identity_range_convertToJSON(node->data);
137
0
        if (itemLocal == NULL) {
138
0
            ogs_error("OpenAPI_udr_info_convertToJSON() failed [external_group_identifiers_ranges]");
139
0
            goto end;
140
0
        }
141
0
        cJSON_AddItemToArray(external_group_identifiers_rangesList, itemLocal);
142
0
    }
143
0
    }
144
145
0
    if (udr_info->supported_data_sets != OpenAPI_data_set_id_NULL) {
146
0
    cJSON *supported_data_setsList = cJSON_AddArrayToObject(item, "supportedDataSets");
147
0
    if (supported_data_setsList == NULL) {
148
0
        ogs_error("OpenAPI_udr_info_convertToJSON() failed [supported_data_sets]");
149
0
        goto end;
150
0
    }
151
0
    OpenAPI_list_for_each(udr_info->supported_data_sets, node) {
152
0
        if (cJSON_AddStringToObject(supported_data_setsList, "", OpenAPI_data_set_id_ToString((intptr_t)node->data)) == NULL) {
153
0
            ogs_error("OpenAPI_udr_info_convertToJSON() failed [supported_data_sets]");
154
0
            goto end;
155
0
        }
156
0
    }
157
0
    }
158
159
0
    if (udr_info->shared_data_id_ranges) {
160
0
    cJSON *shared_data_id_rangesList = cJSON_AddArrayToObject(item, "sharedDataIdRanges");
161
0
    if (shared_data_id_rangesList == NULL) {
162
0
        ogs_error("OpenAPI_udr_info_convertToJSON() failed [shared_data_id_ranges]");
163
0
        goto end;
164
0
    }
165
0
    OpenAPI_list_for_each(udr_info->shared_data_id_ranges, node) {
166
0
        cJSON *itemLocal = OpenAPI_shared_data_id_range_convertToJSON(node->data);
167
0
        if (itemLocal == NULL) {
168
0
            ogs_error("OpenAPI_udr_info_convertToJSON() failed [shared_data_id_ranges]");
169
0
            goto end;
170
0
        }
171
0
        cJSON_AddItemToArray(shared_data_id_rangesList, itemLocal);
172
0
    }
173
0
    }
174
175
0
    if (udr_info->is_any_ue_ind) {
176
0
    if (cJSON_AddBoolToObject(item, "anyUeInd", udr_info->any_ue_ind) == NULL) {
177
0
        ogs_error("OpenAPI_udr_info_convertToJSON() failed [any_ue_ind]");
178
0
        goto end;
179
0
    }
180
0
    }
181
182
0
end:
183
0
    return item;
184
0
}
185
186
OpenAPI_udr_info_t *OpenAPI_udr_info_parseFromJSON(cJSON *udr_infoJSON)
187
4.82k
{
188
4.82k
    OpenAPI_udr_info_t *udr_info_local_var = NULL;
189
4.82k
    OpenAPI_lnode_t *node = NULL;
190
4.82k
    cJSON *group_id = NULL;
191
4.82k
    cJSON *supi_ranges = NULL;
192
4.82k
    OpenAPI_list_t *supi_rangesList = NULL;
193
4.82k
    cJSON *gpsi_ranges = NULL;
194
4.82k
    OpenAPI_list_t *gpsi_rangesList = NULL;
195
4.82k
    cJSON *external_group_identifiers_ranges = NULL;
196
4.82k
    OpenAPI_list_t *external_group_identifiers_rangesList = NULL;
197
4.82k
    cJSON *supported_data_sets = NULL;
198
4.82k
    OpenAPI_list_t *supported_data_setsList = NULL;
199
4.82k
    cJSON *shared_data_id_ranges = NULL;
200
4.82k
    OpenAPI_list_t *shared_data_id_rangesList = NULL;
201
4.82k
    cJSON *any_ue_ind = NULL;
202
4.82k
    group_id = cJSON_GetObjectItemCaseSensitive(udr_infoJSON, "groupId");
203
4.82k
    if (group_id) {
204
760
    if (!cJSON_IsString(group_id) && !cJSON_IsNull(group_id)) {
205
343
        ogs_error("OpenAPI_udr_info_parseFromJSON() failed [group_id]");
206
343
        goto end;
207
343
    }
208
760
    }
209
210
4.48k
    supi_ranges = cJSON_GetObjectItemCaseSensitive(udr_infoJSON, "supiRanges");
211
4.48k
    if (supi_ranges) {
212
538
        cJSON *supi_ranges_local = NULL;
213
538
        if (!cJSON_IsArray(supi_ranges)) {
214
145
            ogs_error("OpenAPI_udr_info_parseFromJSON() failed [supi_ranges]");
215
145
            goto end;
216
145
        }
217
218
393
        supi_rangesList = OpenAPI_list_create();
219
220
511
        cJSON_ArrayForEach(supi_ranges_local, supi_ranges) {
221
511
            if (!cJSON_IsObject(supi_ranges_local)) {
222
206
                ogs_error("OpenAPI_udr_info_parseFromJSON() failed [supi_ranges]");
223
206
                goto end;
224
206
            }
225
305
            OpenAPI_supi_range_t *supi_rangesItem = OpenAPI_supi_range_parseFromJSON(supi_ranges_local);
226
305
            if (!supi_rangesItem) {
227
34
                ogs_error("No supi_rangesItem");
228
34
                goto end;
229
34
            }
230
271
            OpenAPI_list_add(supi_rangesList, supi_rangesItem);
231
271
        }
232
393
    }
233
234
4.09k
    gpsi_ranges = cJSON_GetObjectItemCaseSensitive(udr_infoJSON, "gpsiRanges");
235
4.09k
    if (gpsi_ranges) {
236
708
        cJSON *gpsi_ranges_local = NULL;
237
708
        if (!cJSON_IsArray(gpsi_ranges)) {
238
297
            ogs_error("OpenAPI_udr_info_parseFromJSON() failed [gpsi_ranges]");
239
297
            goto end;
240
297
        }
241
242
411
        gpsi_rangesList = OpenAPI_list_create();
243
244
446
        cJSON_ArrayForEach(gpsi_ranges_local, gpsi_ranges) {
245
446
            if (!cJSON_IsObject(gpsi_ranges_local)) {
246
215
                ogs_error("OpenAPI_udr_info_parseFromJSON() failed [gpsi_ranges]");
247
215
                goto end;
248
215
            }
249
231
            OpenAPI_identity_range_t *gpsi_rangesItem = OpenAPI_identity_range_parseFromJSON(gpsi_ranges_local);
250
231
            if (!gpsi_rangesItem) {
251
66
                ogs_error("No gpsi_rangesItem");
252
66
                goto end;
253
66
            }
254
165
            OpenAPI_list_add(gpsi_rangesList, gpsi_rangesItem);
255
165
        }
256
411
    }
257
258
3.51k
    external_group_identifiers_ranges = cJSON_GetObjectItemCaseSensitive(udr_infoJSON, "externalGroupIdentifiersRanges");
259
3.51k
    if (external_group_identifiers_ranges) {
260
206
        cJSON *external_group_identifiers_ranges_local = NULL;
261
206
        if (!cJSON_IsArray(external_group_identifiers_ranges)) {
262
102
            ogs_error("OpenAPI_udr_info_parseFromJSON() failed [external_group_identifiers_ranges]");
263
102
            goto end;
264
102
        }
265
266
104
        external_group_identifiers_rangesList = OpenAPI_list_create();
267
268
104
        cJSON_ArrayForEach(external_group_identifiers_ranges_local, external_group_identifiers_ranges) {
269
38
            if (!cJSON_IsObject(external_group_identifiers_ranges_local)) {
270
27
                ogs_error("OpenAPI_udr_info_parseFromJSON() failed [external_group_identifiers_ranges]");
271
27
                goto end;
272
27
            }
273
11
            OpenAPI_identity_range_t *external_group_identifiers_rangesItem = OpenAPI_identity_range_parseFromJSON(external_group_identifiers_ranges_local);
274
11
            if (!external_group_identifiers_rangesItem) {
275
0
                ogs_error("No external_group_identifiers_rangesItem");
276
0
                goto end;
277
0
            }
278
11
            OpenAPI_list_add(external_group_identifiers_rangesList, external_group_identifiers_rangesItem);
279
11
        }
280
104
    }
281
282
3.38k
    supported_data_sets = cJSON_GetObjectItemCaseSensitive(udr_infoJSON, "supportedDataSets");
283
3.38k
    if (supported_data_sets) {
284
35
        cJSON *supported_data_sets_local = NULL;
285
35
        if (!cJSON_IsArray(supported_data_sets)) {
286
35
            ogs_error("OpenAPI_udr_info_parseFromJSON() failed [supported_data_sets]");
287
35
            goto end;
288
35
        }
289
290
0
        supported_data_setsList = OpenAPI_list_create();
291
292
0
        cJSON_ArrayForEach(supported_data_sets_local, supported_data_sets) {
293
0
            OpenAPI_data_set_id_e localEnum = OpenAPI_data_set_id_NULL;
294
0
            if (!cJSON_IsString(supported_data_sets_local)) {
295
0
                ogs_error("OpenAPI_udr_info_parseFromJSON() failed [supported_data_sets]");
296
0
                goto end;
297
0
            }
298
0
            localEnum = OpenAPI_data_set_id_FromString(supported_data_sets_local->valuestring);
299
0
            if (!localEnum) {
300
0
                ogs_info("Enum value \"%s\" for field \"supported_data_sets\" is not supported. Ignoring it ...",
301
0
                         supported_data_sets_local->valuestring);
302
0
            } else {
303
0
                OpenAPI_list_add(supported_data_setsList, (void *)localEnum);
304
0
            }
305
0
        }
306
0
        if (supported_data_setsList->count == 0) {
307
0
            ogs_error("OpenAPI_udr_info_parseFromJSON() failed: Expected supported_data_setsList to not be empty (after ignoring unsupported enum values).");
308
0
            goto end;
309
0
        }
310
0
    }
311
312
3.35k
    shared_data_id_ranges = cJSON_GetObjectItemCaseSensitive(udr_infoJSON, "sharedDataIdRanges");
313
3.35k
    if (shared_data_id_ranges) {
314
107
        cJSON *shared_data_id_ranges_local = NULL;
315
107
        if (!cJSON_IsArray(shared_data_id_ranges)) {
316
3
            ogs_error("OpenAPI_udr_info_parseFromJSON() failed [shared_data_id_ranges]");
317
3
            goto end;
318
3
        }
319
320
104
        shared_data_id_rangesList = OpenAPI_list_create();
321
322
104
        cJSON_ArrayForEach(shared_data_id_ranges_local, shared_data_id_ranges) {
323
74
            if (!cJSON_IsObject(shared_data_id_ranges_local)) {
324
37
                ogs_error("OpenAPI_udr_info_parseFromJSON() failed [shared_data_id_ranges]");
325
37
                goto end;
326
37
            }
327
37
            OpenAPI_shared_data_id_range_t *shared_data_id_rangesItem = OpenAPI_shared_data_id_range_parseFromJSON(shared_data_id_ranges_local);
328
37
            if (!shared_data_id_rangesItem) {
329
0
                ogs_error("No shared_data_id_rangesItem");
330
0
                goto end;
331
0
            }
332
37
            OpenAPI_list_add(shared_data_id_rangesList, shared_data_id_rangesItem);
333
37
        }
334
104
    }
335
336
3.31k
    any_ue_ind = cJSON_GetObjectItemCaseSensitive(udr_infoJSON, "anyUeInd");
337
3.31k
    if (any_ue_ind) {
338
72
    if (!cJSON_IsBool(any_ue_ind)) {
339
72
        ogs_error("OpenAPI_udr_info_parseFromJSON() failed [any_ue_ind]");
340
72
        goto end;
341
72
    }
342
72
    }
343
344
3.24k
    udr_info_local_var = OpenAPI_udr_info_create (
345
3.24k
        group_id && !cJSON_IsNull(group_id) ? ogs_strdup(group_id->valuestring) : NULL,
346
3.24k
        supi_ranges ? supi_rangesList : NULL,
347
3.24k
        gpsi_ranges ? gpsi_rangesList : NULL,
348
3.24k
        external_group_identifiers_ranges ? external_group_identifiers_rangesList : NULL,
349
3.24k
        supported_data_sets ? supported_data_setsList : NULL,
350
3.24k
        shared_data_id_ranges ? shared_data_id_rangesList : NULL,
351
3.24k
        any_ue_ind ? true : false,
352
3.24k
        any_ue_ind ? any_ue_ind->valueint : 0
353
3.24k
    );
354
355
3.24k
    return udr_info_local_var;
356
1.58k
end:
357
1.58k
    if (supi_rangesList) {
358
240
        OpenAPI_list_for_each(supi_rangesList, node) {
359
189
            OpenAPI_supi_range_free(node->data);
360
189
        }
361
240
        OpenAPI_list_free(supi_rangesList);
362
240
        supi_rangesList = NULL;
363
240
    }
364
1.58k
    if (gpsi_rangesList) {
365
281
        OpenAPI_list_for_each(gpsi_rangesList, node) {
366
142
            OpenAPI_identity_range_free(node->data);
367
142
        }
368
281
        OpenAPI_list_free(gpsi_rangesList);
369
281
        gpsi_rangesList = NULL;
370
281
    }
371
1.58k
    if (external_group_identifiers_rangesList) {
372
27
        OpenAPI_list_for_each(external_group_identifiers_rangesList, node) {
373
1
            OpenAPI_identity_range_free(node->data);
374
1
        }
375
27
        OpenAPI_list_free(external_group_identifiers_rangesList);
376
27
        external_group_identifiers_rangesList = NULL;
377
27
    }
378
1.58k
    if (supported_data_setsList) {
379
0
        OpenAPI_list_free(supported_data_setsList);
380
0
        supported_data_setsList = NULL;
381
0
    }
382
1.58k
    if (shared_data_id_rangesList) {
383
37
        OpenAPI_list_for_each(shared_data_id_rangesList, node) {
384
37
            OpenAPI_shared_data_id_range_free(node->data);
385
37
        }
386
37
        OpenAPI_list_free(shared_data_id_rangesList);
387
37
        shared_data_id_rangesList = NULL;
388
37
    }
389
1.58k
    return NULL;
390
3.31k
}
391
392
OpenAPI_udr_info_t *OpenAPI_udr_info_copy(OpenAPI_udr_info_t *dst, OpenAPI_udr_info_t *src)
393
0
{
394
0
    cJSON *item = NULL;
395
0
    char *content = NULL;
396
397
0
    ogs_assert(src);
398
0
    item = OpenAPI_udr_info_convertToJSON(src);
399
0
    if (!item) {
400
0
        ogs_error("OpenAPI_udr_info_convertToJSON() failed");
401
0
        return NULL;
402
0
    }
403
404
0
    content = cJSON_Print(item);
405
0
    cJSON_Delete(item);
406
407
0
    if (!content) {
408
0
        ogs_error("cJSON_Print() failed");
409
0
        return NULL;
410
0
    }
411
412
0
    item = cJSON_Parse(content);
413
0
    ogs_free(content);
414
0
    if (!item) {
415
0
        ogs_error("cJSON_Parse() failed");
416
0
        return NULL;
417
0
    }
418
419
0
    OpenAPI_udr_info_free(dst);
420
0
    dst = OpenAPI_udr_info_parseFromJSON(item);
421
0
    cJSON_Delete(item);
422
423
0
    return dst;
424
0
}
425