2020-06-04 18:12:05 +00:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
|
|
|
|
*
|
|
|
|
* This file is part of Open5GS.
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "nudr-build.h"
|
|
|
|
|
2020-06-22 03:07:14 +00:00
|
|
|
ogs_sbi_request_t *udm_nudr_dr_build_authentication_subscription(
|
2020-06-17 05:22:28 +00:00
|
|
|
udm_ue_t *udm_ue, void *data)
|
2020-06-04 18:12:05 +00:00
|
|
|
{
|
|
|
|
ogs_sbi_message_t message;
|
|
|
|
ogs_sbi_request_t *request = NULL;
|
|
|
|
|
2020-06-22 03:07:14 +00:00
|
|
|
OpenAPI_list_t *PatchItemList = NULL;
|
2022-01-03 23:29:18 +00:00
|
|
|
OpenAPI_patch_item_t item, *pitem = NULL;
|
|
|
|
OpenAPI_lnode_t *node = NULL;
|
2020-06-22 03:07:14 +00:00
|
|
|
uint8_t *sqn = data;
|
|
|
|
char sqn_string[OGS_KEYSTRLEN(OGS_SQN_LEN)];
|
|
|
|
|
2020-06-04 18:12:05 +00:00
|
|
|
ogs_assert(udm_ue);
|
|
|
|
|
|
|
|
memset(&message, 0, sizeof(message));
|
|
|
|
message.h.service.name = (char *)OGS_SBI_SERVICE_NAME_NUDR_DR;
|
2020-06-17 05:22:28 +00:00
|
|
|
message.h.api.version = (char *)OGS_SBI_API_V1;
|
2020-06-04 18:12:05 +00:00
|
|
|
message.h.resource.component[0] =
|
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_SUBSCRIPTION_DATA;
|
|
|
|
message.h.resource.component[1] = udm_ue->supi;
|
|
|
|
message.h.resource.component[2] =
|
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_AUTHENTICATION_DATA;
|
|
|
|
message.h.resource.component[3] =
|
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_AUTHENTICATION_SUBSCRIPTION;
|
|
|
|
|
2020-06-22 03:07:14 +00:00
|
|
|
if (!sqn) {
|
|
|
|
message.h.method = (char *)OGS_SBI_HTTP_METHOD_GET;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
message.h.method = (char *)OGS_SBI_HTTP_METHOD_PATCH;
|
|
|
|
message.http.content_type = (char *)OGS_SBI_CONTENT_PATCH_TYPE;
|
|
|
|
|
|
|
|
PatchItemList = OpenAPI_list_create();
|
|
|
|
ogs_assert(PatchItemList);
|
|
|
|
|
|
|
|
ogs_hex_to_ascii(sqn, OGS_SQN_LEN, sqn_string, sizeof(sqn_string));
|
|
|
|
|
|
|
|
memset(&item, 0, sizeof(item));
|
|
|
|
item.op = OpenAPI_patch_operation_replace;
|
|
|
|
item.path = (char *)"/sequenceNumber/sqn";
|
2021-07-12 08:30:45 +00:00
|
|
|
item.value = OpenAPI_any_type_create_string(sqn_string);
|
|
|
|
ogs_assert(item.value);
|
2020-06-22 03:07:14 +00:00
|
|
|
|
|
|
|
OpenAPI_list_add(PatchItemList, &item);
|
|
|
|
|
|
|
|
message.PatchItemList = PatchItemList;
|
|
|
|
}
|
|
|
|
|
2020-06-04 18:12:05 +00:00
|
|
|
request = ogs_sbi_build_request(&message);
|
|
|
|
ogs_assert(request);
|
|
|
|
|
2022-01-03 23:29:18 +00:00
|
|
|
if (PatchItemList) {
|
|
|
|
OpenAPI_list_for_each(PatchItemList, node) {
|
|
|
|
pitem = node->data;
|
|
|
|
if (pitem)
|
|
|
|
OpenAPI_any_type_free(pitem->value);
|
|
|
|
}
|
2020-06-22 03:07:14 +00:00
|
|
|
OpenAPI_list_free(PatchItemList);
|
2022-01-03 23:29:18 +00:00
|
|
|
}
|
2020-06-22 03:07:14 +00:00
|
|
|
|
2020-06-04 18:12:05 +00:00
|
|
|
return request;
|
|
|
|
}
|
|
|
|
|
2020-06-22 03:07:14 +00:00
|
|
|
ogs_sbi_request_t *udm_nudr_dr_build_update_authentication_status(
|
2020-06-17 05:22:28 +00:00
|
|
|
udm_ue_t *udm_ue, void *data)
|
2020-06-04 18:12:05 +00:00
|
|
|
{
|
|
|
|
ogs_sbi_message_t message;
|
|
|
|
ogs_sbi_request_t *request = NULL;
|
|
|
|
|
|
|
|
ogs_assert(udm_ue);
|
2020-06-17 05:22:28 +00:00
|
|
|
ogs_assert(udm_ue->auth_event);
|
2020-06-04 18:12:05 +00:00
|
|
|
|
|
|
|
memset(&message, 0, sizeof(message));
|
|
|
|
message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT;
|
|
|
|
message.h.service.name = (char *)OGS_SBI_SERVICE_NAME_NUDR_DR;
|
2020-06-17 05:22:28 +00:00
|
|
|
message.h.api.version = (char *)OGS_SBI_API_V1;
|
2020-06-04 18:12:05 +00:00
|
|
|
message.h.resource.component[0] =
|
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_SUBSCRIPTION_DATA;
|
|
|
|
message.h.resource.component[1] = udm_ue->supi;
|
|
|
|
message.h.resource.component[2] =
|
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_AUTHENTICATION_DATA;
|
|
|
|
message.h.resource.component[3] =
|
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_AUTHENTICATION_STATUS;
|
|
|
|
|
2020-06-17 05:22:28 +00:00
|
|
|
message.AuthEvent = OpenAPI_auth_event_copy(
|
|
|
|
message.AuthEvent, udm_ue->auth_event);
|
2020-06-04 18:12:05 +00:00
|
|
|
|
2020-06-17 05:22:28 +00:00
|
|
|
request = ogs_sbi_build_request(&message);
|
|
|
|
ogs_assert(request);
|
2020-06-04 18:12:05 +00:00
|
|
|
|
2020-06-17 05:22:28 +00:00
|
|
|
OpenAPI_auth_event_free(message.AuthEvent);
|
|
|
|
|
|
|
|
return request;
|
|
|
|
}
|
|
|
|
|
2020-06-22 03:07:14 +00:00
|
|
|
ogs_sbi_request_t *udm_nudr_dr_build_update_amf_context(
|
2020-06-17 05:22:28 +00:00
|
|
|
udm_ue_t *udm_ue, void *data)
|
|
|
|
{
|
|
|
|
ogs_sbi_message_t message;
|
|
|
|
ogs_sbi_request_t *request = NULL;
|
|
|
|
|
|
|
|
ogs_assert(udm_ue);
|
|
|
|
ogs_assert(udm_ue->amf_3gpp_access_registration);
|
|
|
|
|
|
|
|
memset(&message, 0, sizeof(message));
|
|
|
|
message.h.method = (char *)OGS_SBI_HTTP_METHOD_PUT;
|
|
|
|
message.h.service.name = (char *)OGS_SBI_SERVICE_NAME_NUDR_DR;
|
|
|
|
message.h.api.version = (char *)OGS_SBI_API_V1;
|
|
|
|
message.h.resource.component[0] =
|
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_SUBSCRIPTION_DATA;
|
|
|
|
message.h.resource.component[1] = udm_ue->supi;
|
|
|
|
message.h.resource.component[2] =
|
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_CONTEXT_DATA;
|
|
|
|
message.h.resource.component[3] =
|
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_AMF_3GPP_ACCESS;
|
|
|
|
|
|
|
|
message.Amf3GppAccessRegistration =
|
|
|
|
OpenAPI_amf3_gpp_access_registration_copy(
|
|
|
|
message.Amf3GppAccessRegistration,
|
|
|
|
udm_ue->amf_3gpp_access_registration);
|
2020-06-04 18:12:05 +00:00
|
|
|
|
|
|
|
request = ogs_sbi_build_request(&message);
|
|
|
|
ogs_assert(request);
|
|
|
|
|
2020-06-17 05:22:28 +00:00
|
|
|
OpenAPI_amf3_gpp_access_registration_free(
|
|
|
|
message.Amf3GppAccessRegistration);
|
|
|
|
|
|
|
|
return request;
|
|
|
|
}
|
|
|
|
|
2020-06-22 03:07:14 +00:00
|
|
|
ogs_sbi_request_t *udm_nudr_dr_build_query_subscription_provisioned(
|
2020-06-17 05:22:28 +00:00
|
|
|
udm_ue_t *udm_ue, void *data)
|
|
|
|
{
|
|
|
|
char buf[OGS_PLMNIDSTRLEN];
|
|
|
|
|
|
|
|
ogs_sbi_message_t *recvmsg = NULL;
|
|
|
|
ogs_sbi_message_t sendmsg;
|
|
|
|
ogs_sbi_request_t *request = NULL;
|
|
|
|
|
|
|
|
ogs_assert(udm_ue);
|
|
|
|
recvmsg = data;
|
|
|
|
ogs_assert(recvmsg);
|
|
|
|
|
|
|
|
memset(&sendmsg, 0, sizeof(sendmsg));
|
|
|
|
sendmsg.h.method = (char *)OGS_SBI_HTTP_METHOD_GET;
|
|
|
|
sendmsg.h.service.name = (char *)OGS_SBI_SERVICE_NAME_NUDR_DR;
|
|
|
|
sendmsg.h.api.version = (char *)OGS_SBI_API_V1;
|
|
|
|
sendmsg.h.resource.component[0] =
|
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_SUBSCRIPTION_DATA;
|
|
|
|
sendmsg.h.resource.component[1] = udm_ue->supi;
|
|
|
|
sendmsg.h.resource.component[2] =
|
2020-07-09 05:38:09 +00:00
|
|
|
(char *)ogs_plmn_id_to_string(&udm_ue->guami.plmn_id, buf);
|
2020-06-17 05:22:28 +00:00
|
|
|
sendmsg.h.resource.component[3] =
|
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_PROVISIONED_DATA;
|
|
|
|
sendmsg.h.resource.component[4] = recvmsg->h.resource.component[1];
|
|
|
|
|
|
|
|
SWITCH(recvmsg->h.resource.component[1])
|
|
|
|
CASE(OGS_SBI_RESOURCE_NAME_SM_DATA)
|
|
|
|
if (recvmsg->param.dnn)
|
|
|
|
sendmsg.param.dnn = recvmsg->param.dnn;
|
2020-12-11 19:03:20 +00:00
|
|
|
if (recvmsg->param.single_nssai_presence) {
|
|
|
|
sendmsg.param.single_nssai_presence = true;
|
2021-03-08 12:25:09 +00:00
|
|
|
memcpy(&sendmsg.param.s_nssai, &recvmsg->param.s_nssai,
|
|
|
|
sizeof(sendmsg.param.s_nssai));
|
2020-06-17 05:22:28 +00:00
|
|
|
}
|
2021-01-28 19:23:22 +00:00
|
|
|
break;
|
|
|
|
|
2021-01-28 19:18:02 +00:00
|
|
|
CASE(OGS_SBI_RESOURCE_NAME_SMF_SELECT_DATA)
|
|
|
|
sendmsg.h.resource.component[4] =
|
2021-01-28 19:23:22 +00:00
|
|
|
(char *)OGS_SBI_RESOURCE_NAME_SMF_SELECTION_SUBSCRIPTION_DATA;
|
|
|
|
break;
|
|
|
|
|
2020-06-17 05:22:28 +00:00
|
|
|
DEFAULT
|
|
|
|
END
|
|
|
|
|
|
|
|
request = ogs_sbi_build_request(&sendmsg);
|
|
|
|
ogs_assert(request);
|
2020-06-04 18:12:05 +00:00
|
|
|
|
|
|
|
return request;
|
|
|
|
}
|