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

Code refactor for UERadioCapabilityInfoIndication

parent 788fddaf
...@@ -25,29 +25,29 @@ namespace ngap { ...@@ -25,29 +25,29 @@ namespace ngap {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
UERadioCapabilityForPaging::UERadioCapabilityForPaging() { UERadioCapabilityForPaging::UERadioCapabilityForPaging() {
ueRadioCapabilityForPagingOfNR = NULL; ueRadioCapabilityForPagingOfNR = std::nullopt;
ueRadioCapabilityForPagingOfEUTRA = NULL; ueRadioCapabilityForPagingOfEUTRA = std::nullopt;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
UERadioCapabilityForPaging::~UERadioCapabilityForPaging() {} UERadioCapabilityForPaging::~UERadioCapabilityForPaging() {}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool UERadioCapabilityForPaging::encode2UERadioCapabilityForPaging( bool UERadioCapabilityForPaging::encode(
Ngap_UERadioCapabilityForPaging_t* ueRadioCapabilityForPaging) { Ngap_UERadioCapabilityForPaging_t* ueRadioCapabilityForPaging) {
if (ueRadioCapabilityForPagingOfNR) { if (ueRadioCapabilityForPagingOfNR.has_value()) {
ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfNR = ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfNR =
(Ngap_UERadioCapabilityForPagingOfNR_t*) calloc( (Ngap_UERadioCapabilityForPagingOfNR_t*) calloc(
1, sizeof(Ngap_UERadioCapabilityForPagingOfNR_t)); 1, sizeof(Ngap_UERadioCapabilityForPagingOfNR_t));
if (!ueRadioCapabilityForPagingOfNR->encode( if (!ueRadioCapabilityForPagingOfNR.value().encode(
ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfNR)) ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfNR))
return false; return false;
} }
if (ueRadioCapabilityForPagingOfEUTRA) { if (ueRadioCapabilityForPagingOfEUTRA.has_value()) {
ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfEUTRA = ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfEUTRA =
(Ngap_UERadioCapabilityForPagingOfEUTRA_t*) calloc( (Ngap_UERadioCapabilityForPagingOfEUTRA_t*) calloc(
1, sizeof(Ngap_UERadioCapabilityForPagingOfEUTRA_t)); 1, sizeof(Ngap_UERadioCapabilityForPagingOfEUTRA_t));
if (!ueRadioCapabilityForPagingOfEUTRA->encode( if (!ueRadioCapabilityForPagingOfEUTRA.value().encode(
ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfEUTRA)) ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfEUTRA))
return false; return false;
} }
...@@ -56,39 +56,59 @@ bool UERadioCapabilityForPaging::encode2UERadioCapabilityForPaging( ...@@ -56,39 +56,59 @@ bool UERadioCapabilityForPaging::encode2UERadioCapabilityForPaging(
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool UERadioCapabilityForPaging::decodefromUERadioCapabilityForPaging( bool UERadioCapabilityForPaging::decode(
Ngap_UERadioCapabilityForPaging_t* ueRadioCapabilityForPaging) { Ngap_UERadioCapabilityForPaging_t* ueRadioCapabilityForPaging) {
if (ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfNR) { if (ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfNR) {
ueRadioCapabilityForPagingOfNR = new UERadioCapabilityForPagingOfNR(); UERadioCapabilityForPagingOfNR tmp = {};
if (!ueRadioCapabilityForPagingOfNR->decode( if (!tmp.decode(ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfNR))
ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfNR))
return false; return false;
ueRadioCapabilityForPagingOfNR =
std::optional<UERadioCapabilityForPagingOfNR>(tmp);
} }
if (ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfEUTRA) { if (ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfEUTRA) {
ueRadioCapabilityForPagingOfEUTRA = new UERadioCapabilityForPagingOfEUTRA(); UERadioCapabilityForPagingOfEUTRA tmp = {};
if (!ueRadioCapabilityForPagingOfEUTRA->decode( if (!tmp.decode(
ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfEUTRA)) ueRadioCapabilityForPaging->uERadioCapabilityForPagingOfEUTRA))
return false; return false;
ueRadioCapabilityForPagingOfEUTRA =
std::optional<UERadioCapabilityForPagingOfEUTRA>(tmp);
} }
return true; return true;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool UERadioCapabilityForPaging::getUERadioCapabilityForPaging( bool UERadioCapabilityForPaging::setUERadioCapabilityForPagingOfNR(
UERadioCapabilityForPagingOfNR*& m_ueRadioCapabilityForPagingOfNR, const OCTET_STRING_t& capability) {
UERadioCapabilityForPagingOfEUTRA*& m_ueRadioCapabilityForPagingOfEUTRA) { UERadioCapabilityForPagingOfNR tmp = {};
m_ueRadioCapabilityForPagingOfNR = ueRadioCapabilityForPagingOfNR; tmp.set(capability);
m_ueRadioCapabilityForPagingOfEUTRA = ueRadioCapabilityForPagingOfEUTRA; ueRadioCapabilityForPagingOfNR =
std::optional<UERadioCapabilityForPagingOfNR>(tmp);
return true;
}
//------------------------------------------------------------------------------
bool UERadioCapabilityForPaging::getUERadioCapabilityForPagingOfNR(
OCTET_STRING_t& capability) {
if (!ueRadioCapabilityForPagingOfNR.has_value()) return false;
return ueRadioCapabilityForPagingOfNR.value().get(capability);
}
//------------------------------------------------------------------------------
bool UERadioCapabilityForPaging::setUERadioCapabilityForPagingOfEUTRA(
const OCTET_STRING_t& capability) {
UERadioCapabilityForPagingOfEUTRA tmp = {};
tmp.set(capability);
ueRadioCapabilityForPagingOfEUTRA =
std::optional<UERadioCapabilityForPagingOfEUTRA>(tmp);
return true; return true;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void UERadioCapabilityForPaging::setUERadioCapabilityForPaging( bool UERadioCapabilityForPaging::getUERadioCapabilityForPagingOfEUTRA(
UERadioCapabilityForPagingOfNR* m_ueRadioCapabilityForPagingOfNR, OCTET_STRING_t& capability) {
UERadioCapabilityForPagingOfEUTRA* m_ueRadioCapabilityForPagingOfEUTRA) { if (!ueRadioCapabilityForPagingOfEUTRA.has_value()) return false;
ueRadioCapabilityForPagingOfNR = m_ueRadioCapabilityForPagingOfNR; return ueRadioCapabilityForPagingOfEUTRA.value().get(capability);
ueRadioCapabilityForPagingOfEUTRA = m_ueRadioCapabilityForPagingOfEUTRA;
} }
} // namespace ngap } // namespace ngap
...@@ -19,12 +19,14 @@ ...@@ -19,12 +19,14 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
#ifndef _UERADIOCAPABILITYFORPAGING_H_ #ifndef _UE_RADIO_CAPABILITY_FOR_PAGING_H_
#define _UERADIOCAPABILITYFORPAGING_H_ #define _UE_RADIO_CAPABILITY_FOR_PAGING_H_
#include "UERadioCapabilityForPagingOfEUTRA.hpp" #include "UERadioCapabilityForPagingOfEUTRA.hpp"
#include "UERadioCapabilityForPagingOfNR.hpp" #include "UERadioCapabilityForPagingOfNR.hpp"
#include <optional>
extern "C" { extern "C" {
#include "Ngap_UERadioCapabilityForPaging.h" #include "Ngap_UERadioCapabilityForPaging.h"
} }
...@@ -36,20 +38,19 @@ class UERadioCapabilityForPaging { ...@@ -36,20 +38,19 @@ class UERadioCapabilityForPaging {
UERadioCapabilityForPaging(); UERadioCapabilityForPaging();
virtual ~UERadioCapabilityForPaging(); virtual ~UERadioCapabilityForPaging();
bool encode2UERadioCapabilityForPaging( bool encode(Ngap_UERadioCapabilityForPaging_t* ueRadioCapabilityForPaging);
Ngap_UERadioCapabilityForPaging_t* ueRadioCapabilityForPaging); bool decode(Ngap_UERadioCapabilityForPaging_t* ueRadioCapabilityForPaging);
bool decodefromUERadioCapabilityForPaging(
Ngap_UERadioCapabilityForPaging_t* ueRadioCapabilityForPaging); bool setUERadioCapabilityForPagingOfNR(const OCTET_STRING_t& capability);
bool getUERadioCapabilityForPaging( bool getUERadioCapabilityForPagingOfNR(OCTET_STRING_t& capability);
UERadioCapabilityForPagingOfNR*& m_ueRadioCapabilityForPagingOfNR,
UERadioCapabilityForPagingOfEUTRA*& m_ueRadioCapabilityForPagingOfEUTRA); bool setUERadioCapabilityForPagingOfEUTRA(const OCTET_STRING_t& capability);
void setUERadioCapabilityForPaging( bool getUERadioCapabilityForPagingOfEUTRA(OCTET_STRING_t& capability);
UERadioCapabilityForPagingOfNR* m_ueRadioCapabilityForPagingOfNR,
UERadioCapabilityForPagingOfEUTRA* m_ueRadioCapabilityForPagingOfEUTRA);
private: private:
UERadioCapabilityForPagingOfNR* ueRadioCapabilityForPagingOfNR; // Optional std::optional<UERadioCapabilityForPagingOfNR>
UERadioCapabilityForPagingOfEUTRA* ueRadioCapabilityForPagingOfNR; // Optional
std::optional<UERadioCapabilityForPagingOfEUTRA>
ueRadioCapabilityForPagingOfEUTRA; // Optional ueRadioCapabilityForPagingOfEUTRA; // Optional
}; };
......
...@@ -34,7 +34,7 @@ namespace ngap { ...@@ -34,7 +34,7 @@ namespace ngap {
UeRadioCapabilityInfoIndicationMsg::UeRadioCapabilityInfoIndicationMsg() UeRadioCapabilityInfoIndicationMsg::UeRadioCapabilityInfoIndicationMsg()
: NgapUEMessage() { : NgapUEMessage() {
ueRadioCapabilityInfoIndicationIEs = nullptr; ueRadioCapabilityInfoIndicationIEs = nullptr;
ueRadioCapabilityForPaging = nullptr; ueRadioCapabilityForPaging = std::nullopt;
setMessageType(NgapMessageType::UE_RADIO_CAPABILITY_INFO_INDICATION); setMessageType(NgapMessageType::UE_RADIO_CAPABILITY_INFO_INDICATION);
initialize(); initialize();
} }
...@@ -133,23 +133,20 @@ void UeRadioCapabilityInfoIndicationMsg::getUERadioCapability( ...@@ -133,23 +133,20 @@ void UeRadioCapabilityInfoIndicationMsg::getUERadioCapability(
void UeRadioCapabilityInfoIndicationMsg::setUERadioCapabilityForPaging( void UeRadioCapabilityInfoIndicationMsg::setUERadioCapabilityForPaging(
const OCTET_STRING_t& ue_radio_capability_for_paging_of_nr, const OCTET_STRING_t& ue_radio_capability_for_paging_of_nr,
const OCTET_STRING_t& ue_radio_capability_for_paging_of_eutra) { const OCTET_STRING_t& ue_radio_capability_for_paging_of_eutra) {
if (!ueRadioCapabilityForPaging) if (!(conv::check_octet_string(ue_radio_capability_for_paging_of_nr) or
ueRadioCapabilityForPaging = new UERadioCapabilityForPaging(); conv::check_octet_string(ue_radio_capability_for_paging_of_eutra))) {
UERadioCapabilityForPagingOfNR* m_ueRadioCapabilityForPagingOfNR = nullptr; return;
UERadioCapabilityForPagingOfEUTRA* m_ueRadioCapabilityForPagingOfEUTRA = }
nullptr; UERadioCapabilityForPaging tmp = {};
if (conv::check_octet_string(ue_radio_capability_for_paging_of_nr)) { if (conv::check_octet_string(ue_radio_capability_for_paging_of_nr)) {
m_ueRadioCapabilityForPagingOfNR = new UERadioCapabilityForPagingOfNR(); tmp.setUERadioCapabilityForPagingOfNR(ue_radio_capability_for_paging_of_nr);
m_ueRadioCapabilityForPagingOfNR->set(ue_radio_capability_for_paging_of_nr);
} }
if (conv::check_octet_string(ue_radio_capability_for_paging_of_eutra)) { if (conv::check_octet_string(ue_radio_capability_for_paging_of_eutra)) {
m_ueRadioCapabilityForPagingOfEUTRA = tmp.setUERadioCapabilityForPagingOfEUTRA(
new UERadioCapabilityForPagingOfEUTRA();
m_ueRadioCapabilityForPagingOfEUTRA->set(
ue_radio_capability_for_paging_of_eutra); ue_radio_capability_for_paging_of_eutra);
} }
ueRadioCapabilityForPaging->setUERadioCapabilityForPaging( ueRadioCapabilityForPaging = std::optional<UERadioCapabilityForPaging>(tmp);
m_ueRadioCapabilityForPagingOfNR, m_ueRadioCapabilityForPagingOfEUTRA);
Ngap_UERadioCapabilityInfoIndicationIEs_t* ie = Ngap_UERadioCapabilityInfoIndicationIEs_t* ie =
(Ngap_UERadioCapabilityInfoIndicationIEs_t*) calloc( (Ngap_UERadioCapabilityInfoIndicationIEs_t*) calloc(
...@@ -159,7 +156,7 @@ void UeRadioCapabilityInfoIndicationMsg::setUERadioCapabilityForPaging( ...@@ -159,7 +156,7 @@ void UeRadioCapabilityInfoIndicationMsg::setUERadioCapabilityForPaging(
ie->value.present = ie->value.present =
Ngap_UERadioCapabilityInfoIndicationIEs__value_PR_UERadioCapabilityForPaging; Ngap_UERadioCapabilityInfoIndicationIEs__value_PR_UERadioCapabilityForPaging;
int ret = ueRadioCapabilityForPaging->encode2UERadioCapabilityForPaging( int ret = ueRadioCapabilityForPaging.value().encode(
&ie->value.choice.UERadioCapabilityForPaging); &ie->value.choice.UERadioCapabilityForPaging);
if (!ret) { if (!ret) {
Logger::ngap().error("Encode NGAP UERadioCapabilityForPaging IE error"); Logger::ngap().error("Encode NGAP UERadioCapabilityForPaging IE error");
...@@ -177,25 +174,11 @@ void UeRadioCapabilityInfoIndicationMsg::setUERadioCapabilityForPaging( ...@@ -177,25 +174,11 @@ void UeRadioCapabilityInfoIndicationMsg::setUERadioCapabilityForPaging(
bool UeRadioCapabilityInfoIndicationMsg::getUERadioCapabilityForPaging( bool UeRadioCapabilityInfoIndicationMsg::getUERadioCapabilityForPaging(
OCTET_STRING_t& ue_radio_capability_for_paging_of_nr, OCTET_STRING_t& ue_radio_capability_for_paging_of_nr,
OCTET_STRING_t& ue_radio_capability_for_paging_of_eutra) { OCTET_STRING_t& ue_radio_capability_for_paging_of_eutra) {
if (!ueRadioCapabilityForPaging) return false; if (!ueRadioCapabilityForPaging.has_value()) return false;
UERadioCapabilityForPagingOfNR* m_ueRadioCapabilityForPagingOfNR; ueRadioCapabilityForPaging.value().getUERadioCapabilityForPagingOfNR(
UERadioCapabilityForPagingOfEUTRA* m_ueRadioCapabilityForPagingOfEUTRA; ue_radio_capability_for_paging_of_nr);
if (!ueRadioCapabilityForPaging->getUERadioCapabilityForPaging( ueRadioCapabilityForPaging.value().getUERadioCapabilityForPagingOfEUTRA(
m_ueRadioCapabilityForPagingOfNR, ue_radio_capability_for_paging_of_eutra);
m_ueRadioCapabilityForPagingOfEUTRA))
return false;
if (m_ueRadioCapabilityForPagingOfNR) {
if (!m_ueRadioCapabilityForPagingOfNR->get(
ue_radio_capability_for_paging_of_nr))
return false;
}
if (m_ueRadioCapabilityForPagingOfEUTRA) {
if (!m_ueRadioCapabilityForPagingOfEUTRA->get(
ue_radio_capability_for_paging_of_eutra))
return false;
}
return true; return true;
} }
...@@ -281,15 +264,16 @@ bool UeRadioCapabilityInfoIndicationMsg::decodeFromPdu( ...@@ -281,15 +264,16 @@ bool UeRadioCapabilityInfoIndicationMsg::decodeFromPdu(
ueRadioCapabilityInfoIndicationIEs->protocolIEs.list.array[i] ueRadioCapabilityInfoIndicationIEs->protocolIEs.list.array[i]
->value.present == ->value.present ==
Ngap_UERadioCapabilityInfoIndicationIEs__value_PR_UERadioCapabilityForPaging) { Ngap_UERadioCapabilityInfoIndicationIEs__value_PR_UERadioCapabilityForPaging) {
ueRadioCapabilityForPaging = new UERadioCapabilityForPaging(); UERadioCapabilityForPaging tmp = {};
if (!ueRadioCapabilityForPaging->decodefromUERadioCapabilityForPaging( if (!tmp.decode(&ueRadioCapabilityInfoIndicationIEs->protocolIEs.list
&ueRadioCapabilityInfoIndicationIEs->protocolIEs.list
.array[i] .array[i]
->value.choice.UERadioCapabilityForPaging)) { ->value.choice.UERadioCapabilityForPaging)) {
Logger::ngap().error( Logger::ngap().error(
"Decoded NGAP UERadioCapabilityForPaging IE error"); "Decoded NGAP UERadioCapabilityForPaging IE error");
return false; return false;
} }
ueRadioCapabilityForPaging =
std::optional<UERadioCapabilityForPaging>(tmp);
} else { } else {
Logger::ngap().error( Logger::ngap().error(
"Decoded NGAP UERadioCapabilityForPaging IE error"); "Decoded NGAP UERadioCapabilityForPaging IE error");
......
...@@ -43,9 +43,6 @@ class UeRadioCapabilityInfoIndicationMsg : public NgapUEMessage { ...@@ -43,9 +43,6 @@ class UeRadioCapabilityInfoIndicationMsg : public NgapUEMessage {
void setRanUeNgapId(const uint32_t& id) override; void setRanUeNgapId(const uint32_t& id) override;
bool decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) override; bool decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) override;
void setUERadioCapability(uint8_t* buf, size_t size);
bool getUERadioCapability(uint8_t*& buf, size_t& size);
void setUERadioCapability(const OCTET_STRING_t& capability); void setUERadioCapability(const OCTET_STRING_t& capability);
void getUERadioCapability(OCTET_STRING_t& capability); void getUERadioCapability(OCTET_STRING_t& capability);
...@@ -61,7 +58,8 @@ class UeRadioCapabilityInfoIndicationMsg : public NgapUEMessage { ...@@ -61,7 +58,8 @@ class UeRadioCapabilityInfoIndicationMsg : public NgapUEMessage {
// AMF_UE_NGAP_ID //Mandatory // AMF_UE_NGAP_ID //Mandatory
// RAN_UE_NGAP_ID //Mandatory // RAN_UE_NGAP_ID //Mandatory
UERadioCapability ueRadioCapability; // Mandatory UERadioCapability ueRadioCapability; // Mandatory
UERadioCapabilityForPaging* ueRadioCapabilityForPaging; // Optional std::optional<UERadioCapabilityForPaging>
ueRadioCapabilityForPaging; // Optional
}; };
} // namespace ngap } // namespace ngap
......
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