Commit bc9e4874 authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Process PDU Session Release notification from SMF

parent 3e39da3e
...@@ -148,6 +148,13 @@ void amf_app_task(void*) { ...@@ -148,6 +148,13 @@ void amf_app_task(void*) {
amf_app_inst->handle_itti_message(ref(*m)); amf_app_inst->handle_itti_message(ref(*m));
} break; } break;
case SBI_PDU_SESSION_RELEASE_NOTIF: {
Logger::amf_app().debug("Received SBI_PDU_SESSION_RELEASE_NOTIF");
itti_sbi_pdu_session_release_notif* m =
dynamic_cast<itti_sbi_pdu_session_release_notif*>(msg);
amf_app_inst->handle_itti_message(ref(*m));
} break;
case SBI_AMF_CONFIGURATION: { case SBI_AMF_CONFIGURATION: {
Logger::amf_app().debug("Received SBI_AMF_CONFIGURATION"); Logger::amf_app().debug("Received SBI_AMF_CONFIGURATION");
itti_sbi_amf_configuration* m = itti_sbi_amf_configuration* m =
...@@ -293,6 +300,24 @@ bool amf_app::get_pdu_sessions_context( ...@@ -293,6 +300,24 @@ bool amf_app::get_pdu_sessions_context(
return true; return true;
} }
//------------------------------------------------------------------------------
bool amf_app::update_pdu_sessions_context(
const string& ue_id, const uint8_t& pdu_session_id,
const oai::amf::model::SmContextStatusNotification& statusNotification) {
if (!is_supi_2_ue_context(ue_id)) return false;
std::shared_ptr<ue_context> uc = {};
uc = supi_2_ue_context(ue_id);
// TODO: process SmContextStatusNotification
oai::amf::model::StatusInfo statusInfo = statusNotification.getStatusInfo();
oai::amf::model::ResourceStatus resourceStatus =
statusInfo.getResourceStatus();
std::string pdu_session_status = resourceStatus.getValue();
if (boost::iequals(pdu_session_status, "released")) {
if (uc->remove_pdu_sessions_context(pdu_session_id)) return true;
}
return false;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
evsub_id_t amf_app::generate_ev_subscription_id() { evsub_id_t amf_app::generate_ev_subscription_id() {
return evsub_id_generator.get_uid(); return evsub_id_generator.get_uid();
...@@ -708,6 +733,36 @@ void amf_app::handle_itti_message(itti_sbi_n1n2_message_unsubscribe& itti_msg) { ...@@ -708,6 +733,36 @@ void amf_app::handle_itti_message(itti_sbi_n1n2_message_unsubscribe& itti_msg) {
} }
} }
//------------------------------------------------------------------------------
void amf_app::handle_itti_message(
itti_sbi_pdu_session_release_notif& itti_msg) {
Logger::amf_app().info(
"Handle an PDU Session Release notification from SMF (HTTP version "
"%d)",
itti_msg.http_version);
// Process the request and trigger the response from AMF API Server
nlohmann::json response_data = {};
if (update_pdu_sessions_context(
itti_msg.ue_id, itti_msg.pdu_session_id,
itti_msg.smContextStatusNotification)) {
response_data["httpResponseCode"] = static_cast<uint32_t>(
http_response_codes_e::HTTP_RESPONSE_CODE_204_NO_CONTENT);
} else {
response_data["httpResponseCode"] = static_cast<uint32_t>(
http_response_codes_e::HTTP_RESPONSE_CODE_BAD_REQUEST);
oai::amf::model::ProblemDetails problem_details = {};
// TODO set problem_details
to_json(response_data["ProblemDetails"], problem_details);
}
// Notify to the result
if (itti_msg.promise_id > 0) {
trigger_process_response(itti_msg.promise_id, response_data);
return;
}
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void amf_app::handle_itti_message(itti_sbi_amf_configuration& itti_msg) { void amf_app::handle_itti_message(itti_sbi_amf_configuration& itti_msg) {
Logger::amf_app().info( Logger::amf_app().info(
......
...@@ -143,6 +143,13 @@ class amf_app { ...@@ -143,6 +143,13 @@ class amf_app {
*/ */
void handle_itti_message(itti_sbi_n1n2_message_unsubscribe& itti_msg); void handle_itti_message(itti_sbi_n1n2_message_unsubscribe& itti_msg);
/*
* Handle ITTI message (SBI PDU Session Release Notification)
* @param [itti_sbi_pdu_session_release_notif&]: ITTI message
* @return void
*/
void handle_itti_message(itti_sbi_pdu_session_release_notif& itti_msg);
/* /*
* Handle ITTI message (SBI AMF configuration) * Handle ITTI message (SBI AMF configuration)
* @param [itti_sbi_amf_configuration&]: ITTI message * @param [itti_sbi_amf_configuration&]: ITTI message
...@@ -289,6 +296,18 @@ class amf_app { ...@@ -289,6 +296,18 @@ class amf_app {
const string& supi, const string& supi,
std::vector<std::shared_ptr<pdu_session_context>>& sessions_ctx); std::vector<std::shared_ptr<pdu_session_context>>& sessions_ctx);
/*
* Update PDU Session Context status
* @param [const std::string&] ue_id: UE SUPI
* @param [const uint8_t&] pdu_session_id: PDU Session ID
* @param [const oai::amf::model::SmContextStatusNotification&]
* statusNotification: Notification information received from SMF
* @return true if success, otherwise false
*/
bool update_pdu_sessions_context(
const string& ue_id, const uint8_t& pdu_session_id,
const oai::amf::model::SmContextStatusNotification& statusNotification);
/* /*
* Generate a TMSI value for UE * Generate a TMSI value for UE
* @param void * @param void
......
...@@ -54,10 +54,12 @@ void ue_context::add_pdu_session_context( ...@@ -54,10 +54,12 @@ void ue_context::add_pdu_session_context(
pdu_sessions[session_id] = context; pdu_sessions[session_id] = context;
} }
//------------------------------------------------------------------------------
void ue_context::copy_pdu_sessions(std::shared_ptr<ue_context>& ue_ctx) { void ue_context::copy_pdu_sessions(std::shared_ptr<ue_context>& ue_ctx) {
pdu_sessions = ue_ctx->pdu_sessions; pdu_sessions = ue_ctx->pdu_sessions;
} }
//------------------------------------------------------------------------------
bool ue_context::get_pdu_sessions_context( bool ue_context::get_pdu_sessions_context(
std::vector<std::shared_ptr<pdu_session_context>>& sessions_ctx) { std::vector<std::shared_ptr<pdu_session_context>>& sessions_ctx) {
std::shared_lock lock(m_pdu_session); std::shared_lock lock(m_pdu_session);
...@@ -66,3 +68,10 @@ bool ue_context::get_pdu_sessions_context( ...@@ -66,3 +68,10 @@ bool ue_context::get_pdu_sessions_context(
} }
return true; return true;
} }
//------------------------------------------------------------------------------
bool ue_context::remove_pdu_sessions_context(const uint8_t& pdu_session_id) {
std::shared_lock lock(m_pdu_session);
pdu_sessions.erase(pdu_session_id);
return true;
}
...@@ -52,6 +52,8 @@ class ue_context { ...@@ -52,6 +52,8 @@ class ue_context {
bool get_pdu_sessions_context( bool get_pdu_sessions_context(
std::vector<std::shared_ptr<pdu_session_context>>& sessions_ctx); std::vector<std::shared_ptr<pdu_session_context>>& sessions_ctx);
bool remove_pdu_sessions_context(const uint8_t& pdu_session_id);
public: public:
uint32_t ran_ue_ngap_id; // 32bits uint32_t ran_ue_ngap_id; // 32bits
long amf_ue_ngap_id : 40; // 40bits long amf_ue_ngap_id : 40; // 40bits
......
...@@ -551,12 +551,16 @@ class itti_sbi_pdu_session_release_notif : public itti_sbi_msg { ...@@ -551,12 +551,16 @@ class itti_sbi_pdu_session_release_notif : public itti_sbi_msg {
: itti_sbi_msg(SBI_PDU_SESSION_RELEASE_NOTIF, orig, dest), : itti_sbi_msg(SBI_PDU_SESSION_RELEASE_NOTIF, orig, dest),
http_version(1), http_version(1),
promise_id(pid), promise_id(pid),
ue_id(),
pdu_session_id(),
smContextStatusNotification() {} smContextStatusNotification() {}
itti_sbi_pdu_session_release_notif( itti_sbi_pdu_session_release_notif(
const itti_sbi_pdu_session_release_notif& i) const itti_sbi_pdu_session_release_notif& i)
: itti_sbi_msg(i), : itti_sbi_msg(i),
http_version(1), http_version(1),
promise_id(), promise_id(),
ue_id(),
pdu_session_id(),
smContextStatusNotification(i.smContextStatusNotification) {} smContextStatusNotification(i.smContextStatusNotification) {}
itti_sbi_pdu_session_release_notif( itti_sbi_pdu_session_release_notif(
const itti_sbi_pdu_session_release_notif& i, const task_id_t orig, const itti_sbi_pdu_session_release_notif& i, const task_id_t orig,
...@@ -564,6 +568,8 @@ class itti_sbi_pdu_session_release_notif : public itti_sbi_msg { ...@@ -564,6 +568,8 @@ class itti_sbi_pdu_session_release_notif : public itti_sbi_msg {
: itti_sbi_msg(i, orig, dest), : itti_sbi_msg(i, orig, dest),
http_version(i.http_version), http_version(i.http_version),
promise_id(i.promise_id), promise_id(i.promise_id),
ue_id(i.ue_id),
pdu_session_id(i.pdu_session_id),
smContextStatusNotification(i.smContextStatusNotification) {} smContextStatusNotification(i.smContextStatusNotification) {}
virtual ~itti_sbi_pdu_session_release_notif(){}; virtual ~itti_sbi_pdu_session_release_notif(){};
...@@ -571,6 +577,8 @@ class itti_sbi_pdu_session_release_notif : public itti_sbi_msg { ...@@ -571,6 +577,8 @@ class itti_sbi_pdu_session_release_notif : public itti_sbi_msg {
uint8_t http_version; uint8_t http_version;
uint32_t promise_id; uint32_t promise_id;
std::string ue_id;
uint8_t pdu_session_id;
oai::amf::model::SmContextStatusNotification smContextStatusNotification; oai::amf::model::SmContextStatusNotification smContextStatusNotification;
}; };
......
...@@ -22,6 +22,7 @@ void AMFApiServer::init(size_t thr) { ...@@ -22,6 +22,7 @@ void AMFApiServer::init(size_t thr) {
m_subscriptionsCollectionDocumentApiImpl->init(); m_subscriptionsCollectionDocumentApiImpl->init();
m_subscriptionsCollectionDocumentApiImplEventExposure->init(); m_subscriptionsCollectionDocumentApiImplEventExposure->init();
m_n1MessageNotifyApiImpl->init(); m_n1MessageNotifyApiImpl->init();
m_statusNotifyApiImpl->init();
Logger::amf_server().debug("Initiate AMF Server Endpoints done!"); Logger::amf_server().debug("Initiate AMF Server Endpoints done!");
} }
...@@ -72,6 +73,9 @@ void AMFApiServer::start() { ...@@ -72,6 +73,9 @@ void AMFApiServer::start() {
if (m_n1MessageNotifyApiImpl != nullptr) if (m_n1MessageNotifyApiImpl != nullptr)
Logger::amf_server().debug("AMF handler for N1MessageNotifyApiImpl"); Logger::amf_server().debug("AMF handler for N1MessageNotifyApiImpl");
if (m_statusNotifyApiImpl != nullptr)
Logger::amf_server().debug("AMF handler for StatusNotifyApiImpl");
m_httpEndpoint->setHandler(m_router->handler()); m_httpEndpoint->setHandler(m_router->handler());
m_httpEndpoint->serveThreaded(); m_httpEndpoint->serveThreaded();
} }
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "SubscriptionsCollectionDocumentApiImpl.h" #include "SubscriptionsCollectionDocumentApiImpl.h"
#include "SubscriptionsCollectionDocumentApiImplEventExposure.h" #include "SubscriptionsCollectionDocumentApiImplEventExposure.h"
#include "N1MessageNotifyApiImpl.h" #include "N1MessageNotifyApiImpl.h"
#include "StatusNotifyApiImpl.h"
#define PISTACHE_SERVER_THREADS 2 #define PISTACHE_SERVER_THREADS 2
#define PISTACHE_SERVER_MAX_PAYLOAD 32768 #define PISTACHE_SERVER_MAX_PAYLOAD 32768
...@@ -75,6 +76,8 @@ class AMFApiServer { ...@@ -75,6 +76,8 @@ class AMFApiServer {
m_router, amf_app_inst); m_router, amf_app_inst);
m_n1MessageNotifyApiImpl = m_n1MessageNotifyApiImpl =
std::make_shared<N1MessageNotifyApiImpl>(m_router, amf_app_inst); std::make_shared<N1MessageNotifyApiImpl>(m_router, amf_app_inst);
m_statusNotifyApiImpl =
std::make_shared<StatusNotifyApiImpl>(m_router, amf_app_inst);
} }
void init(size_t thr = 1); void init(size_t thr = 1);
...@@ -111,6 +114,7 @@ class AMFApiServer { ...@@ -111,6 +114,7 @@ class AMFApiServer {
std::shared_ptr<SubscriptionsCollectionDocumentApiImplEventExposure> std::shared_ptr<SubscriptionsCollectionDocumentApiImplEventExposure>
m_subscriptionsCollectionDocumentApiImplEventExposure; m_subscriptionsCollectionDocumentApiImplEventExposure;
std::shared_ptr<N1MessageNotifyApiImpl> m_n1MessageNotifyApiImpl; std::shared_ptr<N1MessageNotifyApiImpl> m_n1MessageNotifyApiImpl;
std::shared_ptr<StatusNotifyApiImpl> m_statusNotifyApiImpl;
std::string m_address; std::string m_address;
}; };
...@@ -19,7 +19,8 @@ ...@@ -19,7 +19,8 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
#include "NFStatusNotifyApi.h" #include "StatusNotifyApi.h"
#include "Helpers.h" #include "Helpers.h"
#include "amf_config.hpp" #include "amf_config.hpp"
#include "SmContextStatusNotification.h" #include "SmContextStatusNotification.h"
...@@ -33,31 +34,29 @@ namespace api { ...@@ -33,31 +34,29 @@ namespace api {
using namespace oai::amf::helpers; using namespace oai::amf::helpers;
using namespace oai::amf::model; using namespace oai::amf::model;
NFStatusNotifyApi::NFStatusNotifyApi( StatusNotifyApi::StatusNotifyApi(std::shared_ptr<Pistache::Rest::Router> rtr) {
std::shared_ptr<Pistache::Rest::Router> rtr) {
router = rtr; router = rtr;
} }
void NFStatusNotifyApi::init() { void StatusNotifyApi::init() {
setupRoutes(); setupRoutes();
} }
void NFStatusNotifyApi::setupRoutes() { void StatusNotifyApi::setupRoutes() {
using namespace Pistache::Rest; using namespace Pistache::Rest;
Routes::Post( Routes::Post(
*router, *router,
base + amf_cfg.sbi_api_version + base + amf_cfg.sbi_api_version +
"/pdu-session-release/callback/:ueContextId/:pduSessionId", "/pdu-session-release/callback/:ueContextId/:pduSessionId",
Routes::bind( Routes::bind(&StatusNotifyApi::notify_pdu_session_status_handler, this));
&NFStatusNotifyApi::notify_pdu_session_status_handler, this));
// Default handler, called when a route is not found // Default handler, called when a route is not found
router->addCustomHandler( router->addCustomHandler(
Routes::bind(&NFStatusNotifyApi::notify_nf_status_default_handler, this)); Routes::bind(&StatusNotifyApi::notify_status_default_handler, this));
} }
void NFStatusNotifyApi::notify_pdu_session_status_handler( void StatusNotifyApi::notify_pdu_session_status_handler(
const Pistache::Rest::Request& request, const Pistache::Rest::Request& request,
Pistache::Http::ResponseWriter response) { Pistache::Http::ResponseWriter response) {
// Get SUPI // Get SUPI
...@@ -85,7 +84,7 @@ void NFStatusNotifyApi::notify_pdu_session_status_handler( ...@@ -85,7 +84,7 @@ void NFStatusNotifyApi::notify_pdu_session_status_handler(
} }
} }
void NFStatusNotifyApi::notify_nf_status_default_handler( void StatusNotifyApi::notify_status_default_handler(
const Pistache::Rest::Request&, Pistache::Http::ResponseWriter response) { const Pistache::Rest::Request&, Pistache::Http::ResponseWriter response) {
response.send( response.send(
Pistache::Http::Code::Not_Found, "The requested method does not exist"); Pistache::Http::Code::Not_Found, "The requested method does not exist");
......
...@@ -20,13 +20,13 @@ ...@@ -20,13 +20,13 @@
*/ */
/* /*
* NFStatusNotifyApi.h * StatusNotifyApi.h
* *
* *
*/ */
#ifndef NFStatusNotifyApi_H_ #ifndef StatusNotifyApi_H_
#define NFStatusNotifyApi_H_ #define StatusNotifyApi_H_
#include <pistache/http.h> #include <pistache/http.h>
#include <pistache/router.h> #include <pistache/router.h>
...@@ -39,10 +39,10 @@ namespace oai::amf::api { ...@@ -39,10 +39,10 @@ namespace oai::amf::api {
using namespace oai::amf::model; using namespace oai::amf::model;
class NFStatusNotifyApi { class StatusNotifyApi {
public: public:
NFStatusNotifyApi(std::shared_ptr<Pistache::Rest::Router>); StatusNotifyApi(std::shared_ptr<Pistache::Rest::Router>);
virtual ~NFStatusNotifyApi() {} virtual ~StatusNotifyApi() {}
void init(); void init();
const std::string base = "/namf-status-notify/"; const std::string base = "/namf-status-notify/";
...@@ -53,7 +53,7 @@ class NFStatusNotifyApi { ...@@ -53,7 +53,7 @@ class NFStatusNotifyApi {
void notify_pdu_session_status_handler( void notify_pdu_session_status_handler(
const Pistache::Rest::Request& request, const Pistache::Rest::Request& request,
Pistache::Http::ResponseWriter response); Pistache::Http::ResponseWriter response);
void notify_nf_status_default_handler( void notify_status_default_handler(
const Pistache::Rest::Request& request, const Pistache::Rest::Request& request,
Pistache::Http::ResponseWriter response); Pistache::Http::ResponseWriter response);
...@@ -74,4 +74,4 @@ class NFStatusNotifyApi { ...@@ -74,4 +74,4 @@ class NFStatusNotifyApi {
} // namespace oai::amf::api } // namespace oai::amf::api
#endif /* NFStatusNotifyApi_H_ */ #endif /* StatusNotifyApi_H_ */
...@@ -32,13 +32,12 @@ ...@@ -32,13 +32,12 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
#include "NFStatusNotifyApiImpl.h"
#include "3gpp_29.500.h" #include "3gpp_29.500.h"
#include "logger.hpp" #include "logger.hpp"
#include "itti_msg_sbi.hpp" #include "itti_msg_sbi.hpp"
#include "StatusNotifyApiImpl.h"
itti_mw* itti_inst = nullptr; extern itti_mw* itti_inst;
namespace oai { namespace oai {
namespace amf { namespace amf {
...@@ -46,18 +45,19 @@ namespace api { ...@@ -46,18 +45,19 @@ namespace api {
using namespace oai::amf::model; using namespace oai::amf::model;
NFStatusNotifyApiImpl::NFStatusNotifyApiImpl( StatusNotifyApiImpl::StatusNotifyApiImpl(
std::shared_ptr<Pistache::Rest::Router> rtr, std::shared_ptr<Pistache::Rest::Router> rtr,
amf_application::amf_app* amf_app_inst, std::string address) amf_application::amf_app* amf_app_inst)
: NFStatusNotifyApi(rtr), m_amf_app(amf_app_inst), m_address(address) {} : StatusNotifyApi(rtr), m_amf_app(amf_app_inst) {}
void NFStatusNotifyApiImpl::receive_pdu_session_status_notification( void StatusNotifyApiImpl::receive_pdu_session_status_notification(
const std::string& ueContextId, const std::string& pduSessionId, const std::string& ueContextId, const std::string& pduSessionId,
const SmContextStatusNotification& statusNotification, const SmContextStatusNotification& statusNotification,
Pistache::Http::ResponseWriter& response) { Pistache::Http::ResponseWriter& response) {
Logger::amf_server().debug( Logger::amf_server().debug(
"Receive PDU Session Release notification, handling..."); "Receive PDU Session Release notification, handling...");
uint8_t pdu_session_id = 0;
// Generate a promise and associate this promise to the ITTI message // Generate a promise and associate this promise to the ITTI message
uint32_t promise_id = m_amf_app->generate_promise_id(); uint32_t promise_id = m_amf_app->generate_promise_id();
Logger::amf_n1().debug("Promise ID generated %d", promise_id); Logger::amf_n1().debug("Promise ID generated %d", promise_id);
...@@ -74,6 +74,8 @@ void NFStatusNotifyApiImpl::receive_pdu_session_status_notification( ...@@ -74,6 +74,8 @@ void NFStatusNotifyApiImpl::receive_pdu_session_status_notification(
itti_msg->http_version = 1; itti_msg->http_version = 1;
itti_msg->promise_id = promise_id; itti_msg->promise_id = promise_id;
itti_msg->ue_id = ueContextId;
itti_msg->pdu_session_id = pdu_session_id;
itti_msg->smContextStatusNotification = statusNotification; itti_msg->smContextStatusNotification = statusNotification;
int ret = itti_inst->send_msg(itti_msg); int ret = itti_inst->send_msg(itti_msg);
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
*/ */
/* /*
* NFStatusNotifyApiImpl.h * StatusNotifyApiImpl.h
* *
* *
*/ */
...@@ -38,18 +38,17 @@ ...@@ -38,18 +38,17 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
#ifndef NF_STATUS_NOTIFY_API_IMPL_H_ #ifndef STATUS_NOTIFY_API_IMPL_H_
#define NF_STATUS_NOTIFY_API_IMPL_H_ #define STATUS_NOTIFY_API_IMPL_H_
#include <pistache/endpoint.h> #include <pistache/endpoint.h>
#include <pistache/http.h> #include <pistache/http.h>
#include <pistache/router.h> #include <pistache/router.h>
#include <memory> #include <memory>
#include <NFStatusNotifyApi.h>
#include <pistache/optional.h> #include <pistache/optional.h>
#include "StatusNotifyApi.h"
#include "ProblemDetails.h" #include "ProblemDetails.h"
#include "amf_app.hpp" #include "amf_app.hpp"
...@@ -59,12 +58,12 @@ namespace api { ...@@ -59,12 +58,12 @@ namespace api {
using namespace oai::amf::model; using namespace oai::amf::model;
class NFStatusNotifyApiImpl : public oai::amf::api::NFStatusNotifyApi { class StatusNotifyApiImpl : public oai::amf::api::StatusNotifyApi {
public: public:
NFStatusNotifyApiImpl( StatusNotifyApiImpl(
std::shared_ptr<Pistache::Rest::Router>, std::shared_ptr<Pistache::Rest::Router>,
amf_application::amf_app* amf_app_inst, std::string address); amf_application::amf_app* amf_app_inst);
~NFStatusNotifyApiImpl() {} ~StatusNotifyApiImpl() {}
void receive_pdu_session_status_notification( void receive_pdu_session_status_notification(
const std::string& ueContextId, const std::string& pduSessionId, const std::string& ueContextId, const std::string& pduSessionId,
...@@ -73,7 +72,7 @@ class NFStatusNotifyApiImpl : public oai::amf::api::NFStatusNotifyApi { ...@@ -73,7 +72,7 @@ class NFStatusNotifyApiImpl : public oai::amf::api::NFStatusNotifyApi {
private: private:
amf_application::amf_app* m_amf_app; amf_application::amf_app* m_amf_app;
std::string m_address; // std::string m_address;
}; };
} // namespace api } // namespace api
......
...@@ -25,11 +25,24 @@ void ResourceStatus::validate() { ...@@ -25,11 +25,24 @@ void ResourceStatus::validate() {
// TODO: implement validation // TODO: implement validation
} }
std::string ResourceStatus::getValue() const {
return status;
}
void ResourceStatus::getValue(std::string& v) const {
v = status;
}
void ResourceStatus::setValue(const std::string& v) {
status = v;
}
void to_json(nlohmann::json& j, const ResourceStatus& o) { void to_json(nlohmann::json& j, const ResourceStatus& o) {
j = nlohmann::json(); j = nlohmann::json();
} }
void from_json(const nlohmann::json& j, ResourceStatus& o) {} void from_json(const nlohmann::json& j, ResourceStatus& o) {
j.get_to(o.status);
}
} // namespace model } // namespace model
} // namespace amf } // namespace amf
......
...@@ -34,6 +34,9 @@ class ResourceStatus { ...@@ -34,6 +34,9 @@ class ResourceStatus {
virtual ~ResourceStatus(); virtual ~ResourceStatus();
void validate(); void validate();
std::string getValue() const;
void getValue(std::string& value) const;
void setValue(const std::string& v);
///////////////////////////////////////////// /////////////////////////////////////////////
/// ResourceStatus members /// ResourceStatus members
...@@ -42,6 +45,7 @@ class ResourceStatus { ...@@ -42,6 +45,7 @@ class ResourceStatus {
friend void from_json(const nlohmann::json& j, ResourceStatus& o); friend void from_json(const nlohmann::json& j, ResourceStatus& o);
protected: protected:
std::string status;
}; };
} // namespace model } // namespace model
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment