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);
/* Discovery Option */
for (i = 0; i < message->param.discovery_option.num_of_service_names; i++)
ogs_free(message->param.discovery_option.service_names[i]);
if (message->param.discovery_option)
ogs_sbi_discovery_option_free(message->param.discovery_option);
/* JSON Data */
if (message->NFProfile)
@ -290,32 +290,37 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message)
}
/* Discovery Option Parameter */
if (message->param.discovery_option.target_nf_instance_id) {
ogs_sbi_header_set(request->http.params,
OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID,
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;
if (message->param.discovery_option) {
ogs_sbi_discovery_option_t *discovery_option =
message->param.discovery_option;
item = cJSON_CreateStringArray(
(const char * const*)message->param.discovery_option.service_names,
message->param.discovery_option.num_of_service_names);
ogs_expect_or_return_val(item, NULL);
if (discovery_option->target_nf_instance_id) {
ogs_sbi_header_set(request->http.params,
OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID,
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);
ogs_expect_or_return_val(v, NULL);
cJSON_Delete(item);
item = cJSON_CreateStringArray(
(const char * const*)discovery_option->service_names,
discovery_option->num_of_service_names);
ogs_expect_or_return_val(item, NULL);
ogs_sbi_header_set(
request->http.params, OGS_SBI_PARAM_SERVICE_NAMES, v);
ogs_free(v);
v = cJSON_Print(item);
ogs_expect_or_return_val(v, NULL);
cJSON_Delete(item);
ogs_sbi_header_set(
request->http.params, OGS_SBI_PARAM_SERVICE_NAMES, v);
ogs_free(v);
}
}
/* URL Query Paramemter */
@ -476,6 +481,8 @@ int ogs_sbi_parse_request(
{
int rv;
ogs_hash_index_t *hi;
ogs_sbi_discovery_option_t *discovery_option = NULL;
bool discovery_option_presence = false;
ogs_assert(request);
ogs_assert(message);
@ -486,6 +493,10 @@ int ogs_sbi_parse_request(
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);
hi; hi = ogs_hash_next(hi)) {
/* Discovery Parameter */
@ -501,12 +512,14 @@ int ogs_sbi_parse_request(
/* Discovery Option Parameter */
} else if (!strcmp(ogs_hash_this_key(hi),
OGS_SBI_PARAM_TARGET_NF_INSTANCE_ID)) {
message->param.discovery_option.target_nf_instance_id =
ogs_hash_this_val(hi);
discovery_option_presence = true;
ogs_sbi_discovery_option_set_target_nf_instance_id(
discovery_option, ogs_hash_this_val(hi));
} else if (!strcmp(ogs_hash_this_key(hi),
OGS_SBI_PARAM_REQUESTER_NF_INSTANCE_ID)) {
message->param.discovery_option.requester_nf_instance_id =
ogs_hash_this_val(hi);
discovery_option_presence = true;
ogs_sbi_discovery_option_set_requester_nf_instance_id(
discovery_option, ogs_hash_this_val(hi));
} else if (!strcmp(ogs_hash_this_key(hi),
OGS_SBI_PARAM_SERVICE_NAMES)) {
char *v = NULL;
@ -516,13 +529,14 @@ int ogs_sbi_parse_request(
if (v) {
array = cJSON_Parse(v);
if (cJSON_IsArray(array)) {
discovery_option_presence = true;
cJSON_ArrayForEach(item, array) {
char *names = cJSON_GetStringValue(item);
if (names) {
message->param.discovery_option.service_names[
message->param.discovery_option.
num_of_service_names++] = ogs_strdup(names);
}
if (names)
ogs_sbi_discovery_option_add_service_names(
discovery_option, names);
}
}
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);
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;
/* Discovery Option Parameter */
ogs_sbi_discovery_option_t discovery_option;
ogs_sbi_discovery_option_t *discovery_option;
/* URL Query Parameter */
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,
ogs_sbi_discovery_option_t *discovery_option)
{
int i;
ogs_sbi_message_t message;
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.requester_nf_type = requester_nf_type;
if (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];;
}
}
message.param.discovery_option = discovery_option;
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_response_t *response = NULL;
ogs_sbi_nf_instance_t *nf_instance = NULL;
ogs_sbi_discovery_option_t *discovery_option = NULL;
OpenAPI_search_result_t *SearchResult = NULL;
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.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));
ogs_assert(SearchResult);
@ -452,14 +438,36 @@ bool nrf_nnrf_handle_nf_discover(
SearchResult->nf_instances = OpenAPI_list_create();
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;
ogs_list_for_each(&ogs_sbi_self()->nf_instance_list, nf_instance) {
if (nf_instance->nf_type != recvmsg->param.target_nf_type)
continue;
if (recvmsg->param.discovery_option.target_nf_instance_id &&
strcmp(nf_instance->id,
recvmsg->param.discovery_option.target_nf_instance_id) != 0)
continue;
if (discovery_option) {
if (discovery_option->target_nf_instance_id &&
strcmp(nf_instance->id,
discovery_option->target_nf_instance_id) != 0)
continue;
}
if (!recvmsg->param.limit ||
(recvmsg->param.limit && i < recvmsg->param.limit)) {