From 89c3f3e1c03dbe298a35311eb52d6cf289ff0051 Mon Sep 17 00:00:00 2001 From: mitmitmitm Date: Tue, 29 Nov 2022 08:10:50 +0100 Subject: [PATCH] [UDM] Handle SDM unsubscribe --- src/udm/nudm-handler.c | 27 +++++++++++++++++++++++++++ src/udm/nudm-handler.h | 2 ++ src/udm/ue-sm.c | 17 +++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/src/udm/nudm-handler.c b/src/udm/nudm-handler.c index b664841f9..aa9bb38be 100644 --- a/src/udm/nudm-handler.c +++ b/src/udm/nudm-handler.c @@ -561,3 +561,30 @@ bool udm_nudm_sdm_handle_subscription_create( return true; } + +bool udm_nudm_sdm_handle_subscription_delete( + udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg) +{ + ogs_sbi_message_t sendmsg; + ogs_sbi_response_t *response = NULL; + ogs_sbi_server_t *server = NULL; + + ogs_assert(udm_ue); + ogs_assert(stream); + ogs_assert(recvmsg); + + if (udm_ue->data_change_callback_uri) { + ogs_free(udm_ue->data_change_callback_uri); + udm_ue->data_change_callback_uri = NULL; + } + + server = ogs_sbi_server_from_stream(stream); + ogs_assert(server); + + memset(&sendmsg, 0, sizeof(sendmsg)); + response = ogs_sbi_build_response(&sendmsg, OGS_SBI_HTTP_STATUS_NO_CONTENT); + ogs_assert(response); + ogs_sbi_server_send_response(stream, response); + + return true; +} diff --git a/src/udm/nudm-handler.h b/src/udm/nudm-handler.h index 803f26c71..581878cda 100644 --- a/src/udm/nudm-handler.h +++ b/src/udm/nudm-handler.h @@ -40,6 +40,8 @@ bool udm_nudm_sdm_handle_subscription_provisioned( udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg); bool udm_nudm_sdm_handle_subscription_create( udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg); +bool udm_nudm_sdm_handle_subscription_delete( + udm_ue_t *udm_ue, ogs_sbi_stream_t *stream, ogs_sbi_message_t *recvmsg); #ifdef __cplusplus } diff --git a/src/udm/ue-sm.c b/src/udm/ue-sm.c index 3f321762d..24a375588 100644 --- a/src/udm/ue-sm.c +++ b/src/udm/ue-sm.c @@ -180,6 +180,23 @@ void udm_ue_state_operational(ogs_fsm_t *s, udm_event_t *e) "Invalid resource name", message->h.method)); END break; + + CASE(OGS_SBI_HTTP_METHOD_DELETE) + SWITCH(message->h.resource.component[1]) + CASE(OGS_SBI_RESOURCE_NAME_SDM_SUBSCRIPTIONS) + udm_nudm_sdm_handle_subscription_delete( + udm_ue, stream, message); + break; + + DEFAULT + ogs_error("[%s] Invalid resource name [%s]", + udm_ue->suci, message->h.resource.component[1]); + ogs_assert(true == + ogs_sbi_server_send_error(stream, + OGS_SBI_HTTP_STATUS_BAD_REQUEST, message, + "Invalid resource name", message->h.method)); + END + break; DEFAULT ogs_error("[%s] Invalid HTTP method [%s]", udm_ue->supi, message->h.method);