Commit 122ef355 authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Code refactor for PduSessionResourceSetupRequest

parent 3edbfd8c
...@@ -25,19 +25,13 @@ ...@@ -25,19 +25,13 @@
namespace ngap { namespace ngap {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
NAS_PDU::NAS_PDU() { NAS_PDU::NAS_PDU() {}
// buffer_ = nullptr;
// size_ = -1;
pdu_.buf = nullptr;
pdu_.size = -1;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
NAS_PDU::~NAS_PDU() {} NAS_PDU::~NAS_PDU() {}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool NAS_PDU::encode(Ngap_NAS_PDU_t& nas_pdu) { bool NAS_PDU::encode(Ngap_NAS_PDU_t& nas_pdu) {
if (!pdu_.buf) return false;
return conv::bstring_2_octet_string(pdu_bstring, nas_pdu); return conv::bstring_2_octet_string(pdu_bstring, nas_pdu);
} }
......
...@@ -50,7 +50,6 @@ class NAS_PDU { ...@@ -50,7 +50,6 @@ class NAS_PDU {
bool set(const NAS_PDU& nas_pdu); bool set(const NAS_PDU& nas_pdu);
private: private:
OCTET_STRING_t pdu_;
bstring pdu_bstring; bstring pdu_bstring;
}; };
......
...@@ -29,74 +29,82 @@ namespace ngap { ...@@ -29,74 +29,82 @@ namespace ngap {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
PDUSessionResourceSetupItemSUReq::PDUSessionResourceSetupItemSUReq() { PDUSessionResourceSetupItemSUReq::PDUSessionResourceSetupItemSUReq() {
nAS_PDU = nullptr; nas_pdu_ = std::nullopt;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
PDUSessionResourceSetupItemSUReq::~PDUSessionResourceSetupItemSUReq() {} PDUSessionResourceSetupItemSUReq::~PDUSessionResourceSetupItemSUReq() {}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void PDUSessionResourceSetupItemSUReq::setPDUSessionResourceSetupItemSUReq( void PDUSessionResourceSetupItemSUReq::set(
const PDUSessionID& m_pDUSessionID, NAS_PDU* m_nAS_PDU, const PDUSessionID& pdu_session_id, std::optional<NAS_PDU>& nas_pdu,
const S_NSSAI& m_s_NSSAI, const S_NSSAI& s_nssai,
const OCTET_STRING_t& m_pDUSessionResourceSetupRequestTransfer) { const OCTET_STRING_t& pdu_session_resource_setup_request_transfer) {
pDUSessionID = m_pDUSessionID; pdu_session_id_ = pdu_session_id;
nAS_PDU = m_nAS_PDU; nas_pdu_ = nas_pdu;
s_NSSAI = m_s_NSSAI; s_nssai_ = s_nssai;
pDUSessionResourceSetupRequestTransfer = pdu_session_resource_setup_request_transfer_ =
m_pDUSessionResourceSetupRequestTransfer; pdu_session_resource_setup_request_transfer;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void PDUSessionResourceSetupItemSUReq::getPDUSessionResourceSetupItemSUReq( void PDUSessionResourceSetupItemSUReq::get(
PDUSessionID& m_pDUSessionID, NAS_PDU*& m_nAS_PDU, S_NSSAI& m_s_NSSAI, PDUSessionID& pdu_session_id, std::optional<NAS_PDU>& nas_pdu,
OCTET_STRING_t& m_pDUSessionResourceSetupRequestTransfer) { S_NSSAI& s_nssai,
m_pDUSessionID = pDUSessionID; OCTET_STRING_t& pdu_session_resource_setup_request_transfer) {
m_nAS_PDU = nAS_PDU; pdu_session_id = pdu_session_id_;
m_s_NSSAI = s_NSSAI; nas_pdu = nas_pdu_;
m_pDUSessionResourceSetupRequestTransfer = s_nssai = s_nssai_;
pDUSessionResourceSetupRequestTransfer; pdu_session_resource_setup_request_transfer =
pdu_session_resource_setup_request_transfer_;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool PDUSessionResourceSetupItemSUReq::encode2PDUSessionResourceSetupItemSUReq( bool PDUSessionResourceSetupItemSUReq::encode(
Ngap_PDUSessionResourceSetupItemSUReq_t* pduSessionResourceSetupItemSUReq) { Ngap_PDUSessionResourceSetupItemSUReq_t*
if (!pDUSessionID.encode(pduSessionResourceSetupItemSUReq->pDUSessionID)) pdu_session_resource_setup_item_su_req) {
if (!pdu_session_id_.encode(
pdu_session_resource_setup_item_su_req->pDUSessionID))
return false; return false;
if (nAS_PDU) { if (nas_pdu_.has_value()) {
Ngap_NAS_PDU_t* naspdu = Ngap_NAS_PDU_t* naspdu =
(Ngap_NAS_PDU_t*) calloc(1, sizeof(Ngap_NAS_PDU_t)); (Ngap_NAS_PDU_t*) calloc(1, sizeof(Ngap_NAS_PDU_t));
if (!naspdu) return false; if (!naspdu) return false;
if (!nAS_PDU->encode(*naspdu)) { if (!nas_pdu_.value().encode(*naspdu)) {
free_wrapper((void**) &naspdu); free_wrapper((void**) &naspdu);
return false; return false;
} }
pduSessionResourceSetupItemSUReq->pDUSessionNAS_PDU = naspdu; pdu_session_resource_setup_item_su_req->pDUSessionNAS_PDU = naspdu;
} }
if (!s_NSSAI.encode(&pduSessionResourceSetupItemSUReq->s_NSSAI)) return false; if (!s_nssai_.encode(&pdu_session_resource_setup_item_su_req->s_NSSAI))
pduSessionResourceSetupItemSUReq->pDUSessionResourceSetupRequestTransfer = return false;
pDUSessionResourceSetupRequestTransfer; pdu_session_resource_setup_item_su_req
->pDUSessionResourceSetupRequestTransfer =
pdu_session_resource_setup_request_transfer_;
return true; return true;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool PDUSessionResourceSetupItemSUReq:: bool PDUSessionResourceSetupItemSUReq::decode(
decodefromPDUSessionResourceSetupItemSUReq(
Ngap_PDUSessionResourceSetupItemSUReq_t* Ngap_PDUSessionResourceSetupItemSUReq_t*
pduSessionResourceSetupItemSUReq) { pdu_session_resource_setup_item_su_req) {
if (!pDUSessionID.decode(pduSessionResourceSetupItemSUReq->pDUSessionID)) if (!pdu_session_id_.decode(
pdu_session_resource_setup_item_su_req->pDUSessionID))
return false;
if (!s_nssai_.decode(&pdu_session_resource_setup_item_su_req->s_NSSAI))
return false; return false;
if (!s_NSSAI.decode(&pduSessionResourceSetupItemSUReq->s_NSSAI)) return false;
if (pduSessionResourceSetupItemSUReq->pDUSessionNAS_PDU) { if (pdu_session_resource_setup_item_su_req->pDUSessionNAS_PDU) {
nAS_PDU = new NAS_PDU(); NAS_PDU tmp = {};
if (!nAS_PDU->decode(*pduSessionResourceSetupItemSUReq->pDUSessionNAS_PDU)) if (!tmp.decode(*pdu_session_resource_setup_item_su_req->pDUSessionNAS_PDU))
return false; return false;
nas_pdu_ = std::optional<NAS_PDU>(tmp);
} }
pDUSessionResourceSetupRequestTransfer = pdu_session_resource_setup_request_transfer_ =
pduSessionResourceSetupItemSUReq->pDUSessionResourceSetupRequestTransfer; pdu_session_resource_setup_item_su_req
->pDUSessionResourceSetupRequestTransfer;
return true; return true;
} }
......
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
#include "PDUSessionID.hpp" #include "PDUSessionID.hpp"
#include "S-NSSAI.hpp" #include "S-NSSAI.hpp"
#include <optional>
extern "C" { extern "C" {
#include "Ngap_PDUSessionResourceSetupItemSUReq.h" #include "Ngap_PDUSessionResourceSetupItemSUReq.h"
} }
...@@ -37,27 +39,25 @@ class PDUSessionResourceSetupItemSUReq { ...@@ -37,27 +39,25 @@ class PDUSessionResourceSetupItemSUReq {
PDUSessionResourceSetupItemSUReq(); PDUSessionResourceSetupItemSUReq();
virtual ~PDUSessionResourceSetupItemSUReq(); virtual ~PDUSessionResourceSetupItemSUReq();
void setPDUSessionResourceSetupItemSUReq( void set(
const PDUSessionID& m_pDUSessionID, NAS_PDU* m_nAS_PDU, const PDUSessionID& pdu_session_id, std::optional<NAS_PDU>& nas_pdu,
const S_NSSAI& m_s_NSSAI, const S_NSSAI& s_nssai,
const OCTET_STRING_t& m_pDUSessionResourceSetupRequestTransfer); const OCTET_STRING_t& pdu_session_resource_setup_request_transfer);
void getPDUSessionResourceSetupItemSUReq( void get(
PDUSessionID& m_pDUSessionID, NAS_PDU*& m_nAS_PDU, S_NSSAI& m_s_NSSAI, PDUSessionID& pdu_session_id, std::optional<NAS_PDU>& nas_pdu,
OCTET_STRING_t& m_pDUSessionResourceSetupRequestTransfer); S_NSSAI& s_nssai,
OCTET_STRING_t& pdu_session_resource_setup_request_transfer);
bool encode2PDUSessionResourceSetupItemSUReq( bool encode(Ngap_PDUSessionResourceSetupItemSUReq_t*
Ngap_PDUSessionResourceSetupItemSUReq_t* pdu_session_resource_setup_item_su_req);
pduSessionResourceSetupItemSUReq); bool decode(Ngap_PDUSessionResourceSetupItemSUReq_t*
bool decodefromPDUSessionResourceSetupItemSUReq( pdu_session_resource_setup_item_su_req);
Ngap_PDUSessionResourceSetupItemSUReq_t*
pduSessionResourceSetupItemSUReq);
private: private:
PDUSessionID pDUSessionID; // Mandatory PDUSessionID pdu_session_id_; // Mandatory
NAS_PDU* nAS_PDU; // Optional std::optional<NAS_PDU> nas_pdu_; // Optional
S_NSSAI s_NSSAI; // Mandatory S_NSSAI s_nssai_; // Mandatory
OCTET_STRING_t pDUSessionResourceSetupRequestTransfer; // Mandatory OCTET_STRING_t pdu_session_resource_setup_request_transfer_; // Mandatory
// TODO: UE Aggregate Maximum Bit Rate (Optional)
}; };
} // namespace ngap } // namespace ngap
......
...@@ -49,7 +49,7 @@ bool PDUSessionResourceSetupListSUReq::encode2PDUSessionResourceSetupListSUReq( ...@@ -49,7 +49,7 @@ bool PDUSessionResourceSetupListSUReq::encode2PDUSessionResourceSetupListSUReq(
(Ngap_PDUSessionResourceSetupItemSUReq_t*) calloc( (Ngap_PDUSessionResourceSetupItemSUReq_t*) calloc(
1, sizeof(Ngap_PDUSessionResourceSetupItemSUReq_t)); 1, sizeof(Ngap_PDUSessionResourceSetupItemSUReq_t));
if (!request) return false; if (!request) return false;
if (!item.encode2PDUSessionResourceSetupItemSUReq(request)) return false; if (!item.encode(request)) return false;
if (ASN_SEQUENCE_ADD(&pduSessionResourceSetupListSUReq->list, request) != 0) if (ASN_SEQUENCE_ADD(&pduSessionResourceSetupListSUReq->list, request) != 0)
return false; return false;
} }
...@@ -64,8 +64,7 @@ bool PDUSessionResourceSetupListSUReq:: ...@@ -64,8 +64,7 @@ bool PDUSessionResourceSetupListSUReq::
pduSessionResourceSetupListSUReq) { pduSessionResourceSetupListSUReq) {
for (int i = 0; i < pduSessionResourceSetupListSUReq->list.count; i++) { for (int i = 0; i < pduSessionResourceSetupListSUReq->list.count; i++) {
PDUSessionResourceSetupItemSUReq item = {}; PDUSessionResourceSetupItemSUReq item = {};
if (!item.decodefromPDUSessionResourceSetupItemSUReq( if (!item.decode(pduSessionResourceSetupListSUReq->list.array[i]))
pduSessionResourceSetupListSUReq->list.array[i]))
return false; return false;
itemSUReqList.push_back(item); itemSUReqList.push_back(item);
} }
......
...@@ -101,7 +101,7 @@ void PduSessionResourceModifyRequestMsg::setRanUeNgapId( ...@@ -101,7 +101,7 @@ void PduSessionResourceModifyRequestMsg::setRanUeNgapId(
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void PduSessionResourceModifyRequestMsg::setRanPagingPriority( void PduSessionResourceModifyRequestMsg::setRanPagingPriority(
const uint8_t& priority) { const uint32_t& priority) {
if (!ranPagingPriority) ranPagingPriority = new RANPagingPriority(); if (!ranPagingPriority) ranPagingPriority = new RANPagingPriority();
ranPagingPriority->set(priority); ranPagingPriority->set(priority);
......
...@@ -43,7 +43,7 @@ class PduSessionResourceModifyRequestMsg : public NgapUEMessage { ...@@ -43,7 +43,7 @@ class PduSessionResourceModifyRequestMsg : 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 setRanPagingPriority(const uint8_t& priority); void setRanPagingPriority(const uint32_t& priority);
int getRanPagingPriority(); int getRanPagingPriority();
void setNasPdu(const bstring& pdu); void setNasPdu(const bstring& pdu);
......
...@@ -103,7 +103,7 @@ void PduSessionResourceReleaseCommandMsg::setRanUeNgapId( ...@@ -103,7 +103,7 @@ void PduSessionResourceReleaseCommandMsg::setRanUeNgapId(
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void PduSessionResourceReleaseCommandMsg::setRanPagingPriority( void PduSessionResourceReleaseCommandMsg::setRanPagingPriority(
const uint8_t& priority) { const uint32_t& priority) {
RANPagingPriority tmp = {}; RANPagingPriority tmp = {};
tmp.set(priority); tmp.set(priority);
ranPagingPriority = std::optional<RANPagingPriority>(tmp); ranPagingPriority = std::optional<RANPagingPriority>(tmp);
...@@ -131,7 +131,7 @@ void PduSessionResourceReleaseCommandMsg::setRanPagingPriority( ...@@ -131,7 +131,7 @@ void PduSessionResourceReleaseCommandMsg::setRanPagingPriority(
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool PduSessionResourceReleaseCommandMsg::getRanPagingPriority( bool PduSessionResourceReleaseCommandMsg::getRanPagingPriority(
uint8_t& priority) { uint32_t& priority) {
if (!ranPagingPriority.has_value()) return false; if (!ranPagingPriority.has_value()) return false;
priority = ranPagingPriority.value().get(); priority = ranPagingPriority.value().get();
return true; return true;
......
...@@ -43,8 +43,8 @@ class PduSessionResourceReleaseCommandMsg : public NgapUEMessage { ...@@ -43,8 +43,8 @@ class PduSessionResourceReleaseCommandMsg : 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 setRanPagingPriority(const uint8_t& priority); void setRanPagingPriority(const uint32_t& priority);
bool getRanPagingPriority(uint8_t& priority); bool getRanPagingPriority(uint32_t& priority);
void setNasPdu(const bstring& pdu); void setNasPdu(const bstring& pdu);
bool getNasPdu(bstring& pdu); bool getNasPdu(bstring& pdu);
......
...@@ -34,9 +34,9 @@ namespace ngap { ...@@ -34,9 +34,9 @@ namespace ngap {
PduSessionResourceSetupRequestMsg::PduSessionResourceSetupRequestMsg() PduSessionResourceSetupRequestMsg::PduSessionResourceSetupRequestMsg()
: NgapUEMessage() { : NgapUEMessage() {
pduSessionResourceSetupRequestIEs = nullptr; pduSessionResourceSetupRequestIEs = nullptr;
ranPagingPriority = nullptr; ranPagingPriority = std::nullopt;
nasPdu = nullptr; nasPdu = std::nullopt;
uEAggregateMaxBitRate = nullptr; uEAggregateMaxBitRate = std::nullopt;
setMessageType(NgapMessageType::PDU_SESSION_RESOURCE_SETUP_REQUEST); setMessageType(NgapMessageType::PDU_SESSION_RESOURCE_SETUP_REQUEST);
initialize(); initialize();
...@@ -54,11 +54,10 @@ void PduSessionResourceSetupRequestMsg::initialize() { ...@@ -54,11 +54,10 @@ void PduSessionResourceSetupRequestMsg::initialize() {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void PduSessionResourceSetupRequestMsg::setUEAggregateMaxBitRate( void PduSessionResourceSetupRequestMsg::setUEAggregateMaxBitRate(
const long& bit_rate_downlink, const long& bit_rate_uplink) { const uint64_t& bit_rate_downlink, const uint64_t& bit_rate_uplink) {
if (!uEAggregateMaxBitRate) UEAggregateMaxBitRate tmp = {};
uEAggregateMaxBitRate = new UEAggregateMaxBitRate(); tmp.set(bit_rate_downlink, bit_rate_uplink);
uEAggregateMaxBitRate = std::optional<UEAggregateMaxBitRate>(tmp);
uEAggregateMaxBitRate->set(bit_rate_downlink, bit_rate_uplink);
Ngap_PDUSessionResourceSetupRequestIEs_t* ie = Ngap_PDUSessionResourceSetupRequestIEs_t* ie =
(Ngap_PDUSessionResourceSetupRequestIEs_t*) calloc( (Ngap_PDUSessionResourceSetupRequestIEs_t*) calloc(
...@@ -68,8 +67,8 @@ void PduSessionResourceSetupRequestMsg::setUEAggregateMaxBitRate( ...@@ -68,8 +67,8 @@ void PduSessionResourceSetupRequestMsg::setUEAggregateMaxBitRate(
ie->value.present = ie->value.present =
Ngap_PDUSessionResourceSetupRequestIEs__value_PR_UEAggregateMaximumBitRate; Ngap_PDUSessionResourceSetupRequestIEs__value_PR_UEAggregateMaximumBitRate;
int ret = int ret = uEAggregateMaxBitRate.value().encode(
uEAggregateMaxBitRate->encode(ie->value.choice.UEAggregateMaximumBitRate); ie->value.choice.UEAggregateMaximumBitRate);
if (!ret) { if (!ret) {
Logger::ngap().error("Encode NGAP UEAggregateMaxBitRate IE error"); Logger::ngap().error("Encode NGAP UEAggregateMaxBitRate IE error");
free_wrapper((void**) &ie); free_wrapper((void**) &ie);
...@@ -82,6 +81,12 @@ void PduSessionResourceSetupRequestMsg::setUEAggregateMaxBitRate( ...@@ -82,6 +81,12 @@ void PduSessionResourceSetupRequestMsg::setUEAggregateMaxBitRate(
Logger::ngap().error("Encode NGAP UEAggregateMaxBitRate IE error"); Logger::ngap().error("Encode NGAP UEAggregateMaxBitRate IE error");
} }
//------------------------------------------------------------------------------
bool PduSessionResourceSetupRequestMsg::getUEAggregateMaxBitRate(
uint64_t& bit_rate_downlink, uint64_t& bit_rate_uplink) const {
if (!uEAggregateMaxBitRate.has_value()) return false;
return uEAggregateMaxBitRate.value().get(bit_rate_downlink, bit_rate_uplink);
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void PduSessionResourceSetupRequestMsg::setAmfUeNgapId( void PduSessionResourceSetupRequestMsg::setAmfUeNgapId(
const unsigned long& id) { const unsigned long& id) {
...@@ -134,10 +139,10 @@ void PduSessionResourceSetupRequestMsg::setRanUeNgapId( ...@@ -134,10 +139,10 @@ void PduSessionResourceSetupRequestMsg::setRanUeNgapId(
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void PduSessionResourceSetupRequestMsg::setRanPagingPriority( void PduSessionResourceSetupRequestMsg::setRanPagingPriority(
const uint8_t& priority) { const uint32_t& priority) {
if (!ranPagingPriority) ranPagingPriority = new RANPagingPriority(); RANPagingPriority tmp = {};
tmp.set(priority);
ranPagingPriority->set(priority); ranPagingPriority = std::optional<RANPagingPriority>(tmp);
Ngap_PDUSessionResourceSetupRequestIEs_t* ie = Ngap_PDUSessionResourceSetupRequestIEs_t* ie =
(Ngap_PDUSessionResourceSetupRequestIEs_t*) calloc( (Ngap_PDUSessionResourceSetupRequestIEs_t*) calloc(
...@@ -147,7 +152,8 @@ void PduSessionResourceSetupRequestMsg::setRanPagingPriority( ...@@ -147,7 +152,8 @@ void PduSessionResourceSetupRequestMsg::setRanPagingPriority(
ie->value.present = ie->value.present =
Ngap_PDUSessionResourceSetupRequestIEs__value_PR_RANPagingPriority; Ngap_PDUSessionResourceSetupRequestIEs__value_PR_RANPagingPriority;
int ret = ranPagingPriority->encode(ie->value.choice.RANPagingPriority); int ret =
ranPagingPriority.value().encode(ie->value.choice.RANPagingPriority);
if (!ret) { if (!ret) {
Logger::ngap().error("Encode NGAP RANPagingPriority IE error"); Logger::ngap().error("Encode NGAP RANPagingPriority IE error");
free_wrapper((void**) &ie); free_wrapper((void**) &ie);
...@@ -160,16 +166,18 @@ void PduSessionResourceSetupRequestMsg::setRanPagingPriority( ...@@ -160,16 +166,18 @@ void PduSessionResourceSetupRequestMsg::setRanPagingPriority(
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int PduSessionResourceSetupRequestMsg::getRanPagingPriority() { bool PduSessionResourceSetupRequestMsg::getRanPagingPriority(
if (!ranPagingPriority) return -1; uint32_t& ran_paging_priority) {
return ranPagingPriority->get(); if (!ranPagingPriority.has_value()) return false;
ran_paging_priority = ranPagingPriority.value().get();
return true;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void PduSessionResourceSetupRequestMsg::setNasPdu(const bstring& pdu) { void PduSessionResourceSetupRequestMsg::setNasPdu(const bstring& pdu) {
if (!nasPdu) nasPdu = new NAS_PDU(); NAS_PDU tmp = {};
tmp.set(pdu);
nasPdu->set(pdu); nasPdu = std::optional<NAS_PDU>(tmp);
Ngap_PDUSessionResourceSetupRequestIEs_t* ie = Ngap_PDUSessionResourceSetupRequestIEs_t* ie =
(Ngap_PDUSessionResourceSetupRequestIEs_t*) calloc( (Ngap_PDUSessionResourceSetupRequestIEs_t*) calloc(
...@@ -178,7 +186,7 @@ void PduSessionResourceSetupRequestMsg::setNasPdu(const bstring& pdu) { ...@@ -178,7 +186,7 @@ void PduSessionResourceSetupRequestMsg::setNasPdu(const bstring& pdu) {
ie->criticality = Ngap_Criticality_reject; ie->criticality = Ngap_Criticality_reject;
ie->value.present = Ngap_PDUSessionResourceSetupRequestIEs__value_PR_NAS_PDU; ie->value.present = Ngap_PDUSessionResourceSetupRequestIEs__value_PR_NAS_PDU;
int ret = nasPdu->encode(ie->value.choice.NAS_PDU); int ret = nasPdu.value().encode(ie->value.choice.NAS_PDU);
if (!ret) { if (!ret) {
Logger::ngap().error("Encode NGAP NAS_PDU IE error"); Logger::ngap().error("Encode NGAP NAS_PDU IE error");
free_wrapper((void**) &ie); free_wrapper((void**) &ie);
...@@ -192,8 +200,8 @@ void PduSessionResourceSetupRequestMsg::setNasPdu(const bstring& pdu) { ...@@ -192,8 +200,8 @@ void PduSessionResourceSetupRequestMsg::setNasPdu(const bstring& pdu) {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool PduSessionResourceSetupRequestMsg::getNasPdu(bstring& pdu) { bool PduSessionResourceSetupRequestMsg::getNasPdu(bstring& pdu) {
if (!nasPdu) return false; if (!nasPdu.has_value()) return false;
return nasPdu->get(pdu); return nasPdu.value().get(pdu);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
...@@ -205,15 +213,16 @@ void PduSessionResourceSetupRequestMsg::setPduSessionResourceSetupRequestList( ...@@ -205,15 +213,16 @@ void PduSessionResourceSetupRequestMsg::setPduSessionResourceSetupRequestList(
PDUSessionResourceSetupItemSUReq itemSUReq = {}; PDUSessionResourceSetupItemSUReq itemSUReq = {};
PDUSessionID pDUSessionID = {}; PDUSessionID pDUSessionID = {};
pDUSessionID.set(list[i].pduSessionId); pDUSessionID.set(list[i].pduSessionId);
NAS_PDU* m_nAS_PDU = nullptr; std::optional<NAS_PDU> m_nAS_PDU = std::nullopt;
if (conv::check_bstring(list[i].nas_pdu)) { if (conv::check_bstring(list[i].nas_pdu)) {
m_nAS_PDU = new NAS_PDU(); NAS_PDU tmp = {};
m_nAS_PDU->set(list[i].nas_pdu); tmp.set(list[i].nas_pdu);
m_nAS_PDU = std::optional<NAS_PDU>(tmp);
} }
S_NSSAI s_NSSAI = {}; S_NSSAI s_NSSAI = {};
s_NSSAI.setSst(list[i].s_nssai.sst); s_NSSAI.setSst(list[i].s_nssai.sst);
if (list[i].s_nssai.sd.size()) s_NSSAI.setSd(list[i].s_nssai.sd); if (list[i].s_nssai.sd.size()) s_NSSAI.setSd(list[i].s_nssai.sd);
itemSUReq.setPDUSessionResourceSetupItemSUReq( itemSUReq.set(
pDUSessionID, m_nAS_PDU, s_NSSAI, pDUSessionID, m_nAS_PDU, s_NSSAI,
list[i].pduSessionResourceSetupRequestTransfer); list[i].pduSessionResourceSetupRequestTransfer);
itemSUReqList.push_back(itemSUReq); itemSUReqList.push_back(itemSUReq);
...@@ -258,16 +267,16 @@ bool PduSessionResourceSetupRequestMsg::getPduSessionResourceSetupRequestList( ...@@ -258,16 +267,16 @@ bool PduSessionResourceSetupRequestMsg::getPduSessionResourceSetupRequestList(
PDUSessionResourceSetupRequestItem_t request = {}; PDUSessionResourceSetupRequestItem_t request = {};
PDUSessionID pDUSessionID = {}; PDUSessionID pDUSessionID = {};
NAS_PDU* nAS_PDU = nullptr; std::optional<NAS_PDU> nAS_PDU = std::nullopt;
S_NSSAI s_NSSAI = {}; S_NSSAI s_NSSAI = {};
item.getPDUSessionResourceSetupItemSUReq( item.get(
pDUSessionID, nAS_PDU, s_NSSAI, pDUSessionID, nAS_PDU, s_NSSAI,
request.pduSessionResourceSetupRequestTransfer); request.pduSessionResourceSetupRequestTransfer);
pDUSessionID.get(request.pduSessionId); pDUSessionID.get(request.pduSessionId);
s_NSSAI.getSst(request.s_nssai.sst); s_NSSAI.getSst(request.s_nssai.sst);
s_NSSAI.getSd(request.s_nssai.sd); s_NSSAI.getSd(request.s_nssai.sd);
if (nAS_PDU) { if (nAS_PDU.has_value()) {
nAS_PDU->get(request.nas_pdu); nAS_PDU.value().get(request.nas_pdu);
} }
list.push_back(request); list.push_back(request);
} }
...@@ -344,13 +353,14 @@ bool PduSessionResourceSetupRequestMsg::decodeFromPdu( ...@@ -344,13 +353,14 @@ bool PduSessionResourceSetupRequestMsg::decodeFromPdu(
pduSessionResourceSetupRequestIEs->protocolIEs.list.array[i] pduSessionResourceSetupRequestIEs->protocolIEs.list.array[i]
->value.present == ->value.present ==
Ngap_PDUSessionResourceSetupRequestIEs__value_PR_RANPagingPriority) { Ngap_PDUSessionResourceSetupRequestIEs__value_PR_RANPagingPriority) {
ranPagingPriority = new RANPagingPriority(); RANPagingPriority tmp = {};
if (!ranPagingPriority->decode( if (!tmp.decode(
pduSessionResourceSetupRequestIEs->protocolIEs.list.array[i] pduSessionResourceSetupRequestIEs->protocolIEs.list.array[i]
->value.choice.RANPagingPriority)) { ->value.choice.RANPagingPriority)) {
Logger::ngap().error("Decoded NGAP RANPagingPriority IE error"); Logger::ngap().error("Decoded NGAP RANPagingPriority IE error");
return false; return false;
} }
ranPagingPriority = std::optional<RANPagingPriority>(tmp);
} else { } else {
Logger::ngap().error("Decoded NGAP RANPagingPriority IE error"); Logger::ngap().error("Decoded NGAP RANPagingPriority IE error");
return false; return false;
...@@ -362,13 +372,14 @@ bool PduSessionResourceSetupRequestMsg::decodeFromPdu( ...@@ -362,13 +372,14 @@ bool PduSessionResourceSetupRequestMsg::decodeFromPdu(
pduSessionResourceSetupRequestIEs->protocolIEs.list.array[i] pduSessionResourceSetupRequestIEs->protocolIEs.list.array[i]
->value.present == ->value.present ==
Ngap_PDUSessionResourceSetupRequestIEs__value_PR_NAS_PDU) { Ngap_PDUSessionResourceSetupRequestIEs__value_PR_NAS_PDU) {
nasPdu = new NAS_PDU(); NAS_PDU tmp = {};
if (!nasPdu->decode( if (!tmp.decode(
pduSessionResourceSetupRequestIEs->protocolIEs.list.array[i] pduSessionResourceSetupRequestIEs->protocolIEs.list.array[i]
->value.choice.NAS_PDU)) { ->value.choice.NAS_PDU)) {
Logger::ngap().error("Decoded NGAP NAS_PDU IE error"); Logger::ngap().error("Decoded NGAP NAS_PDU IE error");
return false; return false;
} }
nasPdu = std::optional<NAS_PDU>(tmp);
} else { } else {
Logger::ngap().error("Decoded NGAP NAS_PDU IE error"); Logger::ngap().error("Decoded NGAP NAS_PDU IE error");
return false; return false;
...@@ -396,6 +407,27 @@ bool PduSessionResourceSetupRequestMsg::decodeFromPdu( ...@@ -396,6 +407,27 @@ bool PduSessionResourceSetupRequestMsg::decodeFromPdu(
return false; return false;
} }
} break; } break;
// TODO:uEAggregateMaxBitRate
case Ngap_ProtocolIE_ID_id_UEAggregateMaximumBitRate: {
if (pduSessionResourceSetupRequestIEs->protocolIEs.list.array[i]
->criticality == Ngap_Criticality_ignore &&
pduSessionResourceSetupRequestIEs->protocolIEs.list.array[i]
->value.present ==
Ngap_PDUSessionResourceSetupRequestIEs__value_PR_UEAggregateMaximumBitRate) {
UEAggregateMaxBitRate tmp = {};
if (!tmp.decode(
pduSessionResourceSetupRequestIEs->protocolIEs.list.array[i]
->value.choice.UEAggregateMaximumBitRate)) {
Logger::ngap().error("Decoded NGAP UEAggregateMaxBitRate IE error");
return false;
}
uEAggregateMaxBitRate = std::optional<UEAggregateMaxBitRate>(tmp);
} else {
Logger::ngap().error("Decoded NGAP UEAggregateMaxBitRate IE error");
return false;
}
} break;
default: { default: {
Logger::ngap().error("Decoded NGAP Message PDU error"); Logger::ngap().error("Decoded NGAP Message PDU error");
return false; return false;
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
#include "UEAggregateMaxBitRate.hpp" #include "UEAggregateMaxBitRate.hpp"
#include "NgapUEMessage.hpp" #include "NgapUEMessage.hpp"
#include <optional>
extern "C" { extern "C" {
#include "Ngap_InitialContextSetupRequest.h" #include "Ngap_InitialContextSetupRequest.h"
} }
...@@ -44,8 +46,8 @@ class PduSessionResourceSetupRequestMsg : public NgapUEMessage { ...@@ -44,8 +46,8 @@ class PduSessionResourceSetupRequestMsg : 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 setRanPagingPriority(const uint8_t& priority); void setRanPagingPriority(const uint32_t& priority);
int getRanPagingPriority(); bool getRanPagingPriority(uint32_t& priority);
void setNasPdu(const bstring& pdu); void setNasPdu(const bstring& pdu);
bool getNasPdu(bstring& pdu); bool getNasPdu(bstring& pdu);
...@@ -56,17 +58,18 @@ class PduSessionResourceSetupRequestMsg : public NgapUEMessage { ...@@ -56,17 +58,18 @@ class PduSessionResourceSetupRequestMsg : public NgapUEMessage {
std::vector<PDUSessionResourceSetupRequestItem_t>& list); std::vector<PDUSessionResourceSetupRequestItem_t>& list);
void setUEAggregateMaxBitRate( void setUEAggregateMaxBitRate(
const long& bit_rate_downlink, const long& bit_rate_uplink); const uint64_t& bit_rate_downlink, const uint64_t& bit_rate_uplink);
void getUEAggregateMaxBitRate(long& bit_rate_downlink, long& bit_rate_uplink); bool getUEAggregateMaxBitRate(
uint64_t& bit_rate_downlink, uint64_t& bit_rate_uplink) const;
private: private:
Ngap_PDUSessionResourceSetupRequest_t* pduSessionResourceSetupRequestIEs; Ngap_PDUSessionResourceSetupRequest_t* pduSessionResourceSetupRequestIEs;
RANPagingPriority* ranPagingPriority; // Optional std::optional<RANPagingPriority> ranPagingPriority; // Optional
NAS_PDU* nasPdu; // Optional std::optional<NAS_PDU> nasPdu; // Optional
PDUSessionResourceSetupListSUReq PDUSessionResourceSetupListSUReq
pduSessionResourceSetupRequestList; // Mandatory pduSessionResourceSetupRequestList; // Mandatory
UEAggregateMaxBitRate* uEAggregateMaxBitRate; // Optional std::optional<UEAggregateMaxBitRate> uEAggregateMaxBitRate; // 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