Refine code of discovery option param (#1671)

This commit is contained in:
Sukchan Lee 2022-07-24 19:47:04 +09:00
parent 4e8492e878
commit 9b762158a6
4 changed files with 84 additions and 70 deletions

View File

@ -61,8 +61,8 @@ void ogs_sbi_message_free(ogs_sbi_message_t *message)
ogs_assert(message); ogs_assert(message);
/* Discovery Option */ /* Discovery Option */
for (i = 0; i < message->param.discovery_option.num_of_service_names; i++) if (message->param.discovery_option)
ogs_free(message->param.discovery_option.service_names[i]); ogs_sbi_discovery_option_free(message->param.discovery_option);
/* JSON Data */ /* JSON Data */
if (message->NFProfile) if (message->NFProfile)
@ -290,32 +290,37 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message)
} }
/* Discovery Option Parameter */ /* Discovery Option Parameter */
if (message->param.discovery_option.target_nf_instance_id) { if (message->param.discovery_option) {
ogs_sbi_header_set(request->http.params, ogs_sbi_discovery_option_t *discovery_option =
OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID, message->param.discovery_option;
message->param.discovery_option.target_nf_instance_id);
}
if (message->param.discovery_option.requester_nf_instance_id) {
ogs_sbi_header_set(request->http.params,
OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID,
message->param.discovery_option.requester_nf_instance_id);
}
if (message->param.discovery_option.num_of_service_names) {
char *v = NULL;
cJSON *item = NULL;
item = cJSON_CreateStringArray( if (discovery_option->target_nf_instance_id) {
(const char * const*)message->param.discovery_option.service_names, ogs_sbi_header_set(request->http.params,
message->param.discovery_option.num_of_service_names); OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID,
ogs_expect_or_return_val(item, NULL); discovery_option->target_nf_instance_id);
}
if (discovery_option->requester_nf_instance_id) {
ogs_sbi_header_set(request->http.params,
OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID,
discovery_option->requester_nf_instance_id);
}
if (discovery_option->num_of_service_names) {
char *v = NULL;
cJSON *item = NULL;
v = cJSON_Print(item); item = cJSON_CreateStringArray(
ogs_expect_or_return_val(v, NULL); (const char * const*)discovery_option->service_names,
cJSON_Delete(item); discovery_option->num_of_service_names);
ogs_expect_or_return_val(item, NULL);
ogs_sbi_header_set( v = cJSON_Print(item);
request->http.params, OGS_SBI_PARAM_SERVICE_NAMES, v); ogs_expect_or_return_val(v, NULL);
ogs_free(v); cJSON_Delete(item);
ogs_sbi_header_set(
request->http.params, OGS_SBI_PARAM_SERVICE_NAMES, v);
ogs_free(v);
}
} }
/* URL Query Paramemter */ /* URL Query Paramemter */
@ -476,6 +481,8 @@ int ogs_sbi_parse_request(
{ {
int rv; int rv;
ogs_hash_index_t *hi; ogs_hash_index_t *hi;
ogs_sbi_discovery_option_t *discovery_option = NULL;
bool discovery_option_presence = false;
ogs_assert(request); ogs_assert(request);
ogs_assert(message); ogs_assert(message);
@ -486,6 +493,10 @@ int ogs_sbi_parse_request(
return OGS_ERROR; return OGS_ERROR;
} }
discovery_option_presence = false;
discovery_option = ogs_sbi_discovery_option_new();
ogs_assert(discovery_option);
for (hi = ogs_hash_first(request->http.params); for (hi = ogs_hash_first(request->http.params);
hi; hi = ogs_hash_next(hi)) { hi; hi = ogs_hash_next(hi)) {
/* Discovery Parameter */ /* Discovery Parameter */
@ -501,12 +512,14 @@ int ogs_sbi_parse_request(
/* Discovery Option Parameter */ /* Discovery Option Parameter */
} else if (!strcmp(ogs_hash_this_key(hi), } else if (!strcmp(ogs_hash_this_key(hi),
OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID)) { OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID)) {
message->param.discovery_option.target_nf_instance_id = discovery_option_presence = true;
ogs_hash_this_val(hi); ogs_sbi_discovery_option_set_target_nf_instance_id(
discovery_option, ogs_hash_this_val(hi));
} else if (!strcmp(ogs_hash_this_key(hi), } else if (!strcmp(ogs_hash_this_key(hi),
OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID)) { OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID)) {
message->param.discovery_option.requester_nf_instance_id = discovery_option_presence = true;
ogs_hash_this_val(hi); ogs_sbi_discovery_option_set_requester_nf_instance_id(
discovery_option, ogs_hash_this_val(hi));
} else if (!strcmp(ogs_hash_this_key(hi), } else if (!strcmp(ogs_hash_this_key(hi),
OGS_SBI_PARAM_SERVICE_NAMES)) { OGS_SBI_PARAM_SERVICE_NAMES)) {
char *v = NULL; char *v = NULL;
@ -516,13 +529,14 @@ int ogs_sbi_parse_request(
if (v) { if (v) {
array = cJSON_Parse(v); array = cJSON_Parse(v);
if (cJSON_IsArray(array)) { if (cJSON_IsArray(array)) {
discovery_option_presence = true;
cJSON_ArrayForEach(item, array) { cJSON_ArrayForEach(item, array) {
char *names = cJSON_GetStringValue(item); char *names = cJSON_GetStringValue(item);
if (names) { if (names)
message->param.discovery_option.service_names[ ogs_sbi_discovery_option_add_service_names(
message->param.discovery_option. discovery_option, names);
num_of_service_names++] = ogs_strdup(names);
}
} }
} }
cJSON_Delete(array); cJSON_Delete(array);
@ -613,6 +627,13 @@ int ogs_sbi_parse_request(
} }
} }
if (discovery_option_presence == true)
/* message->param.discovery_option will be freed()
* in ogs_sbi_message_free() */
message->param.discovery_option = discovery_option;
else
ogs_sbi_discovery_option_free(discovery_option);
for (hi = ogs_hash_first(request->http.headers); for (hi = ogs_hash_first(request->http.headers);
hi; hi = ogs_hash_next(hi)) { hi; hi = ogs_hash_next(hi)) {
/* /*

View File

@ -389,7 +389,7 @@ typedef struct ogs_sbi_message_s {
OpenAPI_nf_type_e requester_nf_type; OpenAPI_nf_type_e requester_nf_type;
/* Discovery Option Parameter */ /* Discovery Option Parameter */
ogs_sbi_discovery_option_t discovery_option; ogs_sbi_discovery_option_t *discovery_option;
/* URL Query Parameter */ /* URL Query Parameter */
char *nf_id; char *nf_id;

View File

@ -504,8 +504,6 @@ ogs_sbi_request_t *ogs_nnrf_disc_build_discover(
OpenAPI_nf_type_e target_nf_type, OpenAPI_nf_type_e requester_nf_type, OpenAPI_nf_type_e target_nf_type, OpenAPI_nf_type_e requester_nf_type,
ogs_sbi_discovery_option_t *discovery_option) ogs_sbi_discovery_option_t *discovery_option)
{ {
int i;
ogs_sbi_message_t message; ogs_sbi_message_t message;
ogs_sbi_request_t *request = NULL; ogs_sbi_request_t *request = NULL;
@ -522,20 +520,7 @@ ogs_sbi_request_t *ogs_nnrf_disc_build_discover(
message.param.target_nf_type = target_nf_type; message.param.target_nf_type = target_nf_type;
message.param.requester_nf_type = requester_nf_type; message.param.requester_nf_type = requester_nf_type;
if (discovery_option) { message.param.discovery_option = discovery_option;
message.param.discovery_option.target_nf_instance_id =
discovery_option->target_nf_instance_id;
message.param.discovery_option.requester_nf_instance_id =
discovery_option->requester_nf_instance_id;
message.param.discovery_option.num_of_service_names =
discovery_option->num_of_service_names;
for (i = 0;
i < message.param.discovery_option.num_of_service_names; i++) {
message.param.discovery_option.service_names[i] =
discovery_option->service_names[i];;
}
}
request = ogs_sbi_build_request(&message); request = ogs_sbi_build_request(&message);

View File

@ -400,6 +400,7 @@ bool nrf_nnrf_handle_nf_discover(
ogs_sbi_message_t sendmsg; ogs_sbi_message_t sendmsg;
ogs_sbi_response_t *response = NULL; ogs_sbi_response_t *response = NULL;
ogs_sbi_nf_instance_t *nf_instance = NULL; ogs_sbi_nf_instance_t *nf_instance = NULL;
ogs_sbi_discovery_option_t *discovery_option = NULL;
OpenAPI_search_result_t *SearchResult = NULL; OpenAPI_search_result_t *SearchResult = NULL;
int i; int i;
@ -426,21 +427,6 @@ bool nrf_nnrf_handle_nf_discover(
OpenAPI_nf_type_ToString(recvmsg->param.requester_nf_type), OpenAPI_nf_type_ToString(recvmsg->param.requester_nf_type),
OpenAPI_nf_type_ToString(recvmsg->param.target_nf_type)); OpenAPI_nf_type_ToString(recvmsg->param.target_nf_type));
if (recvmsg->param.discovery_option.target_nf_instance_id) {
ogs_debug("target-nf-instance-id[%s]",
recvmsg->param.discovery_option.target_nf_instance_id);
}
if (recvmsg->param.discovery_option.requester_nf_instance_id) {
ogs_debug("requester-nf-instance-id[%s]",
recvmsg->param.discovery_option.requester_nf_instance_id);
}
if (recvmsg->param.discovery_option.num_of_service_names) {
for (i = 0;
i < recvmsg->param.discovery_option.num_of_service_names; i++)
ogs_debug("[%d] service-names[%s]", i,
recvmsg->param.discovery_option.service_names[i]);
}
SearchResult = ogs_calloc(1, sizeof(*SearchResult)); SearchResult = ogs_calloc(1, sizeof(*SearchResult));
ogs_assert(SearchResult); ogs_assert(SearchResult);
@ -452,14 +438,36 @@ bool nrf_nnrf_handle_nf_discover(
SearchResult->nf_instances = OpenAPI_list_create(); SearchResult->nf_instances = OpenAPI_list_create();
ogs_assert(SearchResult->nf_instances); ogs_assert(SearchResult->nf_instances);
if (recvmsg->param.discovery_option)
discovery_option = recvmsg->param.discovery_option;
if (discovery_option) {
if (discovery_option->target_nf_instance_id) {
ogs_debug("target-nf-instance-id[%s]",
discovery_option->target_nf_instance_id);
}
if (discovery_option->requester_nf_instance_id) {
ogs_debug("requester-nf-instance-id[%s]",
discovery_option->requester_nf_instance_id);
}
if (discovery_option->num_of_service_names) {
for (i = 0; i < discovery_option->num_of_service_names; i++)
ogs_debug("[%d] service-names[%s]", i,
discovery_option->service_names[i]);
}
}
i = 0; i = 0;
ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) { ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) {
if (nf_instance->nf_type != recvmsg->param.target_nf_type) if (nf_instance->nf_type != recvmsg->param.target_nf_type)
continue; continue;
if (recvmsg->param.discovery_option.target_nf_instance_id &&
strcmp(nf_instance->id, if (discovery_option) {
recvmsg->param.discovery_option.target_nf_instance_id) != 0) if (discovery_option->target_nf_instance_id &&
continue; strcmp(nf_instance->id,
discovery_option->target_nf_instance_id) != 0)
continue;
}
if (!recvmsg->param.limit || if (!recvmsg->param.limit ||
(recvmsg->param.limit && i < recvmsg->param.limit)) { (recvmsg->param.limit && i < recvmsg->param.limit)) {