[SBI] Send NF discovery query with service-names delimited with comma

OpenAPI specification for sending NF discovery query with
"service-names" parameter is defined as folowing:

- name: service-names
  ...
  style: form
  explode: false

According to OpenAPI specification, this means array items
should be delimited with a comma character (example: /users?id=3,4,5).
This commit is contained in:
Bostjan Meglic 2022-09-01 11:15:42 +00:00 committed by Sukchan Lee
parent d87d61e851
commit 9c84570a48
1 changed files with 23 additions and 18 deletions

View File

@ -305,17 +305,19 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message)
}
if (ogs_sbi_self()->discovery_config.no_service_names == false &&
discovery_option->num_of_service_names) {
/* send array items separated by a comma */
char *v = NULL;
cJSON *item = NULL;
item = cJSON_CreateStringArray(
(const char * const*)discovery_option->service_names,
discovery_option->num_of_service_names);
ogs_expect_or_return_val(item, NULL);
v = cJSON_Print(item);
v = ogs_strdup(discovery_option->service_names[0]);
ogs_expect_or_return_val(v, NULL);
cJSON_Delete(item);
if (discovery_option->num_of_service_names > 1)
{
int i;
for (i = 1; i < discovery_option->num_of_service_names; i++)
v = ogs_mstrcatf(v, ",%s", discovery_option->service_names[i]);
}
ogs_sbi_header_set(
request->http.params, OGS_SBI_PARAM_SERVICE_NAMES, v);
@ -523,23 +525,26 @@ int ogs_sbi_parse_request(
} else if (!strcmp(ogs_hash_this_key(hi),
OGS_SBI_PARAM_SERVICE_NAMES)) {
char *v = NULL;
cJSON *array = NULL, *item = NULL;
char *service_names;
char *token;
char *saveptr;
v = ogs_hash_this_val(hi);
if (v) {
array = cJSON_Parse(v);
if (cJSON_IsArray(array)) {
service_names = ogs_strdup(v);
ogs_assert(service_names);
token = ogs_strtok_r(service_names, ",", &saveptr);
while (token != NULL)
{
discovery_option_presence = true;
ogs_sbi_discovery_option_add_service_names(
discovery_option, token);
cJSON_ArrayForEach(item, array) {
char *names = cJSON_GetStringValue(item);
if (names)
ogs_sbi_discovery_option_add_service_names(
discovery_option, names);
}
token = ogs_strtok_r(NULL, ",", &saveptr);
}
cJSON_Delete(array);
ogs_free(service_names);
}
/* URL Query Parameter */