mirror of
https://github.com/open5gs/open5gs.git
synced 2026-05-04 06:10:11 +00:00
469 lines
16 KiB
C
469 lines
16 KiB
C
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include "dispersion_collection.h"
|
|
|
|
OpenAPI_dispersion_collection_t *OpenAPI_dispersion_collection_create(
|
|
OpenAPI_user_location_t *ue_loc,
|
|
OpenAPI_snssai_t *snssai,
|
|
OpenAPI_list_t *supis,
|
|
OpenAPI_list_t *gpsis,
|
|
OpenAPI_list_t *app_volumes,
|
|
bool is_disper_amount,
|
|
int disper_amount,
|
|
OpenAPI_dispersion_class_t *disper_class,
|
|
bool is_usage_rank,
|
|
int usage_rank,
|
|
bool is_percentile_rank,
|
|
int percentile_rank,
|
|
bool is_ue_ratio,
|
|
int ue_ratio,
|
|
bool is_confidence,
|
|
int confidence
|
|
)
|
|
{
|
|
OpenAPI_dispersion_collection_t *dispersion_collection_local_var = ogs_malloc(sizeof(OpenAPI_dispersion_collection_t));
|
|
ogs_assert(dispersion_collection_local_var);
|
|
|
|
dispersion_collection_local_var->ue_loc = ue_loc;
|
|
dispersion_collection_local_var->snssai = snssai;
|
|
dispersion_collection_local_var->supis = supis;
|
|
dispersion_collection_local_var->gpsis = gpsis;
|
|
dispersion_collection_local_var->app_volumes = app_volumes;
|
|
dispersion_collection_local_var->is_disper_amount = is_disper_amount;
|
|
dispersion_collection_local_var->disper_amount = disper_amount;
|
|
dispersion_collection_local_var->disper_class = disper_class;
|
|
dispersion_collection_local_var->is_usage_rank = is_usage_rank;
|
|
dispersion_collection_local_var->usage_rank = usage_rank;
|
|
dispersion_collection_local_var->is_percentile_rank = is_percentile_rank;
|
|
dispersion_collection_local_var->percentile_rank = percentile_rank;
|
|
dispersion_collection_local_var->is_ue_ratio = is_ue_ratio;
|
|
dispersion_collection_local_var->ue_ratio = ue_ratio;
|
|
dispersion_collection_local_var->is_confidence = is_confidence;
|
|
dispersion_collection_local_var->confidence = confidence;
|
|
|
|
return dispersion_collection_local_var;
|
|
}
|
|
|
|
void OpenAPI_dispersion_collection_free(OpenAPI_dispersion_collection_t *dispersion_collection)
|
|
{
|
|
OpenAPI_lnode_t *node = NULL;
|
|
|
|
if (NULL == dispersion_collection) {
|
|
return;
|
|
}
|
|
if (dispersion_collection->ue_loc) {
|
|
OpenAPI_user_location_free(dispersion_collection->ue_loc);
|
|
dispersion_collection->ue_loc = NULL;
|
|
}
|
|
if (dispersion_collection->snssai) {
|
|
OpenAPI_snssai_free(dispersion_collection->snssai);
|
|
dispersion_collection->snssai = NULL;
|
|
}
|
|
if (dispersion_collection->supis) {
|
|
OpenAPI_list_for_each(dispersion_collection->supis, node) {
|
|
ogs_free(node->data);
|
|
}
|
|
OpenAPI_list_free(dispersion_collection->supis);
|
|
dispersion_collection->supis = NULL;
|
|
}
|
|
if (dispersion_collection->gpsis) {
|
|
OpenAPI_list_for_each(dispersion_collection->gpsis, node) {
|
|
ogs_free(node->data);
|
|
}
|
|
OpenAPI_list_free(dispersion_collection->gpsis);
|
|
dispersion_collection->gpsis = NULL;
|
|
}
|
|
if (dispersion_collection->app_volumes) {
|
|
OpenAPI_list_for_each(dispersion_collection->app_volumes, node) {
|
|
OpenAPI_application_volume_free(node->data);
|
|
}
|
|
OpenAPI_list_free(dispersion_collection->app_volumes);
|
|
dispersion_collection->app_volumes = NULL;
|
|
}
|
|
if (dispersion_collection->disper_class) {
|
|
OpenAPI_dispersion_class_free(dispersion_collection->disper_class);
|
|
dispersion_collection->disper_class = NULL;
|
|
}
|
|
ogs_free(dispersion_collection);
|
|
}
|
|
|
|
cJSON *OpenAPI_dispersion_collection_convertToJSON(OpenAPI_dispersion_collection_t *dispersion_collection)
|
|
{
|
|
cJSON *item = NULL;
|
|
OpenAPI_lnode_t *node = NULL;
|
|
|
|
if (dispersion_collection == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [DispersionCollection]");
|
|
return NULL;
|
|
}
|
|
|
|
item = cJSON_CreateObject();
|
|
if (dispersion_collection->ue_loc) {
|
|
cJSON *ue_loc_local_JSON = OpenAPI_user_location_convertToJSON(dispersion_collection->ue_loc);
|
|
if (ue_loc_local_JSON == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [ue_loc]");
|
|
goto end;
|
|
}
|
|
cJSON_AddItemToObject(item, "ueLoc", ue_loc_local_JSON);
|
|
if (item->child == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [ue_loc]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
if (dispersion_collection->snssai) {
|
|
cJSON *snssai_local_JSON = OpenAPI_snssai_convertToJSON(dispersion_collection->snssai);
|
|
if (snssai_local_JSON == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [snssai]");
|
|
goto end;
|
|
}
|
|
cJSON_AddItemToObject(item, "snssai", snssai_local_JSON);
|
|
if (item->child == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [snssai]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
if (dispersion_collection->supis) {
|
|
cJSON *supisList = cJSON_AddArrayToObject(item, "supis");
|
|
if (supisList == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [supis]");
|
|
goto end;
|
|
}
|
|
OpenAPI_list_for_each(dispersion_collection->supis, node) {
|
|
if (cJSON_AddStringToObject(supisList, "", (char*)node->data) == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [supis]");
|
|
goto end;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (dispersion_collection->gpsis) {
|
|
cJSON *gpsisList = cJSON_AddArrayToObject(item, "gpsis");
|
|
if (gpsisList == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [gpsis]");
|
|
goto end;
|
|
}
|
|
OpenAPI_list_for_each(dispersion_collection->gpsis, node) {
|
|
if (cJSON_AddStringToObject(gpsisList, "", (char*)node->data) == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [gpsis]");
|
|
goto end;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (dispersion_collection->app_volumes) {
|
|
cJSON *app_volumesList = cJSON_AddArrayToObject(item, "appVolumes");
|
|
if (app_volumesList == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [app_volumes]");
|
|
goto end;
|
|
}
|
|
OpenAPI_list_for_each(dispersion_collection->app_volumes, node) {
|
|
cJSON *itemLocal = OpenAPI_application_volume_convertToJSON(node->data);
|
|
if (itemLocal == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [app_volumes]");
|
|
goto end;
|
|
}
|
|
cJSON_AddItemToArray(app_volumesList, itemLocal);
|
|
}
|
|
}
|
|
|
|
if (dispersion_collection->is_disper_amount) {
|
|
if (cJSON_AddNumberToObject(item, "disperAmount", dispersion_collection->disper_amount) == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [disper_amount]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
if (dispersion_collection->disper_class) {
|
|
cJSON *disper_class_local_JSON = OpenAPI_dispersion_class_convertToJSON(dispersion_collection->disper_class);
|
|
if (disper_class_local_JSON == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [disper_class]");
|
|
goto end;
|
|
}
|
|
cJSON_AddItemToObject(item, "disperClass", disper_class_local_JSON);
|
|
if (item->child == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [disper_class]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
if (dispersion_collection->is_usage_rank) {
|
|
if (cJSON_AddNumberToObject(item, "usageRank", dispersion_collection->usage_rank) == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [usage_rank]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
if (dispersion_collection->is_percentile_rank) {
|
|
if (cJSON_AddNumberToObject(item, "percentileRank", dispersion_collection->percentile_rank) == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [percentile_rank]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
if (dispersion_collection->is_ue_ratio) {
|
|
if (cJSON_AddNumberToObject(item, "ueRatio", dispersion_collection->ue_ratio) == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [ue_ratio]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
if (dispersion_collection->is_confidence) {
|
|
if (cJSON_AddNumberToObject(item, "confidence", dispersion_collection->confidence) == NULL) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed [confidence]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
end:
|
|
return item;
|
|
}
|
|
|
|
OpenAPI_dispersion_collection_t *OpenAPI_dispersion_collection_parseFromJSON(cJSON *dispersion_collectionJSON)
|
|
{
|
|
OpenAPI_dispersion_collection_t *dispersion_collection_local_var = NULL;
|
|
OpenAPI_lnode_t *node = NULL;
|
|
cJSON *ue_loc = NULL;
|
|
OpenAPI_user_location_t *ue_loc_local_nonprim = NULL;
|
|
cJSON *snssai = NULL;
|
|
OpenAPI_snssai_t *snssai_local_nonprim = NULL;
|
|
cJSON *supis = NULL;
|
|
OpenAPI_list_t *supisList = NULL;
|
|
cJSON *gpsis = NULL;
|
|
OpenAPI_list_t *gpsisList = NULL;
|
|
cJSON *app_volumes = NULL;
|
|
OpenAPI_list_t *app_volumesList = NULL;
|
|
cJSON *disper_amount = NULL;
|
|
cJSON *disper_class = NULL;
|
|
OpenAPI_dispersion_class_t *disper_class_local_nonprim = NULL;
|
|
cJSON *usage_rank = NULL;
|
|
cJSON *percentile_rank = NULL;
|
|
cJSON *ue_ratio = NULL;
|
|
cJSON *confidence = NULL;
|
|
ue_loc = cJSON_GetObjectItemCaseSensitive(dispersion_collectionJSON, "ueLoc");
|
|
if (ue_loc) {
|
|
ue_loc_local_nonprim = OpenAPI_user_location_parseFromJSON(ue_loc);
|
|
if (!ue_loc_local_nonprim) {
|
|
ogs_error("OpenAPI_user_location_parseFromJSON failed [ue_loc]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
snssai = cJSON_GetObjectItemCaseSensitive(dispersion_collectionJSON, "snssai");
|
|
if (snssai) {
|
|
snssai_local_nonprim = OpenAPI_snssai_parseFromJSON(snssai);
|
|
if (!snssai_local_nonprim) {
|
|
ogs_error("OpenAPI_snssai_parseFromJSON failed [snssai]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
supis = cJSON_GetObjectItemCaseSensitive(dispersion_collectionJSON, "supis");
|
|
if (supis) {
|
|
cJSON *supis_local = NULL;
|
|
if (!cJSON_IsArray(supis)) {
|
|
ogs_error("OpenAPI_dispersion_collection_parseFromJSON() failed [supis]");
|
|
goto end;
|
|
}
|
|
|
|
supisList = OpenAPI_list_create();
|
|
|
|
cJSON_ArrayForEach(supis_local, supis) {
|
|
double *localDouble = NULL;
|
|
int *localInt = NULL;
|
|
if (!cJSON_IsString(supis_local)) {
|
|
ogs_error("OpenAPI_dispersion_collection_parseFromJSON() failed [supis]");
|
|
goto end;
|
|
}
|
|
OpenAPI_list_add(supisList, ogs_strdup(supis_local->valuestring));
|
|
}
|
|
}
|
|
|
|
gpsis = cJSON_GetObjectItemCaseSensitive(dispersion_collectionJSON, "gpsis");
|
|
if (gpsis) {
|
|
cJSON *gpsis_local = NULL;
|
|
if (!cJSON_IsArray(gpsis)) {
|
|
ogs_error("OpenAPI_dispersion_collection_parseFromJSON() failed [gpsis]");
|
|
goto end;
|
|
}
|
|
|
|
gpsisList = OpenAPI_list_create();
|
|
|
|
cJSON_ArrayForEach(gpsis_local, gpsis) {
|
|
double *localDouble = NULL;
|
|
int *localInt = NULL;
|
|
if (!cJSON_IsString(gpsis_local)) {
|
|
ogs_error("OpenAPI_dispersion_collection_parseFromJSON() failed [gpsis]");
|
|
goto end;
|
|
}
|
|
OpenAPI_list_add(gpsisList, ogs_strdup(gpsis_local->valuestring));
|
|
}
|
|
}
|
|
|
|
app_volumes = cJSON_GetObjectItemCaseSensitive(dispersion_collectionJSON, "appVolumes");
|
|
if (app_volumes) {
|
|
cJSON *app_volumes_local = NULL;
|
|
if (!cJSON_IsArray(app_volumes)) {
|
|
ogs_error("OpenAPI_dispersion_collection_parseFromJSON() failed [app_volumes]");
|
|
goto end;
|
|
}
|
|
|
|
app_volumesList = OpenAPI_list_create();
|
|
|
|
cJSON_ArrayForEach(app_volumes_local, app_volumes) {
|
|
if (!cJSON_IsObject(app_volumes_local)) {
|
|
ogs_error("OpenAPI_dispersion_collection_parseFromJSON() failed [app_volumes]");
|
|
goto end;
|
|
}
|
|
OpenAPI_application_volume_t *app_volumesItem = OpenAPI_application_volume_parseFromJSON(app_volumes_local);
|
|
if (!app_volumesItem) {
|
|
ogs_error("No app_volumesItem");
|
|
goto end;
|
|
}
|
|
OpenAPI_list_add(app_volumesList, app_volumesItem);
|
|
}
|
|
}
|
|
|
|
disper_amount = cJSON_GetObjectItemCaseSensitive(dispersion_collectionJSON, "disperAmount");
|
|
if (disper_amount) {
|
|
if (!cJSON_IsNumber(disper_amount)) {
|
|
ogs_error("OpenAPI_dispersion_collection_parseFromJSON() failed [disper_amount]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
disper_class = cJSON_GetObjectItemCaseSensitive(dispersion_collectionJSON, "disperClass");
|
|
if (disper_class) {
|
|
disper_class_local_nonprim = OpenAPI_dispersion_class_parseFromJSON(disper_class);
|
|
if (!disper_class_local_nonprim) {
|
|
ogs_error("OpenAPI_dispersion_class_parseFromJSON failed [disper_class]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
usage_rank = cJSON_GetObjectItemCaseSensitive(dispersion_collectionJSON, "usageRank");
|
|
if (usage_rank) {
|
|
if (!cJSON_IsNumber(usage_rank)) {
|
|
ogs_error("OpenAPI_dispersion_collection_parseFromJSON() failed [usage_rank]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
percentile_rank = cJSON_GetObjectItemCaseSensitive(dispersion_collectionJSON, "percentileRank");
|
|
if (percentile_rank) {
|
|
if (!cJSON_IsNumber(percentile_rank)) {
|
|
ogs_error("OpenAPI_dispersion_collection_parseFromJSON() failed [percentile_rank]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
ue_ratio = cJSON_GetObjectItemCaseSensitive(dispersion_collectionJSON, "ueRatio");
|
|
if (ue_ratio) {
|
|
if (!cJSON_IsNumber(ue_ratio)) {
|
|
ogs_error("OpenAPI_dispersion_collection_parseFromJSON() failed [ue_ratio]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
confidence = cJSON_GetObjectItemCaseSensitive(dispersion_collectionJSON, "confidence");
|
|
if (confidence) {
|
|
if (!cJSON_IsNumber(confidence)) {
|
|
ogs_error("OpenAPI_dispersion_collection_parseFromJSON() failed [confidence]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
dispersion_collection_local_var = OpenAPI_dispersion_collection_create (
|
|
ue_loc ? ue_loc_local_nonprim : NULL,
|
|
snssai ? snssai_local_nonprim : NULL,
|
|
supis ? supisList : NULL,
|
|
gpsis ? gpsisList : NULL,
|
|
app_volumes ? app_volumesList : NULL,
|
|
disper_amount ? true : false,
|
|
disper_amount ? disper_amount->valuedouble : 0,
|
|
disper_class ? disper_class_local_nonprim : NULL,
|
|
usage_rank ? true : false,
|
|
usage_rank ? usage_rank->valuedouble : 0,
|
|
percentile_rank ? true : false,
|
|
percentile_rank ? percentile_rank->valuedouble : 0,
|
|
ue_ratio ? true : false,
|
|
ue_ratio ? ue_ratio->valuedouble : 0,
|
|
confidence ? true : false,
|
|
confidence ? confidence->valuedouble : 0
|
|
);
|
|
|
|
return dispersion_collection_local_var;
|
|
end:
|
|
if (ue_loc_local_nonprim) {
|
|
OpenAPI_user_location_free(ue_loc_local_nonprim);
|
|
ue_loc_local_nonprim = NULL;
|
|
}
|
|
if (snssai_local_nonprim) {
|
|
OpenAPI_snssai_free(snssai_local_nonprim);
|
|
snssai_local_nonprim = NULL;
|
|
}
|
|
if (supisList) {
|
|
OpenAPI_list_for_each(supisList, node) {
|
|
ogs_free(node->data);
|
|
}
|
|
OpenAPI_list_free(supisList);
|
|
supisList = NULL;
|
|
}
|
|
if (gpsisList) {
|
|
OpenAPI_list_for_each(gpsisList, node) {
|
|
ogs_free(node->data);
|
|
}
|
|
OpenAPI_list_free(gpsisList);
|
|
gpsisList = NULL;
|
|
}
|
|
if (app_volumesList) {
|
|
OpenAPI_list_for_each(app_volumesList, node) {
|
|
OpenAPI_application_volume_free(node->data);
|
|
}
|
|
OpenAPI_list_free(app_volumesList);
|
|
app_volumesList = NULL;
|
|
}
|
|
if (disper_class_local_nonprim) {
|
|
OpenAPI_dispersion_class_free(disper_class_local_nonprim);
|
|
disper_class_local_nonprim = NULL;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
OpenAPI_dispersion_collection_t *OpenAPI_dispersion_collection_copy(OpenAPI_dispersion_collection_t *dst, OpenAPI_dispersion_collection_t *src)
|
|
{
|
|
cJSON *item = NULL;
|
|
char *content = NULL;
|
|
|
|
ogs_assert(src);
|
|
item = OpenAPI_dispersion_collection_convertToJSON(src);
|
|
if (!item) {
|
|
ogs_error("OpenAPI_dispersion_collection_convertToJSON() failed");
|
|
return NULL;
|
|
}
|
|
|
|
content = cJSON_Print(item);
|
|
cJSON_Delete(item);
|
|
|
|
if (!content) {
|
|
ogs_error("cJSON_Print() failed");
|
|
return NULL;
|
|
}
|
|
|
|
item = cJSON_Parse(content);
|
|
ogs_free(content);
|
|
if (!item) {
|
|
ogs_error("cJSON_Parse() failed");
|
|
return NULL;
|
|
}
|
|
|
|
OpenAPI_dispersion_collection_free(dst);
|
|
dst = OpenAPI_dispersion_collection_parseFromJSON(item);
|
|
cJSON_Delete(item);
|
|
|
|
return dst;
|
|
}
|
|
|