open5gs/lib/sbi/openapi/model/ue_initiated_resource_request.c
Sukchan Lee 5ea9b22209 [AMF] security protection (UERANSIM-issues316)
1. Allocate ngKSI other than the value already used.
2. Add the protection of Service request
3. fix SBI convert error ng_ap_cause
2021-05-08 13:24:17 +09:00

222 lines
8 KiB
C

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "ue_initiated_resource_request.h"
OpenAPI_ue_initiated_resource_request_t *OpenAPI_ue_initiated_resource_request_create(
char *pcc_rule_id,
OpenAPI_rule_operation_e rule_op,
int precedence,
OpenAPI_list_t *pack_filt_info,
OpenAPI_requested_qos_t *req_qos
)
{
OpenAPI_ue_initiated_resource_request_t *ue_initiated_resource_request_local_var = OpenAPI_malloc(sizeof(OpenAPI_ue_initiated_resource_request_t));
if (!ue_initiated_resource_request_local_var) {
return NULL;
}
ue_initiated_resource_request_local_var->pcc_rule_id = pcc_rule_id;
ue_initiated_resource_request_local_var->rule_op = rule_op;
ue_initiated_resource_request_local_var->precedence = precedence;
ue_initiated_resource_request_local_var->pack_filt_info = pack_filt_info;
ue_initiated_resource_request_local_var->req_qos = req_qos;
return ue_initiated_resource_request_local_var;
}
void OpenAPI_ue_initiated_resource_request_free(OpenAPI_ue_initiated_resource_request_t *ue_initiated_resource_request)
{
if (NULL == ue_initiated_resource_request) {
return;
}
OpenAPI_lnode_t *node;
ogs_free(ue_initiated_resource_request->pcc_rule_id);
OpenAPI_list_for_each(ue_initiated_resource_request->pack_filt_info, node) {
OpenAPI_packet_filter_info_free(node->data);
}
OpenAPI_list_free(ue_initiated_resource_request->pack_filt_info);
OpenAPI_requested_qos_free(ue_initiated_resource_request->req_qos);
ogs_free(ue_initiated_resource_request);
}
cJSON *OpenAPI_ue_initiated_resource_request_convertToJSON(OpenAPI_ue_initiated_resource_request_t *ue_initiated_resource_request)
{
cJSON *item = NULL;
if (ue_initiated_resource_request == NULL) {
ogs_error("OpenAPI_ue_initiated_resource_request_convertToJSON() failed [UeInitiatedResourceRequest]");
return NULL;
}
item = cJSON_CreateObject();
if (ue_initiated_resource_request->pcc_rule_id) {
if (cJSON_AddStringToObject(item, "pccRuleId", ue_initiated_resource_request->pcc_rule_id) == NULL) {
ogs_error("OpenAPI_ue_initiated_resource_request_convertToJSON() failed [pcc_rule_id]");
goto end;
}
}
if (cJSON_AddStringToObject(item, "ruleOp", OpenAPI_rule_operation_ToString(ue_initiated_resource_request->rule_op)) == NULL) {
ogs_error("OpenAPI_ue_initiated_resource_request_convertToJSON() failed [rule_op]");
goto end;
}
if (ue_initiated_resource_request->precedence) {
if (cJSON_AddNumberToObject(item, "precedence", ue_initiated_resource_request->precedence) == NULL) {
ogs_error("OpenAPI_ue_initiated_resource_request_convertToJSON() failed [precedence]");
goto end;
}
}
cJSON *pack_filt_infoList = cJSON_AddArrayToObject(item, "packFiltInfo");
if (pack_filt_infoList == NULL) {
ogs_error("OpenAPI_ue_initiated_resource_request_convertToJSON() failed [pack_filt_info]");
goto end;
}
OpenAPI_lnode_t *pack_filt_info_node;
if (ue_initiated_resource_request->pack_filt_info) {
OpenAPI_list_for_each(ue_initiated_resource_request->pack_filt_info, pack_filt_info_node) {
cJSON *itemLocal = OpenAPI_packet_filter_info_convertToJSON(pack_filt_info_node->data);
if (itemLocal == NULL) {
ogs_error("OpenAPI_ue_initiated_resource_request_convertToJSON() failed [pack_filt_info]");
goto end;
}
cJSON_AddItemToArray(pack_filt_infoList, itemLocal);
}
}
if (ue_initiated_resource_request->req_qos) {
cJSON *req_qos_local_JSON = OpenAPI_requested_qos_convertToJSON(ue_initiated_resource_request->req_qos);
if (req_qos_local_JSON == NULL) {
ogs_error("OpenAPI_ue_initiated_resource_request_convertToJSON() failed [req_qos]");
goto end;
}
cJSON_AddItemToObject(item, "reqQos", req_qos_local_JSON);
if (item->child == NULL) {
ogs_error("OpenAPI_ue_initiated_resource_request_convertToJSON() failed [req_qos]");
goto end;
}
}
end:
return item;
}
OpenAPI_ue_initiated_resource_request_t *OpenAPI_ue_initiated_resource_request_parseFromJSON(cJSON *ue_initiated_resource_requestJSON)
{
OpenAPI_ue_initiated_resource_request_t *ue_initiated_resource_request_local_var = NULL;
cJSON *pcc_rule_id = cJSON_GetObjectItemCaseSensitive(ue_initiated_resource_requestJSON, "pccRuleId");
if (pcc_rule_id) {
if (!cJSON_IsString(pcc_rule_id)) {
ogs_error("OpenAPI_ue_initiated_resource_request_parseFromJSON() failed [pcc_rule_id]");
goto end;
}
}
cJSON *rule_op = cJSON_GetObjectItemCaseSensitive(ue_initiated_resource_requestJSON, "ruleOp");
if (!rule_op) {
ogs_error("OpenAPI_ue_initiated_resource_request_parseFromJSON() failed [rule_op]");
goto end;
}
OpenAPI_rule_operation_e rule_opVariable;
if (!cJSON_IsString(rule_op)) {
ogs_error("OpenAPI_ue_initiated_resource_request_parseFromJSON() failed [rule_op]");
goto end;
}
rule_opVariable = OpenAPI_rule_operation_FromString(rule_op->valuestring);
cJSON *precedence = cJSON_GetObjectItemCaseSensitive(ue_initiated_resource_requestJSON, "precedence");
if (precedence) {
if (!cJSON_IsNumber(precedence)) {
ogs_error("OpenAPI_ue_initiated_resource_request_parseFromJSON() failed [precedence]");
goto end;
}
}
cJSON *pack_filt_info = cJSON_GetObjectItemCaseSensitive(ue_initiated_resource_requestJSON, "packFiltInfo");
if (!pack_filt_info) {
ogs_error("OpenAPI_ue_initiated_resource_request_parseFromJSON() failed [pack_filt_info]");
goto end;
}
OpenAPI_list_t *pack_filt_infoList;
cJSON *pack_filt_info_local_nonprimitive;
if (!cJSON_IsArray(pack_filt_info)) {
ogs_error("OpenAPI_ue_initiated_resource_request_parseFromJSON() failed [pack_filt_info]");
goto end;
}
pack_filt_infoList = OpenAPI_list_create();
cJSON_ArrayForEach(pack_filt_info_local_nonprimitive, pack_filt_info ) {
if (!cJSON_IsObject(pack_filt_info_local_nonprimitive)) {
ogs_error("OpenAPI_ue_initiated_resource_request_parseFromJSON() failed [pack_filt_info]");
goto end;
}
OpenAPI_packet_filter_info_t *pack_filt_infoItem = OpenAPI_packet_filter_info_parseFromJSON(pack_filt_info_local_nonprimitive);
OpenAPI_list_add(pack_filt_infoList, pack_filt_infoItem);
}
cJSON *req_qos = cJSON_GetObjectItemCaseSensitive(ue_initiated_resource_requestJSON, "reqQos");
OpenAPI_requested_qos_t *req_qos_local_nonprim = NULL;
if (req_qos) {
req_qos_local_nonprim = OpenAPI_requested_qos_parseFromJSON(req_qos);
}
ue_initiated_resource_request_local_var = OpenAPI_ue_initiated_resource_request_create (
pcc_rule_id ? ogs_strdup(pcc_rule_id->valuestring) : NULL,
rule_opVariable,
precedence ? precedence->valuedouble : 0,
pack_filt_infoList,
req_qos ? req_qos_local_nonprim : NULL
);
return ue_initiated_resource_request_local_var;
end:
return NULL;
}
OpenAPI_ue_initiated_resource_request_t *OpenAPI_ue_initiated_resource_request_copy(OpenAPI_ue_initiated_resource_request_t *dst, OpenAPI_ue_initiated_resource_request_t *src)
{
cJSON *item = NULL;
char *content = NULL;
ogs_assert(src);
item = OpenAPI_ue_initiated_resource_request_convertToJSON(src);
if (!item) {
ogs_error("OpenAPI_ue_initiated_resource_request_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_ue_initiated_resource_request_free(dst);
dst = OpenAPI_ue_initiated_resource_request_parseFromJSON(item);
cJSON_Delete(item);
return dst;
}