forked from acouzens/open5gs
287 lines
9.2 KiB
C
287 lines
9.2 KiB
C
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include "ie_info.h"
|
|
|
|
OpenAPI_ie_info_t *OpenAPI_ie_info_create(
|
|
OpenAPI_ie_location_e ie_loc,
|
|
OpenAPI_ie_type_e ie_type,
|
|
char *req_ie,
|
|
char *rsp_ie,
|
|
bool is_is_modifiable,
|
|
int is_modifiable,
|
|
OpenAPI_list_t* is_modifiable_by_ipx
|
|
)
|
|
{
|
|
OpenAPI_ie_info_t *ie_info_local_var = ogs_malloc(sizeof(OpenAPI_ie_info_t));
|
|
ogs_assert(ie_info_local_var);
|
|
|
|
ie_info_local_var->ie_loc = ie_loc;
|
|
ie_info_local_var->ie_type = ie_type;
|
|
ie_info_local_var->req_ie = req_ie;
|
|
ie_info_local_var->rsp_ie = rsp_ie;
|
|
ie_info_local_var->is_is_modifiable = is_is_modifiable;
|
|
ie_info_local_var->is_modifiable = is_modifiable;
|
|
ie_info_local_var->is_modifiable_by_ipx = is_modifiable_by_ipx;
|
|
|
|
return ie_info_local_var;
|
|
}
|
|
|
|
void OpenAPI_ie_info_free(OpenAPI_ie_info_t *ie_info)
|
|
{
|
|
OpenAPI_lnode_t *node = NULL;
|
|
|
|
if (NULL == ie_info) {
|
|
return;
|
|
}
|
|
if (ie_info->req_ie) {
|
|
ogs_free(ie_info->req_ie);
|
|
ie_info->req_ie = NULL;
|
|
}
|
|
if (ie_info->rsp_ie) {
|
|
ogs_free(ie_info->rsp_ie);
|
|
ie_info->rsp_ie = NULL;
|
|
}
|
|
if (ie_info->is_modifiable_by_ipx) {
|
|
OpenAPI_list_for_each(ie_info->is_modifiable_by_ipx, node) {
|
|
OpenAPI_map_t *localKeyValue = (OpenAPI_map_t*)node->data;
|
|
ogs_free(localKeyValue->key);
|
|
ogs_free(localKeyValue->value);
|
|
OpenAPI_map_free(localKeyValue);
|
|
}
|
|
OpenAPI_list_free(ie_info->is_modifiable_by_ipx);
|
|
ie_info->is_modifiable_by_ipx = NULL;
|
|
}
|
|
ogs_free(ie_info);
|
|
}
|
|
|
|
cJSON *OpenAPI_ie_info_convertToJSON(OpenAPI_ie_info_t *ie_info)
|
|
{
|
|
cJSON *item = NULL;
|
|
OpenAPI_lnode_t *node = NULL;
|
|
|
|
if (ie_info == NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [IeInfo]");
|
|
return NULL;
|
|
}
|
|
|
|
item = cJSON_CreateObject();
|
|
if (ie_info->ie_loc == OpenAPI_ie_location_NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [ie_loc]");
|
|
return NULL;
|
|
}
|
|
if (cJSON_AddStringToObject(item, "ieLoc", OpenAPI_ie_location_ToString(ie_info->ie_loc)) == NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [ie_loc]");
|
|
goto end;
|
|
}
|
|
|
|
if (ie_info->ie_type == OpenAPI_ie_type_NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [ie_type]");
|
|
return NULL;
|
|
}
|
|
if (cJSON_AddStringToObject(item, "ieType", OpenAPI_ie_type_ToString(ie_info->ie_type)) == NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [ie_type]");
|
|
goto end;
|
|
}
|
|
|
|
if (ie_info->req_ie) {
|
|
if (cJSON_AddStringToObject(item, "reqIe", ie_info->req_ie) == NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [req_ie]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
if (ie_info->rsp_ie) {
|
|
if (cJSON_AddStringToObject(item, "rspIe", ie_info->rsp_ie) == NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [rsp_ie]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
if (ie_info->is_is_modifiable) {
|
|
if (cJSON_AddBoolToObject(item, "isModifiable", ie_info->is_modifiable) == NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [is_modifiable]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
if (ie_info->is_modifiable_by_ipx) {
|
|
cJSON *is_modifiable_by_ipx = cJSON_AddObjectToObject(item, "isModifiableByIpx");
|
|
if (is_modifiable_by_ipx == NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [is_modifiable_by_ipx]");
|
|
goto end;
|
|
}
|
|
cJSON *localMapObject = is_modifiable_by_ipx;
|
|
if (ie_info->is_modifiable_by_ipx) {
|
|
OpenAPI_list_for_each(ie_info->is_modifiable_by_ipx, node) {
|
|
OpenAPI_map_t *localKeyValue = (OpenAPI_map_t*)node->data;
|
|
if (localKeyValue == NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [is_modifiable_by_ipx]");
|
|
goto end;
|
|
}
|
|
if (localKeyValue->key == NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [is_modifiable_by_ipx]");
|
|
goto end;
|
|
}
|
|
if (cJSON_AddBoolToObject(localMapObject, localKeyValue->key, (uintptr_t)localKeyValue->value) == NULL) {
|
|
ogs_error("OpenAPI_ie_info_convertToJSON() failed [inner]");
|
|
goto end;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
end:
|
|
return item;
|
|
}
|
|
|
|
OpenAPI_ie_info_t *OpenAPI_ie_info_parseFromJSON(cJSON *ie_infoJSON)
|
|
{
|
|
OpenAPI_ie_info_t *ie_info_local_var = NULL;
|
|
OpenAPI_lnode_t *node = NULL;
|
|
cJSON *ie_loc = NULL;
|
|
OpenAPI_ie_location_e ie_locVariable = 0;
|
|
cJSON *ie_type = NULL;
|
|
OpenAPI_ie_type_e ie_typeVariable = 0;
|
|
cJSON *req_ie = NULL;
|
|
cJSON *rsp_ie = NULL;
|
|
cJSON *is_modifiable = NULL;
|
|
cJSON *is_modifiable_by_ipx = NULL;
|
|
OpenAPI_list_t *is_modifiable_by_ipxList = NULL;
|
|
ie_loc = cJSON_GetObjectItemCaseSensitive(ie_infoJSON, "ieLoc");
|
|
if (!ie_loc) {
|
|
ogs_error("OpenAPI_ie_info_parseFromJSON() failed [ie_loc]");
|
|
goto end;
|
|
}
|
|
if (!cJSON_IsString(ie_loc)) {
|
|
ogs_error("OpenAPI_ie_info_parseFromJSON() failed [ie_loc]");
|
|
goto end;
|
|
}
|
|
ie_locVariable = OpenAPI_ie_location_FromString(ie_loc->valuestring);
|
|
|
|
ie_type = cJSON_GetObjectItemCaseSensitive(ie_infoJSON, "ieType");
|
|
if (!ie_type) {
|
|
ogs_error("OpenAPI_ie_info_parseFromJSON() failed [ie_type]");
|
|
goto end;
|
|
}
|
|
if (!cJSON_IsString(ie_type)) {
|
|
ogs_error("OpenAPI_ie_info_parseFromJSON() failed [ie_type]");
|
|
goto end;
|
|
}
|
|
ie_typeVariable = OpenAPI_ie_type_FromString(ie_type->valuestring);
|
|
|
|
req_ie = cJSON_GetObjectItemCaseSensitive(ie_infoJSON, "reqIe");
|
|
if (req_ie) {
|
|
if (!cJSON_IsString(req_ie) && !cJSON_IsNull(req_ie)) {
|
|
ogs_error("OpenAPI_ie_info_parseFromJSON() failed [req_ie]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
rsp_ie = cJSON_GetObjectItemCaseSensitive(ie_infoJSON, "rspIe");
|
|
if (rsp_ie) {
|
|
if (!cJSON_IsString(rsp_ie) && !cJSON_IsNull(rsp_ie)) {
|
|
ogs_error("OpenAPI_ie_info_parseFromJSON() failed [rsp_ie]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
is_modifiable = cJSON_GetObjectItemCaseSensitive(ie_infoJSON, "isModifiable");
|
|
if (is_modifiable) {
|
|
if (!cJSON_IsBool(is_modifiable)) {
|
|
ogs_error("OpenAPI_ie_info_parseFromJSON() failed [is_modifiable]");
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
is_modifiable_by_ipx = cJSON_GetObjectItemCaseSensitive(ie_infoJSON, "isModifiableByIpx");
|
|
if (is_modifiable_by_ipx) {
|
|
cJSON *is_modifiable_by_ipx_local_map = NULL;
|
|
if (!cJSON_IsObject(is_modifiable_by_ipx) && !cJSON_IsNull(is_modifiable_by_ipx)) {
|
|
ogs_error("OpenAPI_ie_info_parseFromJSON() failed [is_modifiable_by_ipx]");
|
|
goto end;
|
|
}
|
|
if (cJSON_IsObject(is_modifiable_by_ipx)) {
|
|
is_modifiable_by_ipxList = OpenAPI_list_create();
|
|
OpenAPI_map_t *localMapKeyPair = NULL;
|
|
cJSON_ArrayForEach(is_modifiable_by_ipx_local_map, is_modifiable_by_ipx) {
|
|
cJSON *localMapObject = is_modifiable_by_ipx_local_map;
|
|
double *localDouble = NULL;
|
|
int *localInt = NULL;
|
|
if (!cJSON_IsBool(localMapObject)) {
|
|
ogs_error("OpenAPI_ie_info_parseFromJSON() failed [inner]");
|
|
goto end;
|
|
}
|
|
localInt = (int *)ogs_calloc(1, sizeof(int));
|
|
if (!localInt) {
|
|
ogs_error("OpenAPI_ie_info_parseFromJSON() failed [inner]");
|
|
goto end;
|
|
}
|
|
*localInt = localMapObject->valueint;
|
|
localMapKeyPair = OpenAPI_map_create(ogs_strdup(localMapObject->string), localInt);
|
|
OpenAPI_list_add(is_modifiable_by_ipxList, localMapKeyPair);
|
|
}
|
|
}
|
|
}
|
|
|
|
ie_info_local_var = OpenAPI_ie_info_create (
|
|
ie_locVariable,
|
|
ie_typeVariable,
|
|
req_ie && !cJSON_IsNull(req_ie) ? ogs_strdup(req_ie->valuestring) : NULL,
|
|
rsp_ie && !cJSON_IsNull(rsp_ie) ? ogs_strdup(rsp_ie->valuestring) : NULL,
|
|
is_modifiable ? true : false,
|
|
is_modifiable ? is_modifiable->valueint : 0,
|
|
is_modifiable_by_ipx ? is_modifiable_by_ipxList : NULL
|
|
);
|
|
|
|
return ie_info_local_var;
|
|
end:
|
|
if (is_modifiable_by_ipxList) {
|
|
OpenAPI_list_for_each(is_modifiable_by_ipxList, node) {
|
|
OpenAPI_map_t *localKeyValue = (OpenAPI_map_t*) node->data;
|
|
ogs_free(localKeyValue->key);
|
|
ogs_free(localKeyValue->value);
|
|
OpenAPI_map_free(localKeyValue);
|
|
}
|
|
OpenAPI_list_free(is_modifiable_by_ipxList);
|
|
is_modifiable_by_ipxList = NULL;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
OpenAPI_ie_info_t *OpenAPI_ie_info_copy(OpenAPI_ie_info_t *dst, OpenAPI_ie_info_t *src)
|
|
{
|
|
cJSON *item = NULL;
|
|
char *content = NULL;
|
|
|
|
ogs_assert(src);
|
|
item = OpenAPI_ie_info_convertToJSON(src);
|
|
if (!item) {
|
|
ogs_error("OpenAPI_ie_info_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_ie_info_free(dst);
|
|
dst = OpenAPI_ie_info_parseFromJSON(item);
|
|
cJSON_Delete(item);
|
|
|
|
return dst;
|
|
}
|
|
|