Commit 7369359d authored by Tien-Thinh Nguyen's avatar Tien-Thinh Nguyen

add skeleton for NsmfEventExposure

parent 92282070
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "IndividualSubscriptionDocumentApi.h"
#include "Helpers.h"
namespace oai {
namespace smf_server {
namespace api {
using namespace oai::smf_server::helpers;
using namespace oai::smf_server::model;
IndividualSubscriptionDocumentApi::IndividualSubscriptionDocumentApi(std::shared_ptr<Pistache::Rest::Router> rtr) {
router = rtr;
}
void IndividualSubscriptionDocumentApi::init() {
setupRoutes();
}
void IndividualSubscriptionDocumentApi::setupRoutes() {
using namespace Pistache::Rest;
Routes::Delete(*router, base + "/subscriptions/:subId", Routes::bind(&IndividualSubscriptionDocumentApi::delete_individual_subcription_handler, this));
Routes::Get(*router, base + "/subscriptions/:subId", Routes::bind(&IndividualSubscriptionDocumentApi::get_individual_subcription_handler, this));
Routes::Put(*router, base + "/subscriptions/:subId", Routes::bind(&IndividualSubscriptionDocumentApi::replace_individual_subcription_handler, this));
// Default handler, called when a route is not found
router->addCustomHandler(Routes::bind(&IndividualSubscriptionDocumentApi::individual_subscription_document_api_default_handler, this));
}
void IndividualSubscriptionDocumentApi::delete_individual_subcription_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) {
// Getting the path params
auto subId = request.param(":subId").as<std::string>();
try {
this->delete_individual_subcription(subId, response);
} catch (nlohmann::detail::exception &e) {
//send a 400 error
response.send(Pistache::Http::Code::Bad_Request, e.what());
return;
} catch (Pistache::Http::HttpError &e) {
response.send(static_cast<Pistache::Http::Code>(e.code()), e.what());
return;
} catch (std::exception &e) {
//send a 500 error
response.send(Pistache::Http::Code::Internal_Server_Error, e.what());
return;
}
}
void IndividualSubscriptionDocumentApi::get_individual_subcription_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) {
// Getting the path params
auto subId = request.param(":subId").as<std::string>();
try {
this->get_individual_subcription(subId, response);
} catch (nlohmann::detail::exception &e) {
//send a 400 error
response.send(Pistache::Http::Code::Bad_Request, e.what());
return;
} catch (Pistache::Http::HttpError &e) {
response.send(static_cast<Pistache::Http::Code>(e.code()), e.what());
return;
} catch (std::exception &e) {
//send a 500 error
response.send(Pistache::Http::Code::Internal_Server_Error, e.what());
return;
}
}
void IndividualSubscriptionDocumentApi::replace_individual_subcription_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) {
// Getting the path params
auto subId = request.param(":subId").as<std::string>();
// Getting the body param
NsmfEventExposure nsmfEventExposure;
try {
nlohmann::json::parse(request.body()).get_to(nsmfEventExposure);
this->replace_individual_subcription(subId, nsmfEventExposure, response);
} catch (nlohmann::detail::exception &e) {
//send a 400 error
response.send(Pistache::Http::Code::Bad_Request, e.what());
return;
} catch (Pistache::Http::HttpError &e) {
response.send(static_cast<Pistache::Http::Code>(e.code()), e.what());
return;
} catch (std::exception &e) {
//send a 500 error
response.send(Pistache::Http::Code::Internal_Server_Error, e.what());
return;
}
}
void IndividualSubscriptionDocumentApi::individual_subscription_document_api_default_handler(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response) {
response.send(Pistache::Http::Code::Not_Found, "The requested method does not exist");
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* IndividualSubscriptionDocumentApi.h
*
*
*/
#ifndef IndividualSubscriptionDocumentApi_H_
#define IndividualSubscriptionDocumentApi_H_
#include <pistache/http.h>
#include <pistache/router.h>
#include <pistache/http_headers.h>
#include <pistache/optional.h>
#include "NsmfEventExposure.h"
#include "ProblemDetails.h"
#include <string>
namespace oai {
namespace smf_server {
namespace api {
using namespace oai::smf_server::model;
class IndividualSubscriptionDocumentApi {
public:
IndividualSubscriptionDocumentApi(std::shared_ptr<Pistache::Rest::Router>);
virtual ~IndividualSubscriptionDocumentApi() {}
void init();
const std::string base = "/nsmf_event-exposure/v1";
private:
void setupRoutes();
void delete_individual_subcription_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
void get_individual_subcription_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
void replace_individual_subcription_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
void individual_subscription_document_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
std::shared_ptr<Pistache::Rest::Router> router;
/// <summary>
/// Delete an individual subscription for event notifications from the SMF
/// </summary>
/// <remarks>
///
/// </remarks>
/// <param name="subId">Event Subscription ID</param>
virtual void delete_individual_subcription(const std::string &subId, Pistache::Http::ResponseWriter &response) = 0;
/// <summary>
/// Read an individual subscription for event notifications from the SMF
/// </summary>
/// <remarks>
///
/// </remarks>
/// <param name="subId">Event Subscription ID</param>
virtual void get_individual_subcription(const std::string &subId, Pistache::Http::ResponseWriter &response) = 0;
/// <summary>
/// Replace an individual subscription for event notifications from the SMF
/// </summary>
/// <remarks>
///
/// </remarks>
/// <param name="subId">Event Subscription ID</param>
/// <param name="nsmfEventExposure"></param>
virtual void replace_individual_subcription(const std::string &subId, const NsmfEventExposure &nsmfEventExposure, Pistache::Http::ResponseWriter &response) = 0;
};
}
}
}
#endif /* IndividualSubscriptionDocumentApi_H_ */
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "SubscriptionsCollectionApi.h"
#include "Helpers.h"
namespace oai {
namespace smf_server {
namespace api {
using namespace oai::smf_server::helpers;
using namespace oai::smf_server::model;
SubscriptionsCollectionApi::SubscriptionsCollectionApi(std::shared_ptr<Pistache::Rest::Router> rtr) {
router = rtr;
}
void SubscriptionsCollectionApi::init() {
setupRoutes();
}
void SubscriptionsCollectionApi::setupRoutes() {
using namespace Pistache::Rest;
Routes::Post(*router, base + "/subscriptions", Routes::bind(&SubscriptionsCollectionApi::create_individual_subcription_handler, this));
// Default handler, called when a route is not found
router->addCustomHandler(Routes::bind(&SubscriptionsCollectionApi::subscriptions_collection_api_default_handler, this));
}
void SubscriptionsCollectionApi::create_individual_subcription_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) {
// Getting the body param
NsmfEventExposure nsmfEventExposure;
try {
nlohmann::json::parse(request.body()).get_to(nsmfEventExposure);
this->create_individual_subcription(nsmfEventExposure, response);
} catch (nlohmann::detail::exception &e) {
//send a 400 error
response.send(Pistache::Http::Code::Bad_Request, e.what());
return;
} catch (Pistache::Http::HttpError &e) {
response.send(static_cast<Pistache::Http::Code>(e.code()), e.what());
return;
} catch (std::exception &e) {
//send a 500 error
response.send(Pistache::Http::Code::Internal_Server_Error, e.what());
return;
}
}
void SubscriptionsCollectionApi::subscriptions_collection_api_default_handler(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response) {
response.send(Pistache::Http::Code::Not_Found, "The requested method does not exist");
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* SubscriptionsCollectionApi.h
*
*
*/
#ifndef SubscriptionsCollectionApi_H_
#define SubscriptionsCollectionApi_H_
#include <pistache/http.h>
#include <pistache/router.h>
#include <pistache/http_headers.h>
#include <pistache/optional.h>
#include "NsmfEventExposure.h"
#include "ProblemDetails.h"
namespace oai {
namespace smf_server {
namespace api {
using namespace oai::smf_server::model;
class SubscriptionsCollectionApi {
public:
SubscriptionsCollectionApi(std::shared_ptr<Pistache::Rest::Router>);
virtual ~SubscriptionsCollectionApi() {}
void init();
const std::string base = "/nsmf_event-exposure/v1";
private:
void setupRoutes();
void create_individual_subcription_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
void subscriptions_collection_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
std::shared_ptr<Pistache::Rest::Router> router;
/// <summary>
/// Create an individual subscription for event notifications from the SMF
/// </summary>
/// <remarks>
///
/// </remarks>
/// <param name="nsmfEventExposure"></param>
virtual void create_individual_subcription(const NsmfEventExposure &nsmfEventExposure, Pistache::Http::ResponseWriter &response) = 0;
};
}
}
}
#endif /* SubscriptionsCollectionApi_H_ */
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "IndividualSubscriptionDocumentApiImpl.h"
namespace oai {
namespace smf_server {
namespace api {
using namespace oai::smf_server::model;
IndividualSubscriptionDocumentApiImpl::IndividualSubscriptionDocumentApiImpl(
std::shared_ptr<Pistache::Rest::Router> rtr, smf::smf_app *smf_app_inst,
std::string address)
:
IndividualSubscriptionDocumentApi(rtr),
m_smf_app(smf_app_inst),
m_address(address) {
}
void IndividualSubscriptionDocumentApiImpl::delete_individual_subcription(const std::string &subId, Pistache::Http::ResponseWriter &response) {
Logger::smf_api_server().info("IndividualSubscriptionDocumentApiImpl::delete_individual_subcription...");
response.send(Pistache::Http::Code::Not_Implemented,
"delete_individual_subcription API has not been implemented yet!\n");
}
void IndividualSubscriptionDocumentApiImpl::get_individual_subcription(const std::string &subId, Pistache::Http::ResponseWriter &response) {
Logger::smf_api_server().info("IndividualSubscriptionDocumentApiImpl::get_individual_subcription...");
response.send(Pistache::Http::Code::Not_Implemented,
"get_individual_subcription API has not been implemented yet!\n");
}
void IndividualSubscriptionDocumentApiImpl::replace_individual_subcription(const std::string &subId, const NsmfEventExposure &nsmfEventExposure, Pistache::Http::ResponseWriter &response) {
Logger::smf_api_server().info("IndividualSubscriptionDocumentApiImpl::replace_individual_subcription...");
response.send(Pistache::Http::Code::Not_Implemented,
"replace_individual_subcription API has not been implemented yet!\n");
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* IndividualSubscriptionDocumentApiImpl.h
*
*
*/
#ifndef INDIVIDUAL_SUBSCRIPTION_DOCUMENT_API_IMPL_H_
#define INDIVIDUAL_SUBSCRIPTION_DOCUMENT_API_IMPL_H_
#include <pistache/endpoint.h>
#include <pistache/http.h>
#include <pistache/router.h>
#include <memory>
#include <IndividualSubscriptionDocumentApi.h>
#include <pistache/optional.h>
#include "NsmfEventExposure.h"
#include "ProblemDetails.h"
#include "smf_app.hpp"
#include <string>
namespace oai {
namespace smf_server {
namespace api {
using namespace oai::smf_server::model;
class IndividualSubscriptionDocumentApiImpl : public oai::smf_server::api::IndividualSubscriptionDocumentApi {
public:
IndividualSubscriptionDocumentApiImpl(std::shared_ptr<Pistache::Rest::Router>,
smf::smf_app *smf_app_inst, std::string address);
~IndividualSubscriptionDocumentApiImpl() {}
void delete_individual_subcription(const std::string &subId, Pistache::Http::ResponseWriter &response);
void get_individual_subcription(const std::string &subId, Pistache::Http::ResponseWriter &response);
void replace_individual_subcription(const std::string &subId, const NsmfEventExposure &nsmfEventExposure, Pistache::Http::ResponseWriter &response);
private:
smf::smf_app *m_smf_app;
std::string m_address;
};
}
}
}
#endif
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "SubscriptionsCollectionApiImpl.h"
namespace oai {
namespace smf_server {
namespace api {
using namespace oai::smf_server::model;
SubscriptionsCollectionApiImpl::SubscriptionsCollectionApiImpl(
std::shared_ptr<Pistache::Rest::Router> rtr, smf::smf_app *smf_app_inst,
std::string address)
:
SubscriptionsCollectionApi(rtr),
m_smf_app(smf_app_inst),
m_address(address) {
}
void SubscriptionsCollectionApiImpl::create_individual_subcription(const NsmfEventExposure &nsmfEventExposure, Pistache::Http::ResponseWriter &response) {
Logger::smf_api_server().info("SubscriptionsCollectionApiImpl::create_individual_subcription...");
response.send(Pistache::Http::Code::Not_Implemented,
"create_individual_subcription API has not been implemented yet!\n");
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* SubscriptionsCollectionApiImpl.h
*
*
*/
#ifndef SUBSCRIPTIONS_COLLECTION_API_IMPL_H_
#define SUBSCRIPTIONS_COLLECTION_API_IMPL_H_
#include <pistache/endpoint.h>
#include <pistache/http.h>
#include <pistache/router.h>
#include <memory>
#include <SubscriptionsCollectionApi.h>
#include <pistache/optional.h>
#include "NsmfEventExposure.h"
#include "ProblemDetails.h"
#include "smf_app.hpp"
namespace oai {
namespace smf_server {
namespace api {
using namespace oai::smf_server::model;
class SubscriptionsCollectionApiImpl : public oai::smf_server::api::SubscriptionsCollectionApi {
public:
SubscriptionsCollectionApiImpl(std::shared_ptr<Pistache::Rest::Router>,
smf::smf_app *smf_app_inst, std::string address);
~SubscriptionsCollectionApiImpl() {}
void create_individual_subcription(const NsmfEventExposure &nsmfEventExposure, Pistache::Http::ResponseWriter &response);
private:
smf::smf_app *m_smf_app;
std::string m_address;
};
}
}
}
#endif
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "DddStatus.h"
namespace oai {
namespace smf_server {
namespace model {
DddStatus::DddStatus()
{
}
DddStatus::~DddStatus()
{
}
void DddStatus::validate()
{
// TODO: implement validation
}
void to_json(nlohmann::json& j, const DddStatus& o)
{
j = nlohmann::json();
}
void from_json(const nlohmann::json& j, DddStatus& o)
{
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* DddStatus.h
*
* Possible values are - BUFFERED: The downlink data are buffered. - TRANSMITTED: The downlink data are transmitted - DISCARDED: The downlink data are discarded.
*/
#ifndef DddStatus_H_
#define DddStatus_H_
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
/// Possible values are - BUFFERED: The downlink data are buffered. - TRANSMITTED: The downlink data are transmitted - DISCARDED: The downlink data are discarded.
/// </summary>
class DddStatus
{
public:
DddStatus();
virtual ~DddStatus();
void validate();
/////////////////////////////////////////////
/// DddStatus members
friend void to_json(nlohmann::json& j, const DddStatus& o);
friend void from_json(const nlohmann::json& j, DddStatus& o);
protected:
};
}
}
}
#endif /* DddStatus_H_ */
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "DddTrafficDescriptor.h"
namespace oai {
namespace smf_server {
namespace model {
DddTrafficDescriptor::DddTrafficDescriptor()
{
m_Ipv4Addr = "";
m_Ipv4AddrIsSet = false;
m_Ipv6AddrIsSet = false;
m_Port = 0;
m_PortIsSet = false;
}
DddTrafficDescriptor::~DddTrafficDescriptor()
{
}
void DddTrafficDescriptor::validate()
{
// TODO: implement validation
}
void to_json(nlohmann::json& j, const DddTrafficDescriptor& o)
{
j = nlohmann::json();
if(o.ipv4AddrIsSet())
j["ipv4Addr"] = o.m_Ipv4Addr;
if(o.ipv6AddrIsSet())
j["ipv6Addr"] = o.m_Ipv6Addr;
if(o.portIsSet())
j["port"] = o.m_Port;
}
void from_json(const nlohmann::json& j, DddTrafficDescriptor& o)
{
if(j.find("ipv4Addr") != j.end())
{
j.at("ipv4Addr").get_to(o.m_Ipv4Addr);
o.m_Ipv4AddrIsSet = true;
}
if(j.find("ipv6Addr") != j.end())
{
j.at("ipv6Addr").get_to(o.m_Ipv6Addr);
o.m_Ipv6AddrIsSet = true;
}
if(j.find("port") != j.end())
{
j.at("port").get_to(o.m_Port);
o.m_PortIsSet = true;
}
}
std::string DddTrafficDescriptor::getIpv4Addr() const
{
return m_Ipv4Addr;
}
void DddTrafficDescriptor::setIpv4Addr(std::string const& value)
{
m_Ipv4Addr = value;
m_Ipv4AddrIsSet = true;
}
bool DddTrafficDescriptor::ipv4AddrIsSet() const
{
return m_Ipv4AddrIsSet;
}
void DddTrafficDescriptor::unsetIpv4Addr()
{
m_Ipv4AddrIsSet = false;
}
Ipv6Addr DddTrafficDescriptor::getIpv6Addr() const
{
return m_Ipv6Addr;
}
void DddTrafficDescriptor::setIpv6Addr(Ipv6Addr const& value)
{
m_Ipv6Addr = value;
m_Ipv6AddrIsSet = true;
}
bool DddTrafficDescriptor::ipv6AddrIsSet() const
{
return m_Ipv6AddrIsSet;
}
void DddTrafficDescriptor::unsetIpv6Addr()
{
m_Ipv6AddrIsSet = false;
}
int32_t DddTrafficDescriptor::getPort() const
{
return m_Port;
}
void DddTrafficDescriptor::setPort(int32_t const value)
{
m_Port = value;
m_PortIsSet = true;
}
bool DddTrafficDescriptor::portIsSet() const
{
return m_PortIsSet;
}
void DddTrafficDescriptor::unsetPort()
{
m_PortIsSet = false;
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* DddTrafficDescriptor.h
*
*
*/
#ifndef DddTrafficDescriptor_H_
#define DddTrafficDescriptor_H_
#include <string>
#include "Ipv6Addr.h"
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
///
/// </summary>
class DddTrafficDescriptor
{
public:
DddTrafficDescriptor();
virtual ~DddTrafficDescriptor();
void validate();
/////////////////////////////////////////////
/// DddTrafficDescriptor members
/// <summary>
///
/// </summary>
std::string getIpv4Addr() const;
void setIpv4Addr(std::string const& value);
bool ipv4AddrIsSet() const;
void unsetIpv4Addr();
/// <summary>
///
/// </summary>
Ipv6Addr getIpv6Addr() const;
void setIpv6Addr(Ipv6Addr const& value);
bool ipv6AddrIsSet() const;
void unsetIpv6Addr();
/// <summary>
///
/// </summary>
int32_t getPort() const;
void setPort(int32_t const value);
bool portIsSet() const;
void unsetPort();
friend void to_json(nlohmann::json& j, const DddTrafficDescriptor& o);
friend void from_json(const nlohmann::json& j, DddTrafficDescriptor& o);
protected:
std::string m_Ipv4Addr;
bool m_Ipv4AddrIsSet;
Ipv6Addr m_Ipv6Addr;
bool m_Ipv6AddrIsSet;
int32_t m_Port;
bool m_PortIsSet;
};
}
}
}
#endif /* DddTrafficDescriptor_H_ */
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "DnaiChangeType.h"
namespace oai {
namespace smf_server {
namespace model {
DnaiChangeType::DnaiChangeType()
{
}
DnaiChangeType::~DnaiChangeType()
{
}
void DnaiChangeType::validate()
{
// TODO: implement validation
}
void to_json(nlohmann::json& j, const DnaiChangeType& o)
{
j = nlohmann::json();
}
void from_json(const nlohmann::json& j, DnaiChangeType& o)
{
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* DnaiChangeType.h
*
* Possible values are - EARLY: Early notification of UP path reconfiguration. - EARLY_LATE: Early and late notification of UP path reconfiguration. This value shall only be present in the subscription to the DNAI change event. - LATE: Late notification of UP path reconfiguration.
*/
#ifndef DnaiChangeType_H_
#define DnaiChangeType_H_
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
/// Possible values are - EARLY: Early notification of UP path reconfiguration. - EARLY_LATE: Early and late notification of UP path reconfiguration. This value shall only be present in the subscription to the DNAI change event. - LATE: Late notification of UP path reconfiguration.
/// </summary>
class DnaiChangeType
{
public:
DnaiChangeType();
virtual ~DnaiChangeType();
void validate();
/////////////////////////////////////////////
/// DnaiChangeType members
friend void to_json(nlohmann::json& j, const DnaiChangeType& o);
friend void from_json(const nlohmann::json& j, DnaiChangeType& o);
protected:
};
}
}
}
#endif /* DnaiChangeType_H_ */
This diff is collapsed.
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* EventNotification.h
*
*
*/
#ifndef EventNotification_H_
#define EventNotification_H_
#include "DnaiChangeType.h"
#include "DddStatus.h"
#include <string>
#include "Ipv6Prefix.h"
#include "SmfEvent.h"
#include "PlmnId.h"
#include "RouteToLocation.h"
#include "AccessType.h"
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
///
/// </summary>
class EventNotification
{
public:
EventNotification();
virtual ~EventNotification();
void validate();
/////////////////////////////////////////////
/// EventNotification members
/// <summary>
///
/// </summary>
SmfEvent getEvent() const;
void setEvent(SmfEvent const& value);
/// <summary>
///
/// </summary>
std::string getTimeStamp() const;
void setTimeStamp(std::string const& value);
/// <summary>
///
/// </summary>
std::string getSupi() const;
void setSupi(std::string const& value);
bool supiIsSet() const;
void unsetSupi();
/// <summary>
///
/// </summary>
std::string getGpsi() const;
void setGpsi(std::string const& value);
bool gpsiIsSet() const;
void unsetGpsi();
/// <summary>
///
/// </summary>
std::string getSourceDnai() const;
void setSourceDnai(std::string const& value);
bool sourceDnaiIsSet() const;
void unsetSourceDnai();
/// <summary>
///
/// </summary>
std::string getTargetDnai() const;
void setTargetDnai(std::string const& value);
bool targetDnaiIsSet() const;
void unsetTargetDnai();
/// <summary>
///
/// </summary>
DnaiChangeType getDnaiChgType() const;
void setDnaiChgType(DnaiChangeType const& value);
bool dnaiChgTypeIsSet() const;
void unsetDnaiChgType();
/// <summary>
///
/// </summary>
std::string getSourceUeIpv4Addr() const;
void setSourceUeIpv4Addr(std::string const& value);
bool sourceUeIpv4AddrIsSet() const;
void unsetSourceUeIpv4Addr();
/// <summary>
///
/// </summary>
Ipv6Prefix getSourceUeIpv6Prefix() const;
void setSourceUeIpv6Prefix(Ipv6Prefix const& value);
bool sourceUeIpv6PrefixIsSet() const;
void unsetSourceUeIpv6Prefix();
/// <summary>
///
/// </summary>
std::string getTargetUeIpv4Addr() const;
void setTargetUeIpv4Addr(std::string const& value);
bool targetUeIpv4AddrIsSet() const;
void unsetTargetUeIpv4Addr();
/// <summary>
///
/// </summary>
Ipv6Prefix getTargetUeIpv6Prefix() const;
void setTargetUeIpv6Prefix(Ipv6Prefix const& value);
bool targetUeIpv6PrefixIsSet() const;
void unsetTargetUeIpv6Prefix();
/// <summary>
///
/// </summary>
RouteToLocation getSourceTraRouting() const;
void setSourceTraRouting(RouteToLocation const& value);
bool sourceTraRoutingIsSet() const;
void unsetSourceTraRouting();
/// <summary>
///
/// </summary>
RouteToLocation getTargetTraRouting() const;
void setTargetTraRouting(RouteToLocation const& value);
bool targetTraRoutingIsSet() const;
void unsetTargetTraRouting();
/// <summary>
///
/// </summary>
std::string getUeMac() const;
void setUeMac(std::string const& value);
bool ueMacIsSet() const;
void unsetUeMac();
/// <summary>
///
/// </summary>
std::string getAdIpv4Addr() const;
void setAdIpv4Addr(std::string const& value);
bool adIpv4AddrIsSet() const;
void unsetAdIpv4Addr();
/// <summary>
///
/// </summary>
Ipv6Prefix getAdIpv6Prefix() const;
void setAdIpv6Prefix(Ipv6Prefix const& value);
bool adIpv6PrefixIsSet() const;
void unsetAdIpv6Prefix();
/// <summary>
///
/// </summary>
std::string getReIpv4Addr() const;
void setReIpv4Addr(std::string const& value);
bool reIpv4AddrIsSet() const;
void unsetReIpv4Addr();
/// <summary>
///
/// </summary>
Ipv6Prefix getReIpv6Prefix() const;
void setReIpv6Prefix(Ipv6Prefix const& value);
bool reIpv6PrefixIsSet() const;
void unsetReIpv6Prefix();
/// <summary>
///
/// </summary>
PlmnId getPlmnId() const;
void setPlmnId(PlmnId const& value);
bool plmnIdIsSet() const;
void unsetPlmnId();
/// <summary>
///
/// </summary>
AccessType getAccType() const;
void setAccType(AccessType const& value);
bool accTypeIsSet() const;
void unsetAccType();
/// <summary>
///
/// </summary>
int32_t getPduSeId() const;
void setPduSeId(int32_t const value);
bool pduSeIdIsSet() const;
void unsetPduSeId();
/// <summary>
///
/// </summary>
DddStatus getDddStatus() const;
void setDddStatus(DddStatus const& value);
bool dddStatusIsSet() const;
void unsetDddStatus();
/// <summary>
///
/// </summary>
std::string getMaxWaitTime() const;
void setMaxWaitTime(std::string const& value);
bool maxWaitTimeIsSet() const;
void unsetMaxWaitTime();
friend void to_json(nlohmann::json& j, const EventNotification& o);
friend void from_json(const nlohmann::json& j, EventNotification& o);
protected:
SmfEvent m_Event;
std::string m_TimeStamp;
std::string m_Supi;
bool m_SupiIsSet;
std::string m_Gpsi;
bool m_GpsiIsSet;
std::string m_SourceDnai;
bool m_SourceDnaiIsSet;
std::string m_TargetDnai;
bool m_TargetDnaiIsSet;
DnaiChangeType m_DnaiChgType;
bool m_DnaiChgTypeIsSet;
std::string m_SourceUeIpv4Addr;
bool m_SourceUeIpv4AddrIsSet;
Ipv6Prefix m_SourceUeIpv6Prefix;
bool m_SourceUeIpv6PrefixIsSet;
std::string m_TargetUeIpv4Addr;
bool m_TargetUeIpv4AddrIsSet;
Ipv6Prefix m_TargetUeIpv6Prefix;
bool m_TargetUeIpv6PrefixIsSet;
RouteToLocation m_SourceTraRouting;
bool m_SourceTraRoutingIsSet;
RouteToLocation m_TargetTraRouting;
bool m_TargetTraRoutingIsSet;
std::string m_UeMac;
bool m_UeMacIsSet;
std::string m_AdIpv4Addr;
bool m_AdIpv4AddrIsSet;
Ipv6Prefix m_AdIpv6Prefix;
bool m_AdIpv6PrefixIsSet;
std::string m_ReIpv4Addr;
bool m_ReIpv4AddrIsSet;
Ipv6Prefix m_ReIpv6Prefix;
bool m_ReIpv6PrefixIsSet;
PlmnId m_PlmnId;
bool m_PlmnIdIsSet;
AccessType m_AccType;
bool m_AccTypeIsSet;
int32_t m_PduSeId;
bool m_PduSeIdIsSet;
DddStatus m_DddStatus;
bool m_DddStatusIsSet;
std::string m_MaxWaitTime;
bool m_MaxWaitTimeIsSet;
};
}
}
}
#endif /* EventNotification_H_ */
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "EventSubscription.h"
namespace oai {
namespace smf_server {
namespace model {
EventSubscription::EventSubscription()
{
m_DnaiChgTypeIsSet = false;
m_DddTraDesIsSet = false;
m_DddStatiIsSet = false;
}
EventSubscription::~EventSubscription()
{
}
void EventSubscription::validate()
{
// TODO: implement validation
}
void to_json(nlohmann::json& j, const EventSubscription& o)
{
j = nlohmann::json();
j["event"] = o.m_Event;
if(o.dnaiChgTypeIsSet())
j["dnaiChgType"] = o.m_DnaiChgType;
if(o.dddTraDesIsSet())
j["dddTraDes"] = o.m_DddTraDes;
if(o.dddStatiIsSet() || !o.m_DddStati.empty())
j["dddStati"] = o.m_DddStati;
}
void from_json(const nlohmann::json& j, EventSubscription& o)
{
j.at("event").get_to(o.m_Event);
if(j.find("dnaiChgType") != j.end())
{
j.at("dnaiChgType").get_to(o.m_DnaiChgType);
o.m_DnaiChgTypeIsSet = true;
}
if(j.find("dddTraDes") != j.end())
{
j.at("dddTraDes").get_to(o.m_DddTraDes);
o.m_DddTraDesIsSet = true;
}
if(j.find("dddStati") != j.end())
{
j.at("dddStati").get_to(o.m_DddStati);
o.m_DddStatiIsSet = true;
}
}
SmfEvent EventSubscription::getEvent() const
{
return m_Event;
}
void EventSubscription::setEvent(SmfEvent const& value)
{
m_Event = value;
}
DnaiChangeType EventSubscription::getDnaiChgType() const
{
return m_DnaiChgType;
}
void EventSubscription::setDnaiChgType(DnaiChangeType const& value)
{
m_DnaiChgType = value;
m_DnaiChgTypeIsSet = true;
}
bool EventSubscription::dnaiChgTypeIsSet() const
{
return m_DnaiChgTypeIsSet;
}
void EventSubscription::unsetDnaiChgType()
{
m_DnaiChgTypeIsSet = false;
}
DddTrafficDescriptor EventSubscription::getDddTraDes() const
{
return m_DddTraDes;
}
void EventSubscription::setDddTraDes(DddTrafficDescriptor const& value)
{
m_DddTraDes = value;
m_DddTraDesIsSet = true;
}
bool EventSubscription::dddTraDesIsSet() const
{
return m_DddTraDesIsSet;
}
void EventSubscription::unsetDddTraDes()
{
m_DddTraDesIsSet = false;
}
std::vector<DddStatus>& EventSubscription::getDddStati()
{
return m_DddStati;
}
void EventSubscription::setDddStati(std::vector<DddStatus> const& value)
{
m_DddStati = value;
m_DddStatiIsSet = true;
}
bool EventSubscription::dddStatiIsSet() const
{
return m_DddStatiIsSet;
}
void EventSubscription::unsetDddStati()
{
m_DddStatiIsSet = false;
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* EventSubscription.h
*
*
*/
#ifndef EventSubscription_H_
#define EventSubscription_H_
#include "DnaiChangeType.h"
#include "DddTrafficDescriptor.h"
#include "DddStatus.h"
#include "SmfEvent.h"
#include <vector>
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
///
/// </summary>
class EventSubscription
{
public:
EventSubscription();
virtual ~EventSubscription();
void validate();
/////////////////////////////////////////////
/// EventSubscription members
/// <summary>
///
/// </summary>
SmfEvent getEvent() const;
void setEvent(SmfEvent const& value);
/// <summary>
///
/// </summary>
DnaiChangeType getDnaiChgType() const;
void setDnaiChgType(DnaiChangeType const& value);
bool dnaiChgTypeIsSet() const;
void unsetDnaiChgType();
/// <summary>
///
/// </summary>
DddTrafficDescriptor getDddTraDes() const;
void setDddTraDes(DddTrafficDescriptor const& value);
bool dddTraDesIsSet() const;
void unsetDddTraDes();
/// <summary>
///
/// </summary>
std::vector<DddStatus>& getDddStati();
void setDddStati(std::vector<DddStatus> const& value);
bool dddStatiIsSet() const;
void unsetDddStati();
friend void to_json(nlohmann::json& j, const EventSubscription& o);
friend void from_json(const nlohmann::json& j, EventSubscription& o);
protected:
SmfEvent m_Event;
DnaiChangeType m_DnaiChgType;
bool m_DnaiChgTypeIsSet;
DddTrafficDescriptor m_DddTraDes;
bool m_DddTraDesIsSet;
std::vector<DddStatus> m_DddStati;
bool m_DddStatiIsSet;
};
}
}
}
#endif /* EventSubscription_H_ */
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "Ipv6Addr.h"
namespace oai {
namespace smf_server {
namespace model {
Ipv6Addr::Ipv6Addr()
{
}
Ipv6Addr::~Ipv6Addr()
{
}
void Ipv6Addr::validate()
{
// TODO: implement validation
}
void to_json(nlohmann::json& j, const Ipv6Addr& o)
{
j = nlohmann::json();
}
void from_json(const nlohmann::json& j, Ipv6Addr& o)
{
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* Ipv6Addr.h
*
*
*/
#ifndef Ipv6Addr_H_
#define Ipv6Addr_H_
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
///
/// </summary>
class Ipv6Addr
{
public:
Ipv6Addr();
virtual ~Ipv6Addr();
void validate();
/////////////////////////////////////////////
/// Ipv6Addr members
friend void to_json(nlohmann::json& j, const Ipv6Addr& o);
friend void from_json(const nlohmann::json& j, Ipv6Addr& o);
protected:
};
}
}
}
#endif /* Ipv6Addr_H_ */
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "Ipv6Prefix.h"
namespace oai {
namespace smf_server {
namespace model {
Ipv6Prefix::Ipv6Prefix()
{
}
Ipv6Prefix::~Ipv6Prefix()
{
}
void Ipv6Prefix::validate()
{
// TODO: implement validation
}
void to_json(nlohmann::json& j, const Ipv6Prefix& o)
{
j = nlohmann::json();
}
void from_json(const nlohmann::json& j, Ipv6Prefix& o)
{
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* Ipv6Prefix.h
*
*
*/
#ifndef Ipv6Prefix_H_
#define Ipv6Prefix_H_
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
///
/// </summary>
class Ipv6Prefix
{
public:
Ipv6Prefix();
virtual ~Ipv6Prefix();
void validate();
/////////////////////////////////////////////
/// Ipv6Prefix members
friend void to_json(nlohmann::json& j, const Ipv6Prefix& o);
friend void from_json(const nlohmann::json& j, Ipv6Prefix& o);
protected:
};
}
}
}
#endif /* Ipv6Prefix_H_ */
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "NotificationMethod.h"
namespace oai {
namespace smf_server {
namespace model {
NotificationMethod::NotificationMethod()
{
}
NotificationMethod::~NotificationMethod()
{
}
void NotificationMethod::validate()
{
// TODO: implement validation
}
void to_json(nlohmann::json& j, const NotificationMethod& o)
{
j = nlohmann::json();
}
void from_json(const nlohmann::json& j, NotificationMethod& o)
{
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* NotificationMethod.h
*
* Possible values are - PERIODIC - ONE_TIME - ON_EVENT_DETECTION
*/
#ifndef NotificationMethod_H_
#define NotificationMethod_H_
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
/// Possible values are - PERIODIC - ONE_TIME - ON_EVENT_DETECTION
/// </summary>
class NotificationMethod
{
public:
NotificationMethod();
virtual ~NotificationMethod();
void validate();
/////////////////////////////////////////////
/// NotificationMethod members
friend void to_json(nlohmann::json& j, const NotificationMethod& o);
friend void from_json(const nlohmann::json& j, NotificationMethod& o);
protected:
};
}
}
}
#endif /* NotificationMethod_H_ */
This diff is collapsed.
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* NsmfEventExposure.h
*
*
*/
#ifndef NsmfEventExposure_H_
#define NsmfEventExposure_H_
#include "EventSubscription.h"
#include "NotificationMethod.h"
#include <string>
#include "Ipv6Addr.h"
#include <vector>
#include "Guami.h"
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
///
/// </summary>
class NsmfEventExposure
{
public:
NsmfEventExposure();
virtual ~NsmfEventExposure();
void validate();
/////////////////////////////////////////////
/// NsmfEventExposure members
/// <summary>
///
/// </summary>
std::string getSupi() const;
void setSupi(std::string const& value);
bool supiIsSet() const;
void unsetSupi();
/// <summary>
///
/// </summary>
std::string getGpsi() const;
void setGpsi(std::string const& value);
bool gpsiIsSet() const;
void unsetGpsi();
/// <summary>
/// Any UE indication. This IE shall be present if the event subscription is applicable to any UE. Default value \&quot;FALSE\&quot; is used, if not present.
/// </summary>
bool isAnyUeInd() const;
void setAnyUeInd(bool const value);
bool anyUeIndIsSet() const;
void unsetAnyUeInd();
/// <summary>
///
/// </summary>
std::string getGroupId() const;
void setGroupId(std::string const& value);
bool groupIdIsSet() const;
void unsetGroupId();
/// <summary>
///
/// </summary>
int32_t getPduSeId() const;
void setPduSeId(int32_t const value);
bool pduSeIdIsSet() const;
void unsetPduSeId();
/// <summary>
/// Identifies an Individual SMF Notification Subscription. To enable that the value is used as part of a URI, the string shall only contain characters allowed according to the \&quot;lower-with-hyphen\&quot; naming convention defined in 3GPP TS 29.501 [2]. In an OpenAPI [10] schema, the format shall be designated as \&quot;SubId\&quot;.
/// </summary>
std::string getSubId() const;
void setSubId(std::string const& value);
bool subIdIsSet() const;
void unsetSubId();
/// <summary>
/// Notification Correlation ID assigned by the NF service consumer.
/// </summary>
std::string getNotifId() const;
void setNotifId(std::string const& value);
/// <summary>
///
/// </summary>
std::string getNotifUri() const;
void setNotifUri(std::string const& value);
/// <summary>
/// Alternate or backup IPv4 Addess(es) where to send Notifications.
/// </summary>
std::vector<std::string>& getAltNotifIpv4Addrs();
void setAltNotifIpv4Addrs(std::vector<std::string> const& value);
bool altNotifIpv4AddrsIsSet() const;
void unsetAltNotifIpv4Addrs();
/// <summary>
/// Alternate or backup IPv6 Addess(es) where to send Notifications.
/// </summary>
std::vector<Ipv6Addr>& getAltNotifIpv6Addrs();
void setAltNotifIpv6Addrs(std::vector<Ipv6Addr> const& value);
bool altNotifIpv6AddrsIsSet() const;
void unsetAltNotifIpv6Addrs();
/// <summary>
/// Subscribed events
/// </summary>
std::vector<EventSubscription>& getEventSubs();
void setEventSubs(std::vector<EventSubscription> const& value);
/// <summary>
///
/// </summary>
bool isImmeRep() const;
void setImmeRep(bool const value);
bool immeRepIsSet() const;
void unsetImmeRep();
/// <summary>
///
/// </summary>
NotificationMethod getNotifMethod() const;
void setNotifMethod(NotificationMethod const& value);
bool notifMethodIsSet() const;
void unsetNotifMethod();
/// <summary>
///
/// </summary>
int32_t getMaxReportNbr() const;
void setMaxReportNbr(int32_t const value);
bool maxReportNbrIsSet() const;
void unsetMaxReportNbr();
/// <summary>
///
/// </summary>
std::string getExpiry() const;
void setExpiry(std::string const& value);
bool expiryIsSet() const;
void unsetExpiry();
/// <summary>
///
/// </summary>
int32_t getRepPeriod() const;
void setRepPeriod(int32_t const value);
bool repPeriodIsSet() const;
void unsetRepPeriod();
/// <summary>
///
/// </summary>
Guami getGuami() const;
void setGuami(Guami const& value);
bool guamiIsSet() const;
void unsetGuami();
/// <summary>
/// If the NF service consumer is an AMF, it should provide the name of a service produced by the AMF that makes use of notifications about subscribed events.
/// </summary>
std::string getServiveName() const;
void setServiveName(std::string const& value);
bool serviveNameIsSet() const;
void unsetServiveName();
/// <summary>
///
/// </summary>
std::string getSupportedFeatures() const;
void setSupportedFeatures(std::string const& value);
bool supportedFeaturesIsSet() const;
void unsetSupportedFeatures();
friend void to_json(nlohmann::json& j, const NsmfEventExposure& o);
friend void from_json(const nlohmann::json& j, NsmfEventExposure& o);
protected:
std::string m_Supi;
bool m_SupiIsSet;
std::string m_Gpsi;
bool m_GpsiIsSet;
bool m_AnyUeInd;
bool m_AnyUeIndIsSet;
std::string m_GroupId;
bool m_GroupIdIsSet;
int32_t m_PduSeId;
bool m_PduSeIdIsSet;
std::string m_SubId;
bool m_SubIdIsSet;
std::string m_NotifId;
std::string m_NotifUri;
std::vector<std::string> m_AltNotifIpv4Addrs;
bool m_AltNotifIpv4AddrsIsSet;
std::vector<Ipv6Addr> m_AltNotifIpv6Addrs;
bool m_AltNotifIpv6AddrsIsSet;
std::vector<EventSubscription> m_EventSubs;
bool m_ImmeRep;
bool m_ImmeRepIsSet;
NotificationMethod m_NotifMethod;
bool m_NotifMethodIsSet;
int32_t m_MaxReportNbr;
bool m_MaxReportNbrIsSet;
std::string m_Expiry;
bool m_ExpiryIsSet;
int32_t m_RepPeriod;
bool m_RepPeriodIsSet;
Guami m_Guami;
bool m_GuamiIsSet;
std::string m_ServiveName;
bool m_ServiveNameIsSet;
std::string m_SupportedFeatures;
bool m_SupportedFeaturesIsSet;
};
}
}
}
#endif /* NsmfEventExposure_H_ */
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "NsmfEventExposureNotification.h"
namespace oai {
namespace smf_server {
namespace model {
NsmfEventExposureNotification::NsmfEventExposureNotification()
{
m_NotifId = "";
}
NsmfEventExposureNotification::~NsmfEventExposureNotification()
{
}
void NsmfEventExposureNotification::validate()
{
// TODO: implement validation
}
void to_json(nlohmann::json& j, const NsmfEventExposureNotification& o)
{
j = nlohmann::json();
j["notifId"] = o.m_NotifId;
j["eventNotifs"] = o.m_EventNotifs;
}
void from_json(const nlohmann::json& j, NsmfEventExposureNotification& o)
{
j.at("notifId").get_to(o.m_NotifId);
j.at("eventNotifs").get_to(o.m_EventNotifs);
}
std::string NsmfEventExposureNotification::getNotifId() const
{
return m_NotifId;
}
void NsmfEventExposureNotification::setNotifId(std::string const& value)
{
m_NotifId = value;
}
std::vector<EventNotification>& NsmfEventExposureNotification::getEventNotifs()
{
return m_EventNotifs;
}
void NsmfEventExposureNotification::setEventNotifs(std::vector<EventNotification> const& value)
{
m_EventNotifs = value;
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* NsmfEventExposureNotification.h
*
*
*/
#ifndef NsmfEventExposureNotification_H_
#define NsmfEventExposureNotification_H_
#include <string>
#include <vector>
#include "EventNotification.h"
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
///
/// </summary>
class NsmfEventExposureNotification
{
public:
NsmfEventExposureNotification();
virtual ~NsmfEventExposureNotification();
void validate();
/////////////////////////////////////////////
/// NsmfEventExposureNotification members
/// <summary>
/// Notification correlation ID
/// </summary>
std::string getNotifId() const;
void setNotifId(std::string const& value);
/// <summary>
/// Notifications about Individual Events
/// </summary>
std::vector<EventNotification>& getEventNotifs();
void setEventNotifs(std::vector<EventNotification> const& value);
friend void to_json(nlohmann::json& j, const NsmfEventExposureNotification& o);
friend void from_json(const nlohmann::json& j, NsmfEventExposureNotification& o);
protected:
std::string m_NotifId;
std::vector<EventNotification> m_EventNotifs;
};
}
}
}
#endif /* NsmfEventExposureNotification_H_ */
...@@ -61,7 +61,7 @@ void to_json(nlohmann::json& j, const ProblemDetails& o) ...@@ -61,7 +61,7 @@ void to_json(nlohmann::json& j, const ProblemDetails& o)
j["instance"] = o.m_Instance; j["instance"] = o.m_Instance;
if(o.causeIsSet()) if(o.causeIsSet())
j["cause"] = o.m_Cause; j["cause"] = o.m_Cause;
if(o.invalidParamsIsSet()) if(o.invalidParamsIsSet() || !o.m_InvalidParams.empty())
j["invalidParams"] = o.m_InvalidParams; j["invalidParams"] = o.m_InvalidParams;
if(o.supportedFeaturesIsSet()) if(o.supportedFeaturesIsSet())
j["supportedFeatures"] = o.m_SupportedFeatures; j["supportedFeatures"] = o.m_SupportedFeatures;
...@@ -217,6 +217,11 @@ std::vector<InvalidParam>& ProblemDetails::getInvalidParams() ...@@ -217,6 +217,11 @@ std::vector<InvalidParam>& ProblemDetails::getInvalidParams()
{ {
return m_InvalidParams; return m_InvalidParams;
} }
void ProblemDetails::setInvalidParams(std::vector<InvalidParam> const& value)
{
m_InvalidParams = value;
m_InvalidParamsIsSet = true;
}
bool ProblemDetails::invalidParamsIsSet() const bool ProblemDetails::invalidParamsIsSet() const
{ {
return m_InvalidParamsIsSet; return m_InvalidParamsIsSet;
......
...@@ -88,6 +88,7 @@ public: ...@@ -88,6 +88,7 @@ public:
/// ///
/// </summary> /// </summary>
std::vector<InvalidParam>& getInvalidParams(); std::vector<InvalidParam>& getInvalidParams();
void setInvalidParams(std::vector<InvalidParam> const& value);
bool invalidParamsIsSet() const; bool invalidParamsIsSet() const;
void unsetInvalidParams(); void unsetInvalidParams();
/// <summary> /// <summary>
......
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "RouteInformation.h"
namespace oai {
namespace smf_server {
namespace model {
RouteInformation::RouteInformation()
{
m_Ipv4Addr = "";
m_Ipv4AddrIsSet = false;
m_Ipv6AddrIsSet = false;
m_PortNumber = 0;
}
RouteInformation::~RouteInformation()
{
}
void RouteInformation::validate()
{
// TODO: implement validation
}
void to_json(nlohmann::json& j, const RouteInformation& o)
{
j = nlohmann::json();
if(o.ipv4AddrIsSet())
j["ipv4Addr"] = o.m_Ipv4Addr;
if(o.ipv6AddrIsSet())
j["ipv6Addr"] = o.m_Ipv6Addr;
j["portNumber"] = o.m_PortNumber;
}
void from_json(const nlohmann::json& j, RouteInformation& o)
{
if(j.find("ipv4Addr") != j.end())
{
j.at("ipv4Addr").get_to(o.m_Ipv4Addr);
o.m_Ipv4AddrIsSet = true;
}
if(j.find("ipv6Addr") != j.end())
{
j.at("ipv6Addr").get_to(o.m_Ipv6Addr);
o.m_Ipv6AddrIsSet = true;
}
j.at("portNumber").get_to(o.m_PortNumber);
}
std::string RouteInformation::getIpv4Addr() const
{
return m_Ipv4Addr;
}
void RouteInformation::setIpv4Addr(std::string const& value)
{
m_Ipv4Addr = value;
m_Ipv4AddrIsSet = true;
}
bool RouteInformation::ipv4AddrIsSet() const
{
return m_Ipv4AddrIsSet;
}
void RouteInformation::unsetIpv4Addr()
{
m_Ipv4AddrIsSet = false;
}
Ipv6Addr RouteInformation::getIpv6Addr() const
{
return m_Ipv6Addr;
}
void RouteInformation::setIpv6Addr(Ipv6Addr const& value)
{
m_Ipv6Addr = value;
m_Ipv6AddrIsSet = true;
}
bool RouteInformation::ipv6AddrIsSet() const
{
return m_Ipv6AddrIsSet;
}
void RouteInformation::unsetIpv6Addr()
{
m_Ipv6AddrIsSet = false;
}
int32_t RouteInformation::getPortNumber() const
{
return m_PortNumber;
}
void RouteInformation::setPortNumber(int32_t const value)
{
m_PortNumber = value;
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* RouteInformation.h
*
*
*/
#ifndef RouteInformation_H_
#define RouteInformation_H_
#include <string>
#include "Ipv6Addr.h"
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
///
/// </summary>
class RouteInformation
{
public:
RouteInformation();
virtual ~RouteInformation();
void validate();
/////////////////////////////////////////////
/// RouteInformation members
/// <summary>
///
/// </summary>
std::string getIpv4Addr() const;
void setIpv4Addr(std::string const& value);
bool ipv4AddrIsSet() const;
void unsetIpv4Addr();
/// <summary>
///
/// </summary>
Ipv6Addr getIpv6Addr() const;
void setIpv6Addr(Ipv6Addr const& value);
bool ipv6AddrIsSet() const;
void unsetIpv6Addr();
/// <summary>
///
/// </summary>
int32_t getPortNumber() const;
void setPortNumber(int32_t const value);
friend void to_json(nlohmann::json& j, const RouteInformation& o);
friend void from_json(const nlohmann::json& j, RouteInformation& o);
protected:
std::string m_Ipv4Addr;
bool m_Ipv4AddrIsSet;
Ipv6Addr m_Ipv6Addr;
bool m_Ipv6AddrIsSet;
int32_t m_PortNumber;
};
}
}
}
#endif /* RouteInformation_H_ */
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "RouteToLocation.h"
namespace oai {
namespace smf_server {
namespace model {
RouteToLocation::RouteToLocation()
{
m_Dnai = "";
m_RouteInfoIsSet = false;
m_RouteProfId = "";
m_RouteProfIdIsSet = false;
}
RouteToLocation::~RouteToLocation()
{
}
void RouteToLocation::validate()
{
// TODO: implement validation
}
void to_json(nlohmann::json& j, const RouteToLocation& o)
{
j = nlohmann::json();
j["dnai"] = o.m_Dnai;
if(o.routeInfoIsSet())
j["routeInfo"] = o.m_RouteInfo;
if(o.routeProfIdIsSet())
j["routeProfId"] = o.m_RouteProfId;
}
void from_json(const nlohmann::json& j, RouteToLocation& o)
{
j.at("dnai").get_to(o.m_Dnai);
if(j.find("routeInfo") != j.end())
{
j.at("routeInfo").get_to(o.m_RouteInfo);
o.m_RouteInfoIsSet = true;
}
if(j.find("routeProfId") != j.end())
{
j.at("routeProfId").get_to(o.m_RouteProfId);
o.m_RouteProfIdIsSet = true;
}
}
std::string RouteToLocation::getDnai() const
{
return m_Dnai;
}
void RouteToLocation::setDnai(std::string const& value)
{
m_Dnai = value;
}
RouteInformation RouteToLocation::getRouteInfo() const
{
return m_RouteInfo;
}
void RouteToLocation::setRouteInfo(RouteInformation const& value)
{
m_RouteInfo = value;
m_RouteInfoIsSet = true;
}
bool RouteToLocation::routeInfoIsSet() const
{
return m_RouteInfoIsSet;
}
void RouteToLocation::unsetRouteInfo()
{
m_RouteInfoIsSet = false;
}
std::string RouteToLocation::getRouteProfId() const
{
return m_RouteProfId;
}
void RouteToLocation::setRouteProfId(std::string const& value)
{
m_RouteProfId = value;
m_RouteProfIdIsSet = true;
}
bool RouteToLocation::routeProfIdIsSet() const
{
return m_RouteProfIdIsSet;
}
void RouteToLocation::unsetRouteProfId()
{
m_RouteProfIdIsSet = false;
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* RouteToLocation.h
*
*
*/
#ifndef RouteToLocation_H_
#define RouteToLocation_H_
#include <string>
#include "RouteInformation.h"
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
///
/// </summary>
class RouteToLocation
{
public:
RouteToLocation();
virtual ~RouteToLocation();
void validate();
/////////////////////////////////////////////
/// RouteToLocation members
/// <summary>
///
/// </summary>
std::string getDnai() const;
void setDnai(std::string const& value);
/// <summary>
///
/// </summary>
RouteInformation getRouteInfo() const;
void setRouteInfo(RouteInformation const& value);
bool routeInfoIsSet() const;
void unsetRouteInfo();
/// <summary>
///
/// </summary>
std::string getRouteProfId() const;
void setRouteProfId(std::string const& value);
bool routeProfIdIsSet() const;
void unsetRouteProfId();
friend void to_json(nlohmann::json& j, const RouteToLocation& o);
friend void from_json(const nlohmann::json& j, RouteToLocation& o);
protected:
std::string m_Dnai;
RouteInformation m_RouteInfo;
bool m_RouteInfoIsSet;
std::string m_RouteProfId;
bool m_RouteProfIdIsSet;
};
}
}
}
#endif /* RouteToLocation_H_ */
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#include "SmfEvent.h"
namespace oai {
namespace smf_server {
namespace model {
SmfEvent::SmfEvent()
{
}
SmfEvent::~SmfEvent()
{
}
void SmfEvent::validate()
{
// TODO: implement validation
}
void to_json(nlohmann::json& j, const SmfEvent& o)
{
j = nlohmann::json();
}
void from_json(const nlohmann::json& j, SmfEvent& o)
{
}
}
}
}
/**
* Nsmf_EventExposure
* Session Management Event Exposure Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
*
* The version of the OpenAPI document: 1.1.0.alpha-1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* SmfEvent.h
*
* Possible values are - AC_TY_CH: Access Type Change - UP_PATH_CH: UP Path Change - PDU_SES_REL: PDU Session Release - PLMN_CH: PLMN Change - UE_IP_CH: UE IP address change - DDDS: Downlink data delivery status
*/
#ifndef SmfEvent_H_
#define SmfEvent_H_
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
/// Possible values are - AC_TY_CH: Access Type Change - UP_PATH_CH: UP Path Change - PDU_SES_REL: PDU Session Release - PLMN_CH: PLMN Change - UE_IP_CH: UE IP address change - DDDS: Downlink data delivery status
/// </summary>
class SmfEvent
{
public:
SmfEvent();
virtual ~SmfEvent();
void validate();
/////////////////////////////////////////////
/// SmfEvent members
friend void to_json(nlohmann::json& j, const SmfEvent& o);
friend void from_json(const nlohmann::json& j, SmfEvent& o);
protected:
};
}
}
}
#endif /* SmfEvent_H_ */
...@@ -82,6 +82,8 @@ void SMFApiServer::init(size_t thr) { ...@@ -82,6 +82,8 @@ void SMFApiServer::init(size_t thr) {
m_individualSMContextApiImpl->init(); m_individualSMContextApiImpl->init();
m_pduSessionsCollectionApiImpl->init(); m_pduSessionsCollectionApiImpl->init();
m_smContextsCollectionApiImpl->init(); m_smContextsCollectionApiImpl->init();
m_individualSubscriptionDocumentApiImpl->init();
m_subscriptionsCollectionApiImpl->init();
} }
void SMFApiServer::start() { void SMFApiServer::start() {
......
...@@ -47,6 +47,9 @@ ...@@ -47,6 +47,9 @@
#include "IndividualSMContextApiImpl.h" #include "IndividualSMContextApiImpl.h"
#include "PDUSessionsCollectionApiImpl.h" #include "PDUSessionsCollectionApiImpl.h"
#include "SMContextsCollectionApiImpl.h" #include "SMContextsCollectionApiImpl.h"
#include "IndividualSubscriptionDocumentApiImpl.h"
#include "SubscriptionsCollectionApiImpl.h"
#include "smf_app.hpp" #include "smf_app.hpp"
using namespace oai::smf_server::api; using namespace oai::smf_server::api;
...@@ -66,6 +69,12 @@ class SMFApiServer { ...@@ -66,6 +69,12 @@ class SMFApiServer {
m_smContextsCollectionApiImpl = m_smContextsCollectionApiImpl =
std::make_shared<SMContextsCollectionApiImpl>(m_router, smf_app_inst, std::make_shared<SMContextsCollectionApiImpl>(m_router, smf_app_inst,
m_address); m_address);
m_individualSubscriptionDocumentApiImpl = std::make_shared
< IndividualSubscriptionDocumentApiImpl
> (m_router, smf_app_inst, m_address);
m_subscriptionsCollectionApiImpl = std::make_shared
< SubscriptionsCollectionApiImpl > (m_router, smf_app_inst, m_address);
} }
void init(size_t thr = 1); void init(size_t thr = 1);
void start(); void start();
...@@ -78,6 +87,8 @@ class SMFApiServer { ...@@ -78,6 +87,8 @@ class SMFApiServer {
std::shared_ptr<IndividualSMContextApiImpl> m_individualSMContextApiImpl; std::shared_ptr<IndividualSMContextApiImpl> m_individualSMContextApiImpl;
std::shared_ptr<PDUSessionsCollectionApiImpl> m_pduSessionsCollectionApiImpl; std::shared_ptr<PDUSessionsCollectionApiImpl> m_pduSessionsCollectionApiImpl;
std::shared_ptr<SMContextsCollectionApiImpl> m_smContextsCollectionApiImpl; std::shared_ptr<SMContextsCollectionApiImpl> m_smContextsCollectionApiImpl;
std::shared_ptr<IndividualSubscriptionDocumentApiImpl> m_individualSubscriptionDocumentApiImpl;
std::shared_ptr<SubscriptionsCollectionApiImpl> m_subscriptionsCollectionApiImpl;
std::string m_address; std::string m_address;
}; };
......
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