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* pdu_session_resource_setup_item_su_req) {
pduSessionResourceSetupItemSUReq) { if (!pdu_session_id_.decode(
if (!pDUSessionID.decode(pduSessionResourceSetupItemSUReq->pDUSessionID)) 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);
......
...@@ -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