diff --git a/src/oai_pcf/main.cpp b/src/oai_pcf/main.cpp index 369c395b6b9c710831a479f8fd8d9d654713f300..27dc594c7873e0ba1a390ef583be33bfa1447e9f 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 2a11ae49e6b0b19b9aad37b55a73fe3dcccef86f..d785cf34c5d5be292a19d2893c9906d4b2c6dec1 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 15cbac2c523e76ccaa363c7a26d335e3de6a4816..2bea9c30b228746b55c615a929a36f6d25b2b51d 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 95d576f04e15843dd04b2a78a138453b39acc340..71d8d87120f7043ce7696c1b06697c312bb536d6 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"); + } +}