From 5f9a2f51c1c2a1bcb43fbf51be66c2b572d0b214 Mon Sep 17 00:00:00 2001
From: Stefan Spettel <stefan.spettel@eurecom.fr>
Date: Mon, 28 Nov 2022 12:13:12 +0100
Subject: [PATCH] feat(pcf): Implemented de-registration towards NRF

Signed-off-by: Stefan Spettel <stefan.spettel@eurecom.fr>
---
 src/oai_pcf/main.cpp    |  3 +++
 src/pcf_app/pcf_app.cpp |  6 ++++++
 src/pcf_app/pcf_app.hpp |  6 ++++++
 src/pcf_app/pcf_nrf.cpp | 18 ++++++++++++++++++
 4 files changed, 33 insertions(+)

diff --git a/src/oai_pcf/main.cpp b/src/oai_pcf/main.cpp
index 369c395..27dc594 100644
--- a/src/oai_pcf/main.cpp
+++ b/src/oai_pcf/main.cpp
@@ -64,6 +64,9 @@ void my_app_signal_handler(int s) {
   if (pcf_api_server_2) {
     pcf_api_server_2->stop();
   }
+  if (pcf_app_inst) {
+    pcf_app_inst->stop();
+  }
 }
 //------------------------------------------------------------------------------
 // We are doing a check to see if an existing process already runs this program.
diff --git a/src/pcf_app/pcf_app.cpp b/src/pcf_app/pcf_app.cpp
index 2a11ae4..d785cf3 100644
--- a/src/pcf_app/pcf_app.cpp
+++ b/src/pcf_app/pcf_app.cpp
@@ -77,4 +77,10 @@ pcf_app::~pcf_app() {
 
 std::shared_ptr<pcf_smpc> pcf_app::get_pcf_smpc_service() {
   return pcf_smpc_service;
+}
+
+void pcf_app::stop() {
+  if (pcf_nrf_inst) {
+    pcf_nrf_inst->deregister_to_nrf();
+  }
 }
\ No newline at end of file
diff --git a/src/pcf_app/pcf_app.hpp b/src/pcf_app/pcf_app.hpp
index 15cbac2..2bea9c3 100644
--- a/src/pcf_app/pcf_app.hpp
+++ b/src/pcf_app/pcf_app.hpp
@@ -57,6 +57,12 @@ class pcf_app {
 
   std::shared_ptr<pcf_smpc> get_pcf_smpc_service();
 
+  /**
+   * Stops all the ongoing processes and procedures of the PCF APP layer,
+   * deregisters at NRF
+   */
+  void stop();
+
  private:
   pcf_profile nf_instance_profile;  // PCF profile
   std::string pcf_instance_id;      // PCF instance id
diff --git a/src/pcf_app/pcf_nrf.cpp b/src/pcf_app/pcf_nrf.cpp
index 95d576f..71d8d87 100644
--- a/src/pcf_app/pcf_nrf.cpp
+++ b/src/pcf_app/pcf_nrf.cpp
@@ -203,3 +203,21 @@ void pcf_nrf::trigger_nf_heartbeat_procedure(uint64_t ms) {
 pcf_nrf::~pcf_nrf() {
   Logger::pcf_sbi().debug("Delete PCF_NRF instance...");
 }
+
+//------------------------------------------------------------------------------
+void pcf_nrf::deregister_to_nrf() {
+  std::string body_response;
+  std::string response_header;
+
+  Logger::pcf_sbi().info("Sending NF de-registration request");
+
+  http_response_codes_e res =
+      pcf_client_inst->send_delete(nrf_url, body_response, response_header);
+
+  if (res != http_response_codes_e::HTTP_RESPONSE_CODE_NO_CONTENT) {
+    Logger::pcf_sbi().warn(
+        "NF Deregistration failed! Wrong response code: %d", res);
+  } else {
+    Logger::pcf_sbi().info("NF Deregistration successful");
+  }
+}
-- 
GitLab