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);