Refine code of discovery option param (#1671)
This commit is contained in:
parent
4e8492e878
commit
9b762158a6
|
@ -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)) {
|
||||
/*
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)) {
|
||||
|
|
Loading…
Reference in New Issue