mirror of
				https://github.com/open5gs/open5gs.git
				synced 2025-11-04 05:53:18 +00:00 
			
		
		
		
	[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:
		
				
					committed by
					
						
						Sukchan Lee
					
				
			
			
				
	
			
			
			
						parent
						
							d87d61e851
						
					
				
				
					commit
					9c84570a48
				
			@@ -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;
 | 
			
		||||
 | 
			
		||||
                    cJSON_ArrayForEach(item, array) {
 | 
			
		||||
                        char *names = cJSON_GetStringValue(item);
 | 
			
		||||
                        if (names)
 | 
			
		||||
                    ogs_sbi_discovery_option_add_service_names(
 | 
			
		||||
                                    discovery_option, names);
 | 
			
		||||
                        discovery_option, token);
 | 
			
		||||
 | 
			
		||||
                    token = ogs_strtok_r(NULL, ",", &saveptr);
 | 
			
		||||
                }
 | 
			
		||||
                }
 | 
			
		||||
                cJSON_Delete(array);
 | 
			
		||||
 | 
			
		||||
                ogs_free(service_names);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        /* URL Query Parameter */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user