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

Refactor NGSetupFailure and its IEs

parent dacb523b
...@@ -20,56 +20,55 @@ ...@@ -20,56 +20,55 @@
*/ */
#include "Cause.hpp" #include "Cause.hpp"
#include "logger.hpp"
#include <iostream>
using namespace std;
namespace ngap { namespace ngap {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Cause::Cause() { Cause::Cause() {
causeValue = -1; cause_present_ = Ngap_Cause_PR_NOTHING;
cause_value_ = -1;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Cause::~Cause() {} Cause::~Cause() {}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void Cause::setChoiceOfCause(Ngap_Cause_PR m_causePresent) { void Cause::setChoiceOfCause(const Ngap_Cause_PR& cause_present) {
causePresent = m_causePresent; cause_present_ = cause_present;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void Cause::setValue(long m_causeValue) { void Cause::setValue(const long& cause_value) {
causeValue = m_causeValue; cause_value_ = cause_value;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool Cause::encode2Cause(Ngap_Cause_t* cause) { bool Cause::encode(Ngap_Cause_t& cause) const {
cause->present = causePresent; cause.present = cause_present_;
switch (causePresent) { switch (cause_present_) {
case Ngap_Cause_PR_radioNetwork: { case Ngap_Cause_PR_radioNetwork: {
cause->choice.radioNetwork = causeValue; cause.choice.radioNetwork = cause_value_;
break; break;
} }
case Ngap_Cause_PR_transport: { case Ngap_Cause_PR_transport: {
cause->choice.transport = causeValue; cause.choice.transport = cause_value_;
break; break;
} }
case Ngap_Cause_PR_nas: { case Ngap_Cause_PR_nas: {
cause->choice.nas = causeValue; cause.choice.nas = cause_value_;
break; break;
} }
case Ngap_Cause_PR_protocol: { case Ngap_Cause_PR_protocol: {
cause->choice.protocol = causeValue; cause.choice.protocol = cause_value_;
break; break;
} }
case Ngap_Cause_PR_misc: { case Ngap_Cause_PR_misc: {
cause->choice.misc = causeValue; cause.choice.misc = cause_value_;
break; break;
} }
default: { default: {
cout << "[Warning] Cause Present error!" << endl; Logger::ngap().warn("Cause Present error!");
return false; return false;
break; break;
} }
...@@ -78,26 +77,26 @@ bool Cause::encode2Cause(Ngap_Cause_t* cause) { ...@@ -78,26 +77,26 @@ bool Cause::encode2Cause(Ngap_Cause_t* cause) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool Cause::decodefromCause(Ngap_Cause_t* pdu) { bool Cause::decode(const Ngap_Cause_t& cause) {
causePresent = pdu->present; cause_present_ = cause.present;
switch (causePresent) { switch (cause_present_) {
case Ngap_Cause_PR_radioNetwork: { case Ngap_Cause_PR_radioNetwork: {
causeValue = pdu->choice.radioNetwork; cause_value_ = cause.choice.radioNetwork;
} break; } break;
case Ngap_Cause_PR_transport: { case Ngap_Cause_PR_transport: {
causeValue = pdu->choice.transport; cause_value_ = cause.choice.transport;
} break; } break;
case Ngap_Cause_PR_nas: { case Ngap_Cause_PR_nas: {
causeValue = pdu->choice.nas; cause_value_ = cause.choice.nas;
} break; } break;
case Ngap_Cause_PR_protocol: { case Ngap_Cause_PR_protocol: {
causeValue = pdu->choice.protocol; cause_value_ = cause.choice.protocol;
} break; } break;
case Ngap_Cause_PR_misc: { case Ngap_Cause_PR_misc: {
causeValue = pdu->choice.misc; cause_value_ = cause.choice.misc;
} break; } break;
default: { default: {
cout << "[Warning] Cause Present error!" << endl; Logger::ngap().warn("Cause Present error!");
return false; return false;
} }
} }
...@@ -105,12 +104,12 @@ bool Cause::decodefromCause(Ngap_Cause_t* pdu) { ...@@ -105,12 +104,12 @@ bool Cause::decodefromCause(Ngap_Cause_t* pdu) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Ngap_Cause_PR Cause::getChoiceOfCause() { Ngap_Cause_PR Cause::getChoiceOfCause() const {
return causePresent; return cause_present_;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
long Cause::getValue() { long Cause::getValue() const {
return causeValue; return cause_value_;
} }
} // namespace ngap } // namespace ngap
...@@ -33,16 +33,16 @@ class Cause { ...@@ -33,16 +33,16 @@ class Cause {
Cause(); Cause();
virtual ~Cause(); virtual ~Cause();
bool encode2Cause(Ngap_Cause_t* cause); bool encode(Ngap_Cause_t& cause) const;
bool decodefromCause(Ngap_Cause_t* pdu); bool decode(const Ngap_Cause_t& cause);
void setChoiceOfCause(Ngap_Cause_PR m_causePresent); void setChoiceOfCause(const Ngap_Cause_PR& cause_present);
Ngap_Cause_PR getChoiceOfCause(); Ngap_Cause_PR getChoiceOfCause() const;
void setValue(long); void setValue(const long& value);
long getValue(); long getValue() const;
private: private:
long causeValue; long cause_value_;
Ngap_Cause_PR causePresent; Ngap_Cause_PR cause_present_;
}; };
} // namespace ngap } // namespace ngap
......
...@@ -56,8 +56,8 @@ void PDUSessionResourceReleaseCommandTransfer::setCauseRadioNetwork( ...@@ -56,8 +56,8 @@ void PDUSessionResourceReleaseCommandTransfer::setCauseRadioNetwork(
causeValue->setChoiceOfCause(Ngap_Cause_PR_radioNetwork); causeValue->setChoiceOfCause(Ngap_Cause_PR_radioNetwork);
causeValue->setValue(cause_value); causeValue->setValue(cause_value);
int ret = causeValue->encode2Cause( int ret =
&pduSessionResourceReleaseCommandTransferIEs->cause); causeValue->encode(pduSessionResourceReleaseCommandTransferIEs->cause);
if (!ret) { if (!ret) {
cout << "encode CauseRadioNetwork IE error" << endl; cout << "encode CauseRadioNetwork IE error" << endl;
return; return;
...@@ -70,8 +70,8 @@ void PDUSessionResourceReleaseCommandTransfer::setCauseTransport( ...@@ -70,8 +70,8 @@ void PDUSessionResourceReleaseCommandTransfer::setCauseTransport(
causeValue->setChoiceOfCause(Ngap_Cause_PR_transport); causeValue->setChoiceOfCause(Ngap_Cause_PR_transport);
causeValue->setValue(cause_value); causeValue->setValue(cause_value);
int ret = causeValue->encode2Cause( int ret =
&pduSessionResourceReleaseCommandTransferIEs->cause); causeValue->encode(pduSessionResourceReleaseCommandTransferIEs->cause);
if (!ret) { if (!ret) {
cout << "encode CauseTransport IE error" << endl; cout << "encode CauseTransport IE error" << endl;
return; return;
...@@ -84,8 +84,8 @@ void PDUSessionResourceReleaseCommandTransfer::setCauseNas( ...@@ -84,8 +84,8 @@ void PDUSessionResourceReleaseCommandTransfer::setCauseNas(
causeValue->setChoiceOfCause(Ngap_Cause_PR_nas); causeValue->setChoiceOfCause(Ngap_Cause_PR_nas);
causeValue->setValue(cause_value); causeValue->setValue(cause_value);
int ret = causeValue->encode2Cause( int ret =
&pduSessionResourceReleaseCommandTransferIEs->cause); causeValue->encode(pduSessionResourceReleaseCommandTransferIEs->cause);
if (!ret) { if (!ret) {
cout << "encode CauseNas IE error" << endl; cout << "encode CauseNas IE error" << endl;
return; return;
...@@ -98,8 +98,8 @@ void PDUSessionResourceReleaseCommandTransfer::setCauseProtocol( ...@@ -98,8 +98,8 @@ void PDUSessionResourceReleaseCommandTransfer::setCauseProtocol(
causeValue->setChoiceOfCause(Ngap_Cause_PR_protocol); causeValue->setChoiceOfCause(Ngap_Cause_PR_protocol);
causeValue->setValue(cause_value); causeValue->setValue(cause_value);
int ret = causeValue->encode2Cause( int ret =
&pduSessionResourceReleaseCommandTransferIEs->cause); causeValue->encode(pduSessionResourceReleaseCommandTransferIEs->cause);
if (!ret) { if (!ret) {
cout << "encode CauseProtocol IE error" << endl; cout << "encode CauseProtocol IE error" << endl;
return; return;
...@@ -112,8 +112,8 @@ void PDUSessionResourceReleaseCommandTransfer::setCauseMisc( ...@@ -112,8 +112,8 @@ void PDUSessionResourceReleaseCommandTransfer::setCauseMisc(
causeValue->setChoiceOfCause(Ngap_Cause_PR_misc); causeValue->setChoiceOfCause(Ngap_Cause_PR_misc);
causeValue->setValue(cause_value); causeValue->setValue(cause_value);
int ret = causeValue->encode2Cause( int ret =
&pduSessionResourceReleaseCommandTransferIEs->cause); causeValue->encode(pduSessionResourceReleaseCommandTransferIEs->cause);
if (!ret) { if (!ret) {
cout << "encode CauseMisc IE error" << endl; cout << "encode CauseMisc IE error" << endl;
return; return;
...@@ -155,8 +155,7 @@ bool PDUSessionResourceReleaseCommandTransfer::decodefromIE( ...@@ -155,8 +155,7 @@ bool PDUSessionResourceReleaseCommandTransfer::decodefromIE(
// pduSessionResourceSetupUnsuccessfulTransferIEs); // pduSessionResourceSetupUnsuccessfulTransferIEs);
causeValue = new Cause(); causeValue = new Cause();
if (!causeValue->decodefromCause( if (!causeValue->decode(pduSessionResourceReleaseCommandTransferIEs->cause)) {
&pduSessionResourceReleaseCommandTransferIEs->cause)) {
cout << "decoded ngap Cause IE error" << endl; cout << "decoded ngap Cause IE error" << endl;
return false; return false;
} }
......
...@@ -55,8 +55,8 @@ void PduSessionResourceSetupUnSuccessfulTransferIE::setCauseRadioNetwork( ...@@ -55,8 +55,8 @@ void PduSessionResourceSetupUnSuccessfulTransferIE::setCauseRadioNetwork(
causeValue->setChoiceOfCause(Ngap_Cause_PR_radioNetwork); causeValue->setChoiceOfCause(Ngap_Cause_PR_radioNetwork);
causeValue->setValue(cause_value); causeValue->setValue(cause_value);
int ret = causeValue->encode2Cause( int ret =
&pduSessionResourceSetupUnsuccessfulTransferIEs->cause); causeValue->encode(pduSessionResourceSetupUnsuccessfulTransferIEs->cause);
if (!ret) { if (!ret) {
cout << "encode CauseRadioNetwork IE error" << endl; cout << "encode CauseRadioNetwork IE error" << endl;
return; return;
...@@ -71,8 +71,8 @@ void PduSessionResourceSetupUnSuccessfulTransferIE::setCauseTransport( ...@@ -71,8 +71,8 @@ void PduSessionResourceSetupUnSuccessfulTransferIE::setCauseTransport(
causeValue->setChoiceOfCause(Ngap_Cause_PR_transport); causeValue->setChoiceOfCause(Ngap_Cause_PR_transport);
causeValue->setValue(cause_value); causeValue->setValue(cause_value);
int ret = causeValue->encode2Cause( int ret =
&pduSessionResourceSetupUnsuccessfulTransferIEs->cause); causeValue->encode(pduSessionResourceSetupUnsuccessfulTransferIEs->cause);
if (!ret) { if (!ret) {
cout << "encode CauseTransport IE error" << endl; cout << "encode CauseTransport IE error" << endl;
return; return;
...@@ -87,8 +87,8 @@ void PduSessionResourceSetupUnSuccessfulTransferIE::setCauseNas( ...@@ -87,8 +87,8 @@ void PduSessionResourceSetupUnSuccessfulTransferIE::setCauseNas(
causeValue->setChoiceOfCause(Ngap_Cause_PR_nas); causeValue->setChoiceOfCause(Ngap_Cause_PR_nas);
causeValue->setValue(cause_value); causeValue->setValue(cause_value);
int ret = causeValue->encode2Cause( int ret =
&pduSessionResourceSetupUnsuccessfulTransferIEs->cause); causeValue->encode(pduSessionResourceSetupUnsuccessfulTransferIEs->cause);
if (!ret) { if (!ret) {
cout << "encode CauseNas IE error" << endl; cout << "encode CauseNas IE error" << endl;
return; return;
...@@ -103,8 +103,8 @@ void PduSessionResourceSetupUnSuccessfulTransferIE::setCauseProtocol( ...@@ -103,8 +103,8 @@ void PduSessionResourceSetupUnSuccessfulTransferIE::setCauseProtocol(
causeValue->setChoiceOfCause(Ngap_Cause_PR_protocol); causeValue->setChoiceOfCause(Ngap_Cause_PR_protocol);
causeValue->setValue(cause_value); causeValue->setValue(cause_value);
int ret = causeValue->encode2Cause( int ret =
&pduSessionResourceSetupUnsuccessfulTransferIEs->cause); causeValue->encode(pduSessionResourceSetupUnsuccessfulTransferIEs->cause);
if (!ret) { if (!ret) {
cout << "encode CauseProtocol IE error" << endl; cout << "encode CauseProtocol IE error" << endl;
return; return;
...@@ -119,8 +119,8 @@ void PduSessionResourceSetupUnSuccessfulTransferIE::setCauseMisc( ...@@ -119,8 +119,8 @@ void PduSessionResourceSetupUnSuccessfulTransferIE::setCauseMisc(
causeValue->setChoiceOfCause(Ngap_Cause_PR_misc); causeValue->setChoiceOfCause(Ngap_Cause_PR_misc);
causeValue->setValue(cause_value); causeValue->setValue(cause_value);
int ret = causeValue->encode2Cause( int ret =
&pduSessionResourceSetupUnsuccessfulTransferIEs->cause); causeValue->encode(pduSessionResourceSetupUnsuccessfulTransferIEs->cause);
if (!ret) { if (!ret) {
cout << "encode CauseMisc IE error" << endl; cout << "encode CauseMisc IE error" << endl;
return; return;
...@@ -165,8 +165,8 @@ bool PduSessionResourceSetupUnSuccessfulTransferIE::decodefromIE( ...@@ -165,8 +165,8 @@ bool PduSessionResourceSetupUnSuccessfulTransferIE::decodefromIE(
// pduSessionResourceSetupUnsuccessfulTransferIEs); // pduSessionResourceSetupUnsuccessfulTransferIEs);
causeValue = new Cause(); causeValue = new Cause();
if (!causeValue->decodefromCause( if (!causeValue->decode(
&pduSessionResourceSetupUnsuccessfulTransferIEs->cause)) { pduSessionResourceSetupUnsuccessfulTransferIEs->cause)) {
cout << "decoded ngap Cause IE error" << endl; cout << "decoded ngap Cause IE error" << endl;
return false; return false;
} }
......
...@@ -21,38 +21,40 @@ ...@@ -21,38 +21,40 @@
#include "TimeToWait.hpp" #include "TimeToWait.hpp"
#include <iostream>
using namespace std;
namespace ngap { namespace ngap {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
TimeToWait::TimeToWait() { TimeToWait::TimeToWait() {
timeValue = -1; time_ = -1;
}
//------------------------------------------------------------------------------
TimeToWait::TimeToWait(e_Ngap_TimeToWait time) {
time_ = time;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
TimeToWait::~TimeToWait() {} TimeToWait::~TimeToWait() {}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void TimeToWait::setValue(e_Ngap_TimeToWait m_timeToWait) { void TimeToWait::setValue(e_Ngap_TimeToWait time) {
timeValue = m_timeToWait; time_ = time;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool TimeToWait::encode2TimeToWait(Ngap_TimeToWait_t* timeToWait) { bool TimeToWait::encode(Ngap_TimeToWait_t& time) {
*timeToWait = timeValue; time_ = time;
return true; return true;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool TimeToWait::decodefromTimeToWait(Ngap_TimeToWait_t* pdu) { bool TimeToWait::decode(Ngap_TimeToWait_t& time) {
timeValue = *pdu; time_ = time;
return true; return true;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
long TimeToWait::getValue() { long TimeToWait::getValue() {
return timeValue; return time_;
} }
} // namespace ngap } // namespace ngap
...@@ -33,15 +33,16 @@ namespace ngap { ...@@ -33,15 +33,16 @@ namespace ngap {
class TimeToWait { class TimeToWait {
public: public:
TimeToWait(); TimeToWait();
TimeToWait(e_Ngap_TimeToWait);
virtual ~TimeToWait(); virtual ~TimeToWait();
bool encode2TimeToWait(Ngap_TimeToWait_t*); bool encode(Ngap_TimeToWait_t&);
bool decodefromTimeToWait(Ngap_TimeToWait_t*); bool decode(Ngap_TimeToWait_t&);
void setValue(e_Ngap_TimeToWait); void setValue(e_Ngap_TimeToWait);
long getValue(); long getValue();
private: private:
long timeValue; long time_;
}; };
} // namespace ngap } // namespace ngap
......
...@@ -108,7 +108,7 @@ void HandoverPreparationFailure::setCause( ...@@ -108,7 +108,7 @@ void HandoverPreparationFailure::setCause(
cause.setChoiceOfCause(causePresent); cause.setChoiceOfCause(causePresent);
if (causePresent != Ngap_Cause_PR_NOTHING) cause.setValue(value); if (causePresent != Ngap_Cause_PR_NOTHING) cause.setValue(value);
cause.encode2Cause(&(ie->value.choice.Cause)); cause.encode(ie->value.choice.Cause);
int ret = ASN_SEQUENCE_ADD(&hoPreparationFailureIEs->protocolIEs.list, ie); int ret = ASN_SEQUENCE_ADD(&hoPreparationFailureIEs->protocolIEs.list, ie);
if (ret != 0) Logger::ngap().error("Encode Cause IE error"); if (ret != 0) Logger::ngap().error("Encode Cause IE error");
} }
...@@ -181,9 +181,8 @@ bool HandoverPreparationFailure::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) { ...@@ -181,9 +181,8 @@ bool HandoverPreparationFailure::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) {
Ngap_Criticality_ignore && Ngap_Criticality_ignore &&
hoPreparationFailureIEs->protocolIEs.list.array[i]->value.present == hoPreparationFailureIEs->protocolIEs.list.array[i]->value.present ==
Ngap_HandoverPreparationFailureIEs__value_PR_Cause) { Ngap_HandoverPreparationFailureIEs__value_PR_Cause) {
if (!cause.decodefromCause( if (!cause.decode(hoPreparationFailureIEs->protocolIEs.list.array[i]
&hoPreparationFailureIEs->protocolIEs.list.array[i] ->value.choice.Cause)) {
->value.choice.Cause)) {
Logger::ngap().error("Decoded NGAP Cause IE error"); Logger::ngap().error("Decoded NGAP Cause IE error");
return false; return false;
} }
......
...@@ -159,7 +159,7 @@ void HandoverRequest::setCause( ...@@ -159,7 +159,7 @@ void HandoverRequest::setCause(
cause.setChoiceOfCause(causePresent); cause.setChoiceOfCause(causePresent);
cause.setValue(value); cause.setValue(value);
cause.encode2Cause(&(ie->value.choice.Cause)); cause.encode(ie->value.choice.Cause);
int ret = ASN_SEQUENCE_ADD(&handoverRequestIEs->protocolIEs.list, ie); int ret = ASN_SEQUENCE_ADD(&handoverRequestIEs->protocolIEs.list, ie);
if (ret != 0) Logger::ngap().error("Encode Cause IE error"); if (ret != 0) Logger::ngap().error("Encode Cause IE error");
} }
......
...@@ -209,9 +209,8 @@ bool HandoverRequiredMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) { ...@@ -209,9 +209,8 @@ bool HandoverRequiredMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) {
Ngap_Criticality_ignore && Ngap_Criticality_ignore &&
handoverRequiredIEs->protocolIEs.list.array[i]->value.present == handoverRequiredIEs->protocolIEs.list.array[i]->value.present ==
Ngap_HandoverRequiredIEs__value_PR_Cause) { Ngap_HandoverRequiredIEs__value_PR_Cause) {
if (!cause.decodefromCause( if (!cause.decode(handoverRequiredIEs->protocolIEs.list.array[i]
&handoverRequiredIEs->protocolIEs.list.array[i] ->value.choice.Cause)) {
->value.choice.Cause)) {
Logger::ngap().error("Decoded NGAP Cause IE error"); Logger::ngap().error("Decoded NGAP Cause IE error");
return false; return false;
} }
......
...@@ -54,7 +54,7 @@ void NGResetMsg::setCause(const Cause& c) { ...@@ -54,7 +54,7 @@ void NGResetMsg::setCause(const Cause& c) {
ie->criticality = Ngap_Criticality_ignore; ie->criticality = Ngap_Criticality_ignore;
ie->value.present = Ngap_NGResetIEs__value_PR_Cause; ie->value.present = Ngap_NGResetIEs__value_PR_Cause;
if (!cause.encode2Cause(&ie->value.choice.Cause)) { if (!cause.encode(ie->value.choice.Cause)) {
Logger::ngap().error("Encode NGAP Cause IE error"); Logger::ngap().error("Encode NGAP Cause IE error");
free_wrapper((void**) &ie); free_wrapper((void**) &ie);
return; return;
...@@ -121,8 +121,8 @@ bool NGResetMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) { ...@@ -121,8 +121,8 @@ bool NGResetMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) {
Ngap_Criticality_ignore && Ngap_Criticality_ignore &&
ngResetIEs->protocolIEs.list.array[i]->value.present == ngResetIEs->protocolIEs.list.array[i]->value.present ==
Ngap_NGResetIEs__value_PR_Cause) { Ngap_NGResetIEs__value_PR_Cause) {
if (!cause.decodefromCause(&ngResetIEs->protocolIEs.list.array[i] if (!cause.decode(ngResetIEs->protocolIEs.list.array[i]
->value.choice.Cause)) { ->value.choice.Cause)) {
Logger::ngap().error("Decoded NGAP Cause IE error"); Logger::ngap().error("Decoded NGAP Cause IE error");
return false; return false;
} }
......
...@@ -32,6 +32,7 @@ namespace ngap { ...@@ -32,6 +32,7 @@ namespace ngap {
NGSetupFailureMsg::NGSetupFailureMsg() : NgapMessage() { NGSetupFailureMsg::NGSetupFailureMsg() : NgapMessage() {
ngSetupFailureIEs = nullptr; ngSetupFailureIEs = nullptr;
// criticalityDiagnostics = NULL; // criticalityDiagnostics = NULL;
timeToWait = std::nullopt;
NgapMessage::setMessageType(NgapMessageType::NG_SETUP_FAILURE); NgapMessage::setMessageType(NgapMessageType::NG_SETUP_FAILURE);
initialize(); initialize();
} }
...@@ -53,7 +54,7 @@ void NGSetupFailureMsg::addCauseIE() { ...@@ -53,7 +54,7 @@ void NGSetupFailureMsg::addCauseIE() {
ie->criticality = Ngap_Criticality_ignore; ie->criticality = Ngap_Criticality_ignore;
ie->value.present = Ngap_NGSetupFailureIEs__value_PR_Cause; ie->value.present = Ngap_NGSetupFailureIEs__value_PR_Cause;
if (!cause.encode2Cause(&ie->value.choice.Cause)) { if (!cause.encode(ie->value.choice.Cause)) {
Logger::ngap().error("Encode NGAP Cause IE error"); Logger::ngap().error("Encode NGAP Cause IE error");
free_wrapper((void**) &ie); free_wrapper((void**) &ie);
return; return;
...@@ -65,13 +66,15 @@ void NGSetupFailureMsg::addCauseIE() { ...@@ -65,13 +66,15 @@ void NGSetupFailureMsg::addCauseIE() {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void NGSetupFailureMsg::addTimeToWaitIE() { void NGSetupFailureMsg::addTimeToWaitIE() {
if (!timeToWait.has_value()) return;
Ngap_NGSetupFailureIEs_t* ie = Ngap_NGSetupFailureIEs_t* ie =
(Ngap_NGSetupFailureIEs_t*) calloc(1, sizeof(Ngap_NGSetupFailureIEs_t)); (Ngap_NGSetupFailureIEs_t*) calloc(1, sizeof(Ngap_NGSetupFailureIEs_t));
ie->id = Ngap_ProtocolIE_ID_id_TimeToWait; ie->id = Ngap_ProtocolIE_ID_id_TimeToWait;
ie->criticality = Ngap_Criticality_ignore; ie->criticality = Ngap_Criticality_ignore;
ie->value.present = Ngap_NGSetupFailureIEs__value_PR_TimeToWait; ie->value.present = Ngap_NGSetupFailureIEs__value_PR_TimeToWait;
if (!timeToWait.encode2TimeToWait(&ie->value.choice.TimeToWait)) { if (!timeToWait.value().encode(ie->value.choice.TimeToWait)) {
Logger::ngap().error("Encode NGAP Cause IE error"); Logger::ngap().error("Encode NGAP Cause IE error");
free_wrapper((void**) &ie); free_wrapper((void**) &ie);
return; return;
...@@ -89,26 +92,27 @@ void NGSetupFailureMsg::set( ...@@ -89,26 +92,27 @@ void NGSetupFailureMsg::set(
cause.setValue(cause_value); cause.setValue(cause_value);
addCauseIE(); addCauseIE();
timeToWait.setValue(time_to_wait); timeToWait = std::make_optional<TimeToWait>(time_to_wait);
addTimeToWaitIE(); addTimeToWaitIE();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void NGSetupFailureMsg::set(const e_Ngap_CauseRadioNetwork& cause_value) { void NGSetupFailureMsg::setCauseRadioNetwork(
const e_Ngap_CauseRadioNetwork& cause_value) {
cause.setChoiceOfCause(Ngap_Cause_PR_radioNetwork); cause.setChoiceOfCause(Ngap_Cause_PR_radioNetwork);
cause.setValue(cause_value); cause.setValue(cause_value);
addCauseIE(); addCauseIE();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void NGSetupFailureMsg::setCauseTransport( void NGSetupFailureMsg::set(
const e_Ngap_CauseTransport& cause_value, const e_Ngap_CauseTransport& cause_value,
const e_Ngap_TimeToWait& time_to_wait) { const e_Ngap_TimeToWait& time_to_wait) {
cause.setChoiceOfCause(Ngap_Cause_PR_transport); cause.setChoiceOfCause(Ngap_Cause_PR_transport);
cause.setValue(cause_value); cause.setValue(cause_value);
addCauseIE(); addCauseIE();
timeToWait.setValue(time_to_wait); timeToWait = std::make_optional<TimeToWait>(time_to_wait);
addTimeToWaitIE(); addTimeToWaitIE();
} }
...@@ -121,13 +125,13 @@ void NGSetupFailureMsg::setCauseTransport( ...@@ -121,13 +125,13 @@ void NGSetupFailureMsg::setCauseTransport(
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void NGSetupFailureMsg::setCauseNas( void NGSetupFailureMsg::set(
const e_Ngap_CauseNas& cause_value, const e_Ngap_TimeToWait& time_to_wait) { const e_Ngap_CauseNas& cause_value, const e_Ngap_TimeToWait& time_to_wait) {
cause.setChoiceOfCause(Ngap_Cause_PR_nas); cause.setChoiceOfCause(Ngap_Cause_PR_nas);
cause.setValue(cause_value); cause.setValue(cause_value);
addCauseIE(); addCauseIE();
timeToWait.setValue(time_to_wait); timeToWait = std::make_optional<TimeToWait>(time_to_wait);
addTimeToWaitIE(); addTimeToWaitIE();
} }
...@@ -139,14 +143,14 @@ void NGSetupFailureMsg::setCauseNas(const e_Ngap_CauseNas& cause_value) { ...@@ -139,14 +143,14 @@ void NGSetupFailureMsg::setCauseNas(const e_Ngap_CauseNas& cause_value) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void NGSetupFailureMsg::setCauseProtocol( void NGSetupFailureMsg::set(
const e_Ngap_CauseProtocol& cause_value, const e_Ngap_CauseProtocol& cause_value,
const e_Ngap_TimeToWait& time_to_wait) { const e_Ngap_TimeToWait& time_to_wait) {
cause.setChoiceOfCause(Ngap_Cause_PR_protocol); cause.setChoiceOfCause(Ngap_Cause_PR_protocol);
cause.setValue(cause_value); cause.setValue(cause_value);
addCauseIE(); addCauseIE();
timeToWait.setValue(time_to_wait); timeToWait = std::make_optional<TimeToWait>(time_to_wait);
addTimeToWaitIE(); addTimeToWaitIE();
} }
...@@ -159,14 +163,14 @@ void NGSetupFailureMsg::setCauseProtocol( ...@@ -159,14 +163,14 @@ void NGSetupFailureMsg::setCauseProtocol(
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void NGSetupFailureMsg::setCauseMisc( void NGSetupFailureMsg::set(
const e_Ngap_CauseMisc& cause_value, const e_Ngap_CauseMisc& cause_value,
const e_Ngap_TimeToWait& time_to_wait) { const e_Ngap_TimeToWait& time_to_wait) {
cause.setChoiceOfCause(Ngap_Cause_PR_misc); cause.setChoiceOfCause(Ngap_Cause_PR_misc);
cause.setValue(cause_value); cause.setValue(cause_value);
addCauseIE(); addCauseIE();
timeToWait.setValue(time_to_wait); timeToWait = std::make_optional<TimeToWait>(time_to_wait);
addTimeToWaitIE(); addTimeToWaitIE();
} }
...@@ -205,9 +209,8 @@ bool NGSetupFailureMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) { ...@@ -205,9 +209,8 @@ bool NGSetupFailureMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) {
Ngap_Criticality_ignore && Ngap_Criticality_ignore &&
ngSetupFailureIEs->protocolIEs.list.array[i]->value.present == ngSetupFailureIEs->protocolIEs.list.array[i]->value.present ==
Ngap_NGSetupFailureIEs__value_PR_Cause) { Ngap_NGSetupFailureIEs__value_PR_Cause) {
if (!cause.decodefromCause( if (!cause.decode(ngSetupFailureIEs->protocolIEs.list.array[i]
&ngSetupFailureIEs->protocolIEs.list.array[i] ->value.choice.Cause)) {
->value.choice.Cause)) {
Logger::ngap().error("Decoded NGAP Cause IE error"); Logger::ngap().error("Decoded NGAP Cause IE error");
return false; return false;
} }
...@@ -221,12 +224,13 @@ bool NGSetupFailureMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) { ...@@ -221,12 +224,13 @@ bool NGSetupFailureMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) {
Ngap_Criticality_ignore && Ngap_Criticality_ignore &&
ngSetupFailureIEs->protocolIEs.list.array[i]->value.present == ngSetupFailureIEs->protocolIEs.list.array[i]->value.present ==
Ngap_NGSetupFailureIEs__value_PR_TimeToWait) { Ngap_NGSetupFailureIEs__value_PR_TimeToWait) {
if (!timeToWait.decodefromTimeToWait( TimeToWait tmp = {};
&ngSetupFailureIEs->protocolIEs.list.array[i] if (!tmp.decode(ngSetupFailureIEs->protocolIEs.list.array[i]
->value.choice.TimeToWait)) { ->value.choice.TimeToWait)) {
Logger::ngap().error("Decoded NGAP TimeToWait IE error"); Logger::ngap().error("Decoded NGAP TimeToWait IE error");
return false; return false;
} }
timeToWait = std::optional<TimeToWait>(tmp);
} else { } else {
Logger::ngap().error("Decoded NGAP TimeToWait IE error"); Logger::ngap().error("Decoded NGAP TimeToWait IE error");
return false; return false;
...@@ -302,11 +306,16 @@ bool NGSetupFailureMsg::getCauseMisc(e_Ngap_CauseMisc& causeMisc) { ...@@ -302,11 +306,16 @@ bool NGSetupFailureMsg::getCauseMisc(e_Ngap_CauseMisc& causeMisc) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool NGSetupFailureMsg::getTime2Wait(e_Ngap_TimeToWait& time) { void NGSetupFailureMsg::setTimeToWait(const e_Ngap_TimeToWait& time) {
if (timeToWait.getValue() < 0) { timeToWait = std::make_optional<TimeToWait>(time);
}
//------------------------------------------------------------------------------
bool NGSetupFailureMsg::getTimeToWait(e_Ngap_TimeToWait& time) {
if (timeToWait.has_value()) {
return false; return false;
} }
time = (e_Ngap_TimeToWait) timeToWait.getValue(); time = (e_Ngap_TimeToWait) timeToWait.value().getValue();
return true; return true;
} }
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
#include "TimeToWait.hpp" #include "TimeToWait.hpp"
#include "NgapMessage.hpp" #include "NgapMessage.hpp"
#include <optional>
namespace ngap { namespace ngap {
class NGSetupFailureMsg : public NgapMessage { class NGSetupFailureMsg : public NgapMessage {
...@@ -39,47 +41,49 @@ class NGSetupFailureMsg : public NgapMessage { ...@@ -39,47 +41,49 @@ class NGSetupFailureMsg : public NgapMessage {
void set( void set(
const e_Ngap_CauseRadioNetwork& cause_value, const e_Ngap_CauseRadioNetwork& cause_value,
const e_Ngap_TimeToWait& time_to_wait); const e_Ngap_TimeToWait& time_to_wait);
void set(const e_Ngap_CauseRadioNetwork& cause_value); void set(
bool getCauseRadioNetwork(e_Ngap_CauseRadioNetwork&);
void setCauseTransport(
const e_Ngap_CauseTransport& cause_value, const e_Ngap_CauseTransport& cause_value,
const e_Ngap_TimeToWait& time_to_wait); const e_Ngap_TimeToWait& time_to_wait);
void set(
const e_Ngap_CauseNas& cause_value,
const e_Ngap_TimeToWait& time_to_wait);
void set(
const e_Ngap_CauseProtocol& cause_value,
const e_Ngap_TimeToWait& time_to_wait);
void set(
const e_Ngap_CauseMisc& cause_value,
const e_Ngap_TimeToWait& time_to_wait);
void setCauseRadioNetwork(const e_Ngap_CauseRadioNetwork& cause_value);
bool getCauseRadioNetwork(e_Ngap_CauseRadioNetwork&);
void setCauseTransport(const e_Ngap_CauseTransport& cause_value); void setCauseTransport(const e_Ngap_CauseTransport& cause_value);
bool getCauseTransport(e_Ngap_CauseTransport&); bool getCauseTransport(e_Ngap_CauseTransport&);
void setCauseNas(
const e_Ngap_CauseNas& cause_value,
const e_Ngap_TimeToWait& time_to_wait);
void setCauseNas(const e_Ngap_CauseNas& cause_value); void setCauseNas(const e_Ngap_CauseNas& cause_value);
bool getCauseNas(e_Ngap_CauseNas&); bool getCauseNas(e_Ngap_CauseNas&);
void setCauseProtocol(
const e_Ngap_CauseProtocol& cause_value,
const e_Ngap_TimeToWait& time_to_wait);
void setCauseProtocol(const e_Ngap_CauseProtocol& cause_value); void setCauseProtocol(const e_Ngap_CauseProtocol& cause_value);
bool getCauseProtocol(e_Ngap_CauseProtocol&); bool getCauseProtocol(e_Ngap_CauseProtocol&);
void setCauseMisc(
const e_Ngap_CauseMisc& cause_value,
const e_Ngap_TimeToWait& time_to_wait);
void setCauseMisc(const e_Ngap_CauseMisc& cause_value); void setCauseMisc(const e_Ngap_CauseMisc& cause_value);
bool getCauseMisc(e_Ngap_CauseMisc&); bool getCauseMisc(e_Ngap_CauseMisc&);
bool getCauseType(Ngap_Cause_PR&); bool getCauseType(Ngap_Cause_PR&);
bool getTime2Wait(e_Ngap_TimeToWait&);
bool decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) override; bool getTimeToWait(e_Ngap_TimeToWait&);
void setTimeToWait(const e_Ngap_TimeToWait&);
void addCauseIE(); bool decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) override;
void addTimeToWaitIE();
private: private:
Ngap_NGSetupFailure_t* ngSetupFailureIEs; Ngap_NGSetupFailure_t* ngSetupFailureIEs;
Cause cause; // Mandatory
Cause cause; // Mandatory std::optional<TimeToWait> timeToWait; // Optional
TimeToWait timeToWait; // Mandatory
// TODO: CriticalityDiagnostics *criticalityDiagnostics; //Optional // TODO: CriticalityDiagnostics *criticalityDiagnostics; //Optional
void addCauseIE();
void addTimeToWaitIE();
}; };
} // namespace ngap } // namespace ngap
#endif #endif
...@@ -144,7 +144,7 @@ void UEContextReleaseCommandMsg::addCauseIE() { ...@@ -144,7 +144,7 @@ void UEContextReleaseCommandMsg::addCauseIE() {
ie->id = Ngap_ProtocolIE_ID_id_Cause; ie->id = Ngap_ProtocolIE_ID_id_Cause;
ie->criticality = Ngap_Criticality_ignore; ie->criticality = Ngap_Criticality_ignore;
ie->value.present = Ngap_UEContextReleaseCommand_IEs__value_PR_Cause; ie->value.present = Ngap_UEContextReleaseCommand_IEs__value_PR_Cause;
causeValue.encode2Cause(&ie->value.choice.Cause); causeValue.encode(ie->value.choice.Cause);
int ret = ASN_SEQUENCE_ADD(&ies->protocolIEs.list, ie); int ret = ASN_SEQUENCE_ADD(&ies->protocolIEs.list, ie);
if (ret != 0) Logger::ngap().error("Encode NGAP Cause IE error"); if (ret != 0) Logger::ngap().error("Encode NGAP Cause IE error");
} }
...@@ -214,8 +214,8 @@ bool UEContextReleaseCommandMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) { ...@@ -214,8 +214,8 @@ bool UEContextReleaseCommandMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) {
Ngap_Criticality_ignore && Ngap_Criticality_ignore &&
ies->protocolIEs.list.array[i]->value.present == ies->protocolIEs.list.array[i]->value.present ==
Ngap_UEContextReleaseCommand_IEs__value_PR_Cause) { Ngap_UEContextReleaseCommand_IEs__value_PR_Cause) {
if (!causeValue.decodefromCause( if (!causeValue.decode(
&ies->protocolIEs.list.array[i]->value.choice.Cause)) { ies->protocolIEs.list.array[i]->value.choice.Cause)) {
Logger::ngap().error("Decoded NGAP Cause IE error"); Logger::ngap().error("Decoded NGAP Cause IE error");
return false; return false;
} }
......
...@@ -109,7 +109,7 @@ void UEContextReleaseRequestMsg::addCauseIE() { ...@@ -109,7 +109,7 @@ void UEContextReleaseRequestMsg::addCauseIE() {
ie->id = Ngap_ProtocolIE_ID_id_Cause; ie->id = Ngap_ProtocolIE_ID_id_Cause;
ie->criticality = Ngap_Criticality_ignore; ie->criticality = Ngap_Criticality_ignore;
ie->value.present = Ngap_UEContextReleaseRequest_IEs__value_PR_Cause; ie->value.present = Ngap_UEContextReleaseRequest_IEs__value_PR_Cause;
causeValue.encode2Cause(&ie->value.choice.Cause); causeValue.encode(ie->value.choice.Cause);
int ret = ASN_SEQUENCE_ADD(&ies->protocolIEs.list, ie); int ret = ASN_SEQUENCE_ADD(&ies->protocolIEs.list, ie);
if (ret != 0) Logger::ngap().error("Encode Cause IE error"); if (ret != 0) Logger::ngap().error("Encode Cause IE error");
} }
...@@ -176,8 +176,8 @@ bool UEContextReleaseRequestMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) { ...@@ -176,8 +176,8 @@ bool UEContextReleaseRequestMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) {
Ngap_Criticality_ignore && Ngap_Criticality_ignore &&
ies->protocolIEs.list.array[i]->value.present == ies->protocolIEs.list.array[i]->value.present ==
Ngap_UEContextReleaseRequest_IEs__value_PR_Cause) { Ngap_UEContextReleaseRequest_IEs__value_PR_Cause) {
if (!causeValue.decodefromCause( if (!causeValue.decode(
&ies->protocolIEs.list.array[i]->value.choice.Cause)) { ies->protocolIEs.list.array[i]->value.choice.Cause)) {
Logger::ngap().error("Decode NGAP Cause IE error"); Logger::ngap().error("Decode NGAP Cause IE error");
return false; return false;
} }
......
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