mirror of
https://github.com/open5gs/open5gs.git
synced 2025-10-22 23:31:57 +00:00
[UDM][UDR] Add support for dataset-names resource (#4105)
* Enable datasets in UDM * Remove developer comment
This commit is contained in:
@@ -66,6 +66,8 @@ void ogs_sbi_message_free(ogs_sbi_message_t *message)
|
||||
/* Query parameters */
|
||||
for (i = 0; i < message->param.num_of_fields; i++)
|
||||
ogs_free(message->param.fields[i]);
|
||||
for (i = 0; i < message->param.num_of_dataset_names; i++)
|
||||
ogs_free(message->param.dataset_names[i]);
|
||||
|
||||
/* JSON Data */
|
||||
if (message->NFProfile)
|
||||
@@ -113,6 +115,8 @@ void ogs_sbi_message_free(ogs_sbi_message_t *message)
|
||||
message->Amf3GppAccessRegistrationModification);
|
||||
if (message->SmfRegistration)
|
||||
OpenAPI_smf_registration_free(message->SmfRegistration);
|
||||
if (message->ProvisionedDataSets)
|
||||
OpenAPI_provisioned_data_sets_free(message->ProvisionedDataSets);
|
||||
if (message->Nssai)
|
||||
OpenAPI_nssai_free(message->Nssai);
|
||||
if (message->AccessAndMobilitySubscriptionData)
|
||||
@@ -761,6 +765,25 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message)
|
||||
}
|
||||
|
||||
}
|
||||
if (message->param.num_of_dataset_names) {
|
||||
char *dataset_names;
|
||||
|
||||
dataset_names = ogs_strdup(message->param.dataset_names[0]);
|
||||
if (!dataset_names) {
|
||||
ogs_error("ogs_strdup() failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i = 1; i < message->param.num_of_dataset_names; i++)
|
||||
dataset_names = ogs_mstrcatf(
|
||||
dataset_names, ",%s", message->param.dataset_names[i]);
|
||||
|
||||
if (dataset_names) {
|
||||
ogs_sbi_header_set(request->http.params,
|
||||
OGS_SBI_PARAM_DATASET_NAMES, dataset_names);
|
||||
ogs_free(dataset_names);
|
||||
}
|
||||
}
|
||||
if (message->param.ipv4addr) {
|
||||
ogs_sbi_header_set(request->http.params,
|
||||
OGS_SBI_PARAM_IPV4ADDR, message->param.ipv4addr);
|
||||
@@ -1172,6 +1195,34 @@ int ogs_sbi_parse_request(
|
||||
}
|
||||
}
|
||||
|
||||
ogs_free(v);
|
||||
} else if (!strcmp(ogs_hash_this_key(hi),
|
||||
OGS_SBI_PARAM_DATASET_NAMES)) {
|
||||
char *_v = ogs_hash_this_val(hi), *v = NULL;
|
||||
char *token = NULL;
|
||||
char *saveptr = NULL;
|
||||
|
||||
v = ogs_strdup(_v);
|
||||
ogs_assert(v);
|
||||
|
||||
token = ogs_strtok_r(v, ",", &saveptr);
|
||||
while (token != NULL) {
|
||||
if (message->param.num_of_fields <
|
||||
OGS_SBI_MAX_NUM_OF_DATASETNAMES) {
|
||||
message->param.dataset_names
|
||||
[message->param.num_of_dataset_names] =
|
||||
ogs_strdup(token);
|
||||
ogs_assert(message->param.dataset_names
|
||||
[message->param.num_of_dataset_names]);
|
||||
message->param.num_of_dataset_names++;
|
||||
token = ogs_strtok_r(NULL, ",", &saveptr);
|
||||
} else {
|
||||
ogs_error("Datasetnames in query exceeds "
|
||||
"MAX_NUM_OF_DATASETNAMES");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ogs_free(v);
|
||||
} else if (!strcmp(ogs_hash_this_key(hi), OGS_SBI_PARAM_IPV4ADDR)) {
|
||||
message->param.ipv4addr = ogs_hash_this_val(hi);
|
||||
@@ -1480,6 +1531,10 @@ static char *build_json(ogs_sbi_message_t *message)
|
||||
} else if (message->SmfRegistration) {
|
||||
item = OpenAPI_smf_registration_convertToJSON(message->SmfRegistration);
|
||||
ogs_assert(item);
|
||||
} else if (message->ProvisionedDataSets) {
|
||||
item = OpenAPI_provisioned_data_sets_convertToJSON(
|
||||
message->ProvisionedDataSets);
|
||||
ogs_assert(item);
|
||||
} else if (message->Nssai) {
|
||||
item = OpenAPI_nssai_convertToJSON(message->Nssai);
|
||||
ogs_assert(item);
|
||||
@@ -2182,6 +2237,20 @@ static int parse_json(ogs_sbi_message_t *message,
|
||||
DEFAULT
|
||||
SWITCH(message->h.resource.component[3])
|
||||
CASE(OGS_SBI_RESOURCE_NAME_PROVISIONED_DATA)
|
||||
if (!message->h.resource.component[4]) {
|
||||
if (message->res_status < 300) {
|
||||
message->ProvisionedDataSets =
|
||||
OpenAPI_provisioned_data_sets_parseFromJSON(item);
|
||||
if (!message->ProvisionedDataSets) {
|
||||
rv = OGS_ERROR;
|
||||
ogs_error("JSON parse error");
|
||||
}
|
||||
} else {
|
||||
ogs_error("HTTP ERROR Status : %d",
|
||||
message->res_status);
|
||||
}
|
||||
break;
|
||||
}
|
||||
SWITCH(message->h.resource.component[4])
|
||||
CASE(OGS_SBI_RESOURCE_NAME_AM_DATA)
|
||||
if (message->res_status < 300) {
|
||||
|
@@ -354,6 +354,7 @@ extern "C" {
|
||||
#define OGS_SBI_PARAM_SLICE_INFO_REQUEST_FOR_PDU_SESSION \
|
||||
"slice-info-request-for-pdu-session"
|
||||
#define OGS_SBI_PARAM_FIELDS "fields"
|
||||
#define OGS_SBI_PARAM_DATASET_NAMES "dataset-names"
|
||||
#define OGS_SBI_PARAM_IPV4ADDR "ipv4Addr"
|
||||
#define OGS_SBI_PARAM_IPV6PREFIX "ipv6Prefix"
|
||||
#define OGS_SBI_PARAM_HOME_PLMN_ID "home-plmn-id"
|
||||
@@ -369,6 +370,11 @@ extern "C" {
|
||||
#define OGS_SBI_PARAM_FIELDS_NSSAI "nssai"
|
||||
#define OGS_SBI_MAX_NUM_OF_FIELDS 8
|
||||
|
||||
#define OGS_SBI_PARAM_DATASET_NAME_AM "AM"
|
||||
#define OGS_SBI_PARAM_DATASET_NAME_SMF_SEL "SMF_SEL"
|
||||
#define OGS_SBI_PARAM_DATASET_NAME_SM "SM"
|
||||
#define OGS_SBI_MAX_NUM_OF_DATASETNAMES 8
|
||||
|
||||
#define OGS_SBI_CONTENT_JSON_TYPE \
|
||||
OGS_SBI_APPLICATION_TYPE "/" OGS_SBI_APPLICATION_JSON_TYPE
|
||||
#define OGS_SBI_CONTENT_PROBLEM_TYPE \
|
||||
@@ -509,6 +515,8 @@ typedef struct ogs_sbi_message_s {
|
||||
char *dnn;
|
||||
int num_of_fields;
|
||||
char *fields[OGS_SBI_MAX_NUM_OF_FIELDS];
|
||||
int num_of_dataset_names;
|
||||
char *dataset_names[OGS_SBI_MAX_NUM_OF_DATASETNAMES];
|
||||
|
||||
/* Shared memory */
|
||||
bool plmn_id_presence;
|
||||
@@ -552,6 +560,7 @@ typedef struct ogs_sbi_message_s {
|
||||
OpenAPI_amf3_gpp_access_registration_t *Amf3GppAccessRegistration;
|
||||
OpenAPI_amf3_gpp_access_registration_modification_t
|
||||
*Amf3GppAccessRegistrationModification;
|
||||
OpenAPI_provisioned_data_sets_t *ProvisionedDataSets;
|
||||
OpenAPI_nssai_t *Nssai;
|
||||
OpenAPI_access_and_mobility_subscription_data_t
|
||||
*AccessAndMobilitySubscriptionData;
|
||||
|
@@ -100,6 +100,7 @@
|
||||
#include "model/ue_reg_status_update_req_data.h"
|
||||
#include "model/ue_reg_status_update_rsp_data.h"
|
||||
#include "model/status_notification.h"
|
||||
#include "model/provisioned_data_sets.h"
|
||||
|
||||
#include "custom/links.h"
|
||||
|
||||
|
@@ -5,15 +5,15 @@
|
||||
#include "sm_subs_data.h"
|
||||
|
||||
OpenAPI_sm_subs_data_t *OpenAPI_sm_subs_data_create(
|
||||
OpenAPI_list_t *shared_sm_subs_data_ids,
|
||||
OpenAPI_list_t *individual_sm_subs_data
|
||||
OpenAPI_list_t *session_management_subscription_data_list,
|
||||
OpenAPI_extended_sm_subs_data_t *extended_sm_subs_data
|
||||
)
|
||||
{
|
||||
OpenAPI_sm_subs_data_t *sm_subs_data_local_var = ogs_malloc(sizeof(OpenAPI_sm_subs_data_t));
|
||||
ogs_assert(sm_subs_data_local_var);
|
||||
|
||||
sm_subs_data_local_var->shared_sm_subs_data_ids = shared_sm_subs_data_ids;
|
||||
sm_subs_data_local_var->individual_sm_subs_data = individual_sm_subs_data;
|
||||
sm_subs_data_local_var->session_management_subscription_data_list = session_management_subscription_data_list;
|
||||
sm_subs_data_local_var->extended_sm_subs_data = extended_sm_subs_data;
|
||||
|
||||
return sm_subs_data_local_var;
|
||||
}
|
||||
@@ -25,19 +25,16 @@ void OpenAPI_sm_subs_data_free(OpenAPI_sm_subs_data_t *sm_subs_data)
|
||||
if (NULL == sm_subs_data) {
|
||||
return;
|
||||
}
|
||||
if (sm_subs_data->shared_sm_subs_data_ids) {
|
||||
OpenAPI_list_for_each(sm_subs_data->shared_sm_subs_data_ids, node) {
|
||||
ogs_free(node->data);
|
||||
}
|
||||
OpenAPI_list_free(sm_subs_data->shared_sm_subs_data_ids);
|
||||
sm_subs_data->shared_sm_subs_data_ids = NULL;
|
||||
}
|
||||
if (sm_subs_data->individual_sm_subs_data) {
|
||||
OpenAPI_list_for_each(sm_subs_data->individual_sm_subs_data, node) {
|
||||
if (sm_subs_data->session_management_subscription_data_list) {
|
||||
OpenAPI_list_for_each(sm_subs_data->session_management_subscription_data_list, node) {
|
||||
OpenAPI_session_management_subscription_data_free(node->data);
|
||||
}
|
||||
OpenAPI_list_free(sm_subs_data->individual_sm_subs_data);
|
||||
sm_subs_data->individual_sm_subs_data = NULL;
|
||||
OpenAPI_list_free(sm_subs_data->session_management_subscription_data_list);
|
||||
sm_subs_data->session_management_subscription_data_list = NULL;
|
||||
}
|
||||
if (sm_subs_data->extended_sm_subs_data) {
|
||||
OpenAPI_extended_sm_subs_data_free(sm_subs_data->extended_sm_subs_data);
|
||||
sm_subs_data->extended_sm_subs_data = NULL;
|
||||
}
|
||||
ogs_free(sm_subs_data);
|
||||
}
|
||||
@@ -53,35 +50,32 @@ cJSON *OpenAPI_sm_subs_data_convertToJSON(OpenAPI_sm_subs_data_t *sm_subs_data)
|
||||
}
|
||||
|
||||
item = cJSON_CreateObject();
|
||||
if (!sm_subs_data->shared_sm_subs_data_ids) {
|
||||
ogs_error("OpenAPI_sm_subs_data_convertToJSON() failed [shared_sm_subs_data_ids]");
|
||||
return NULL;
|
||||
}
|
||||
cJSON *shared_sm_subs_data_idsList = cJSON_AddArrayToObject(item, "sharedSmSubsDataIds");
|
||||
if (shared_sm_subs_data_idsList == NULL) {
|
||||
ogs_error("OpenAPI_sm_subs_data_convertToJSON() failed [shared_sm_subs_data_ids]");
|
||||
if (sm_subs_data->session_management_subscription_data_list) {
|
||||
cJSON *session_management_subscription_data_listList = cJSON_AddArrayToObject(item, "SessionManagementSubscriptionDataList");
|
||||
if (session_management_subscription_data_listList == NULL) {
|
||||
ogs_error("OpenAPI_sm_subs_data_convertToJSON() failed [session_management_subscription_data_list]");
|
||||
goto end;
|
||||
}
|
||||
OpenAPI_list_for_each(sm_subs_data->shared_sm_subs_data_ids, node) {
|
||||
if (cJSON_AddStringToObject(shared_sm_subs_data_idsList, "", (char*)node->data) == NULL) {
|
||||
ogs_error("OpenAPI_sm_subs_data_convertToJSON() failed [shared_sm_subs_data_ids]");
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
if (sm_subs_data->individual_sm_subs_data) {
|
||||
cJSON *individual_sm_subs_dataList = cJSON_AddArrayToObject(item, "individualSmSubsData");
|
||||
if (individual_sm_subs_dataList == NULL) {
|
||||
ogs_error("OpenAPI_sm_subs_data_convertToJSON() failed [individual_sm_subs_data]");
|
||||
goto end;
|
||||
}
|
||||
OpenAPI_list_for_each(sm_subs_data->individual_sm_subs_data, node) {
|
||||
OpenAPI_list_for_each(sm_subs_data->session_management_subscription_data_list, node) {
|
||||
cJSON *itemLocal = OpenAPI_session_management_subscription_data_convertToJSON(node->data);
|
||||
if (itemLocal == NULL) {
|
||||
ogs_error("OpenAPI_sm_subs_data_convertToJSON() failed [individual_sm_subs_data]");
|
||||
ogs_error("OpenAPI_sm_subs_data_convertToJSON() failed [session_management_subscription_data_list]");
|
||||
goto end;
|
||||
}
|
||||
cJSON_AddItemToArray(individual_sm_subs_dataList, itemLocal);
|
||||
cJSON_AddItemToArray(session_management_subscription_data_listList, itemLocal);
|
||||
}
|
||||
}
|
||||
|
||||
if (sm_subs_data->extended_sm_subs_data) {
|
||||
cJSON *extended_sm_subs_data_local_JSON = OpenAPI_extended_sm_subs_data_convertToJSON(sm_subs_data->extended_sm_subs_data);
|
||||
if (extended_sm_subs_data_local_JSON == NULL) {
|
||||
ogs_error("OpenAPI_sm_subs_data_convertToJSON() failed [extended_sm_subs_data]");
|
||||
goto end;
|
||||
}
|
||||
cJSON_AddItemToObject(item, "ExtendedSmSubsData", extended_sm_subs_data_local_JSON);
|
||||
if (item->child == NULL) {
|
||||
ogs_error("OpenAPI_sm_subs_data_convertToJSON() failed [extended_sm_subs_data]");
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,77 +87,60 @@ OpenAPI_sm_subs_data_t *OpenAPI_sm_subs_data_parseFromJSON(cJSON *sm_subs_dataJS
|
||||
{
|
||||
OpenAPI_sm_subs_data_t *sm_subs_data_local_var = NULL;
|
||||
OpenAPI_lnode_t *node = NULL;
|
||||
cJSON *shared_sm_subs_data_ids = NULL;
|
||||
OpenAPI_list_t *shared_sm_subs_data_idsList = NULL;
|
||||
cJSON *individual_sm_subs_data = NULL;
|
||||
OpenAPI_list_t *individual_sm_subs_dataList = NULL;
|
||||
shared_sm_subs_data_ids = cJSON_GetObjectItemCaseSensitive(sm_subs_dataJSON, "sharedSmSubsDataIds");
|
||||
if (!shared_sm_subs_data_ids) {
|
||||
ogs_error("OpenAPI_sm_subs_data_parseFromJSON() failed [shared_sm_subs_data_ids]");
|
||||
cJSON *session_management_subscription_data_list = NULL;
|
||||
OpenAPI_list_t *session_management_subscription_data_listList = NULL;
|
||||
cJSON *extended_sm_subs_data = NULL;
|
||||
OpenAPI_extended_sm_subs_data_t *extended_sm_subs_data_local_nonprim = NULL;
|
||||
session_management_subscription_data_list = cJSON_GetObjectItemCaseSensitive(sm_subs_dataJSON, "SessionManagementSubscriptionDataList");
|
||||
if (session_management_subscription_data_list) {
|
||||
cJSON *session_management_subscription_data_list_local = NULL;
|
||||
if (!cJSON_IsArray(session_management_subscription_data_list)) {
|
||||
ogs_error("OpenAPI_sm_subs_data_parseFromJSON() failed [session_management_subscription_data_list]");
|
||||
goto end;
|
||||
}
|
||||
|
||||
session_management_subscription_data_listList = OpenAPI_list_create();
|
||||
|
||||
cJSON_ArrayForEach(session_management_subscription_data_list_local, session_management_subscription_data_list) {
|
||||
if (!cJSON_IsObject(session_management_subscription_data_list_local)) {
|
||||
ogs_error("OpenAPI_sm_subs_data_parseFromJSON() failed [session_management_subscription_data_list]");
|
||||
goto end;
|
||||
}
|
||||
OpenAPI_session_management_subscription_data_t *session_management_subscription_data_listItem = OpenAPI_session_management_subscription_data_parseFromJSON(session_management_subscription_data_list_local);
|
||||
if (!session_management_subscription_data_listItem) {
|
||||
ogs_error("No session_management_subscription_data_listItem");
|
||||
goto end;
|
||||
}
|
||||
OpenAPI_list_add(session_management_subscription_data_listList, session_management_subscription_data_listItem);
|
||||
}
|
||||
}
|
||||
|
||||
extended_sm_subs_data = cJSON_GetObjectItemCaseSensitive(sm_subs_dataJSON, "ExtendedSmSubsData");
|
||||
if (extended_sm_subs_data) {
|
||||
extended_sm_subs_data_local_nonprim = OpenAPI_extended_sm_subs_data_parseFromJSON(extended_sm_subs_data);
|
||||
if (!extended_sm_subs_data_local_nonprim) {
|
||||
ogs_error("OpenAPI_extended_sm_subs_data_parseFromJSON failed [extended_sm_subs_data]");
|
||||
goto end;
|
||||
}
|
||||
cJSON *shared_sm_subs_data_ids_local = NULL;
|
||||
if (!cJSON_IsArray(shared_sm_subs_data_ids)) {
|
||||
ogs_error("OpenAPI_sm_subs_data_parseFromJSON() failed [shared_sm_subs_data_ids]");
|
||||
goto end;
|
||||
}
|
||||
|
||||
shared_sm_subs_data_idsList = OpenAPI_list_create();
|
||||
|
||||
cJSON_ArrayForEach(shared_sm_subs_data_ids_local, shared_sm_subs_data_ids) {
|
||||
double *localDouble = NULL;
|
||||
int *localInt = NULL;
|
||||
if (!cJSON_IsString(shared_sm_subs_data_ids_local)) {
|
||||
ogs_error("OpenAPI_sm_subs_data_parseFromJSON() failed [shared_sm_subs_data_ids]");
|
||||
goto end;
|
||||
}
|
||||
OpenAPI_list_add(shared_sm_subs_data_idsList, ogs_strdup(shared_sm_subs_data_ids_local->valuestring));
|
||||
}
|
||||
|
||||
individual_sm_subs_data = cJSON_GetObjectItemCaseSensitive(sm_subs_dataJSON, "individualSmSubsData");
|
||||
if (individual_sm_subs_data) {
|
||||
cJSON *individual_sm_subs_data_local = NULL;
|
||||
if (!cJSON_IsArray(individual_sm_subs_data)) {
|
||||
ogs_error("OpenAPI_sm_subs_data_parseFromJSON() failed [individual_sm_subs_data]");
|
||||
goto end;
|
||||
}
|
||||
|
||||
individual_sm_subs_dataList = OpenAPI_list_create();
|
||||
|
||||
cJSON_ArrayForEach(individual_sm_subs_data_local, individual_sm_subs_data) {
|
||||
if (!cJSON_IsObject(individual_sm_subs_data_local)) {
|
||||
ogs_error("OpenAPI_sm_subs_data_parseFromJSON() failed [individual_sm_subs_data]");
|
||||
goto end;
|
||||
}
|
||||
OpenAPI_session_management_subscription_data_t *individual_sm_subs_dataItem = OpenAPI_session_management_subscription_data_parseFromJSON(individual_sm_subs_data_local);
|
||||
if (!individual_sm_subs_dataItem) {
|
||||
ogs_error("No individual_sm_subs_dataItem");
|
||||
goto end;
|
||||
}
|
||||
OpenAPI_list_add(individual_sm_subs_dataList, individual_sm_subs_dataItem);
|
||||
}
|
||||
}
|
||||
|
||||
sm_subs_data_local_var = OpenAPI_sm_subs_data_create (
|
||||
shared_sm_subs_data_idsList,
|
||||
individual_sm_subs_data ? individual_sm_subs_dataList : NULL
|
||||
session_management_subscription_data_list ? session_management_subscription_data_listList : NULL,
|
||||
extended_sm_subs_data ? extended_sm_subs_data_local_nonprim : NULL
|
||||
);
|
||||
|
||||
return sm_subs_data_local_var;
|
||||
end:
|
||||
if (shared_sm_subs_data_idsList) {
|
||||
OpenAPI_list_for_each(shared_sm_subs_data_idsList, node) {
|
||||
ogs_free(node->data);
|
||||
}
|
||||
OpenAPI_list_free(shared_sm_subs_data_idsList);
|
||||
shared_sm_subs_data_idsList = NULL;
|
||||
}
|
||||
if (individual_sm_subs_dataList) {
|
||||
OpenAPI_list_for_each(individual_sm_subs_dataList, node) {
|
||||
if (session_management_subscription_data_listList) {
|
||||
OpenAPI_list_for_each(session_management_subscription_data_listList, node) {
|
||||
OpenAPI_session_management_subscription_data_free(node->data);
|
||||
}
|
||||
OpenAPI_list_free(individual_sm_subs_dataList);
|
||||
individual_sm_subs_dataList = NULL;
|
||||
OpenAPI_list_free(session_management_subscription_data_listList);
|
||||
session_management_subscription_data_listList = NULL;
|
||||
}
|
||||
if (extended_sm_subs_data_local_nonprim) {
|
||||
OpenAPI_extended_sm_subs_data_free(extended_sm_subs_data_local_nonprim);
|
||||
extended_sm_subs_data_local_nonprim = NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@@ -21,13 +21,13 @@ extern "C" {
|
||||
|
||||
typedef struct OpenAPI_sm_subs_data_s OpenAPI_sm_subs_data_t;
|
||||
typedef struct OpenAPI_sm_subs_data_s {
|
||||
OpenAPI_list_t *shared_sm_subs_data_ids;
|
||||
OpenAPI_list_t *individual_sm_subs_data;
|
||||
OpenAPI_list_t *session_management_subscription_data_list;
|
||||
struct OpenAPI_extended_sm_subs_data_s *extended_sm_subs_data;
|
||||
} OpenAPI_sm_subs_data_t;
|
||||
|
||||
OpenAPI_sm_subs_data_t *OpenAPI_sm_subs_data_create(
|
||||
OpenAPI_list_t *shared_sm_subs_data_ids,
|
||||
OpenAPI_list_t *individual_sm_subs_data
|
||||
OpenAPI_list_t *session_management_subscription_data_list,
|
||||
OpenAPI_extended_sm_subs_data_t *extended_sm_subs_data
|
||||
);
|
||||
void OpenAPI_sm_subs_data_free(OpenAPI_sm_subs_data_t *sm_subs_data);
|
||||
OpenAPI_sm_subs_data_t *OpenAPI_sm_subs_data_parseFromJSON(cJSON *sm_subs_dataJSON);
|
||||
|
@@ -3351,12 +3351,15 @@ components:
|
||||
$ref: 'TS29571_CommonData.yaml#/components/schemas/Gpsi'
|
||||
|
||||
SmSubsData:
|
||||
oneOf:
|
||||
- type: array
|
||||
type: object
|
||||
properties:
|
||||
SessionManagementSubscriptionDataList:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/SessionManagementSubscriptionData'
|
||||
minItems: 1
|
||||
- $ref: '#/components/schemas/ExtendedSmSubsData'
|
||||
minItems: 1
|
||||
ExtendedSmSubsData:
|
||||
$ref: '#/components/schemas/ExtendedSmSubsData'
|
||||
|
||||
ExtendedSmSubsData:
|
||||
description: Contains identifiers of shared Session Management Subscription Data and optionally individual Session Management Subscription Data.
|
||||
|
@@ -221,7 +221,15 @@ ogs_sbi_request_t *udm_nudr_dr_build_query_subscription_provisioned(
|
||||
(char *)ogs_plmn_id_to_string(&udm_ue->guami.plmn_id, buf);
|
||||
sendmsg.h.resource.component[3] =
|
||||
(char *)OGS_SBI_RESOURCE_NAME_PROVISIONED_DATA;
|
||||
sendmsg.h.resource.component[4] = recvmsg->h.resource.component[1];
|
||||
if (recvmsg->h.resource.component[1]) {
|
||||
sendmsg.h.resource.component[4] = recvmsg->h.resource.component[1];
|
||||
} else if (recvmsg->param.num_of_dataset_names) {
|
||||
int i;
|
||||
for (i = 0; i < recvmsg->param.num_of_dataset_names; i++) {
|
||||
sendmsg.param.dataset_names[i] = recvmsg->param.dataset_names[i];
|
||||
sendmsg.param.num_of_dataset_names++;
|
||||
}
|
||||
}
|
||||
|
||||
SWITCH(recvmsg->h.resource.component[1])
|
||||
CASE(OGS_SBI_RESOURCE_NAME_SM_DATA)
|
||||
|
@@ -622,6 +622,37 @@ bool udm_nudr_dr_handle_subscription_provisioned(
|
||||
|
||||
ogs_assert(recvmsg);
|
||||
|
||||
if (state == UDM_SBI_UE_PROVISIONED_DATASETS) {
|
||||
OpenAPI_provisioned_data_sets_t *ProvisionedDataSets;
|
||||
|
||||
ProvisionedDataSets = recvmsg->ProvisionedDataSets;
|
||||
if (!ProvisionedDataSets) {
|
||||
ogs_error("[%s] No ProvisionedDataSets",
|
||||
udm_ue->supi);
|
||||
ogs_assert(true ==
|
||||
ogs_sbi_server_send_error(
|
||||
stream, OGS_SBI_HTTP_STATUS_BAD_REQUEST,
|
||||
recvmsg, "No ProvisionedDataSets",
|
||||
udm_ue->supi, NULL));
|
||||
return false;
|
||||
}
|
||||
|
||||
memset(&sendmsg, 0, sizeof(sendmsg));
|
||||
|
||||
sendmsg.ProvisionedDataSets =
|
||||
OpenAPI_provisioned_data_sets_copy(
|
||||
sendmsg.ProvisionedDataSets,
|
||||
recvmsg->ProvisionedDataSets);
|
||||
|
||||
response = ogs_sbi_build_response(&sendmsg, recvmsg->res_status);
|
||||
ogs_assert(response);
|
||||
ogs_assert(true == ogs_sbi_server_send_response(stream, response));
|
||||
|
||||
OpenAPI_provisioned_data_sets_free(sendmsg.ProvisionedDataSets);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
SWITCH(recvmsg->h.resource.component[4])
|
||||
CASE(OGS_SBI_RESOURCE_NAME_AM_DATA)
|
||||
OpenAPI_access_and_mobility_subscription_data_t
|
||||
|
@@ -34,6 +34,7 @@ bool udm_sbi_send_request(
|
||||
|
||||
#define UDM_SBI_NO_STATE 0
|
||||
#define UDM_SBI_UE_PROVISIONED_NSSAI_ONLY 1
|
||||
#define UDM_SBI_UE_PROVISIONED_DATASETS 2
|
||||
|
||||
int udm_ue_sbi_discover_and_send(
|
||||
ogs_sbi_service_type_e service_type,
|
||||
|
@@ -153,24 +153,26 @@ void udm_state_operational(ogs_fsm_t *s, udm_event_t *e)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!message.h.resource.component[1]) {
|
||||
ogs_error("Invalid resource name [%s]", message.h.method);
|
||||
ogs_assert(true ==
|
||||
ogs_sbi_server_send_error(stream,
|
||||
OGS_SBI_HTTP_STATUS_BAD_REQUEST,
|
||||
&message, "Invalid resource name", message.h.method,
|
||||
NULL));
|
||||
break;
|
||||
}
|
||||
|
||||
SWITCH(message.h.resource.component[1])
|
||||
CASE(OGS_SBI_RESOURCE_NAME_AUTH_EVENTS)
|
||||
if (message.h.resource.component[2]) {
|
||||
udm_ue = udm_ue_find_by_ctx_id(
|
||||
message.h.resource.component[2]);
|
||||
if (!message.param.num_of_dataset_names) {
|
||||
if (!message.h.resource.component[1]) {
|
||||
ogs_error("Invalid resource name [%s]", message.h.method);
|
||||
ogs_assert(true ==
|
||||
ogs_sbi_server_send_error(stream,
|
||||
OGS_SBI_HTTP_STATUS_BAD_REQUEST,
|
||||
&message, "Invalid resource name", message.h.method,
|
||||
NULL));
|
||||
break;
|
||||
}
|
||||
DEFAULT
|
||||
END
|
||||
|
||||
SWITCH(message.h.resource.component[1])
|
||||
CASE(OGS_SBI_RESOURCE_NAME_AUTH_EVENTS)
|
||||
if (message.h.resource.component[2]) {
|
||||
udm_ue = udm_ue_find_by_ctx_id(
|
||||
message.h.resource.component[2]);
|
||||
}
|
||||
DEFAULT
|
||||
END
|
||||
}
|
||||
|
||||
if (!udm_ue) {
|
||||
udm_ue = udm_ue_find_by_suci_or_supi(
|
||||
|
@@ -189,6 +189,17 @@ void udm_ue_state_operational(ogs_fsm_t *s, udm_event_t *e)
|
||||
CASE(OGS_SBI_SERVICE_NAME_NUDM_SDM)
|
||||
SWITCH(message->h.method)
|
||||
CASE(OGS_SBI_HTTP_METHOD_GET)
|
||||
if (message->param.num_of_dataset_names &&
|
||||
!message->h.resource.component[1]) {
|
||||
r = udm_ue_sbi_discover_and_send(
|
||||
OGS_SBI_SERVICE_TYPE_NUDR_DR, NULL,
|
||||
udm_nudr_dr_build_query_subscription_provisioned,
|
||||
udm_ue, stream, UDM_SBI_UE_PROVISIONED_DATASETS,
|
||||
message);
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
break;
|
||||
}
|
||||
SWITCH(message->h.resource.component[1])
|
||||
CASE(OGS_SBI_RESOURCE_NAME_AM_DATA)
|
||||
CASE(OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA)
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user