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

Code refactoring for PduSessionResourceReleaseCommand

parent fc51ad6e
......@@ -32,47 +32,44 @@ PDUSessionResourceToReleaseItemRelCmd::
~PDUSessionResourceToReleaseItemRelCmd() {}
//------------------------------------------------------------------------------
void PDUSessionResourceToReleaseItemRelCmd::
setPDUSessionResourceToReleaseItemRelCmd(
const PDUSessionID& m_pDUSessionID,
const OCTET_STRING_t& m_pDUSessionResourceReleaseCommandTransfer) {
pDUSessionID = m_pDUSessionID;
pDUSessionResourceReleaseCommandTransfer =
m_pDUSessionResourceReleaseCommandTransfer;
void PDUSessionResourceToReleaseItemRelCmd::set(
const PDUSessionID& pdu_session_id,
const OCTET_STRING_t& pdu_session_resource_release_command_transfer) {
pdu_session_id_ = pdu_session_id;
pdu_session_resource_release_command_transfer_ =
pdu_session_resource_release_command_transfer;
}
//------------------------------------------------------------------------------
void PDUSessionResourceToReleaseItemRelCmd::
getPDUSessionResourceToReleaseItemRelCmd(
PDUSessionID& m_pDUSessionID,
OCTET_STRING_t& m_pDUSessionResourceReleaseCommandTransfer) {
m_pDUSessionID = pDUSessionID;
m_pDUSessionResourceReleaseCommandTransfer =
pDUSessionResourceReleaseCommandTransfer;
void PDUSessionResourceToReleaseItemRelCmd::get(
PDUSessionID& pdu_session_id,
OCTET_STRING_t& pdu_session_resource_release_command_transfer) {
pdu_session_id = pdu_session_id_;
pdu_session_resource_release_command_transfer =
pdu_session_resource_release_command_transfer_;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceToReleaseItemRelCmd::
encode2PDUSessionResourceToReleaseItemRelCmd(
Ngap_PDUSessionResourceToReleaseItemRelCmd_t*
pduSessionResourceToReleaseItemRelCmd) {
if (!pDUSessionID.encode(pduSessionResourceToReleaseItemRelCmd->pDUSessionID))
bool PDUSessionResourceToReleaseItemRelCmd::encode(
Ngap_PDUSessionResourceToReleaseItemRelCmd_t*
pdu_session_resource_to_release_item_rel_cmd) {
if (!pdu_session_id_.encode(
pdu_session_resource_to_release_item_rel_cmd->pDUSessionID))
return false;
pduSessionResourceToReleaseItemRelCmd
pdu_session_resource_to_release_item_rel_cmd
->pDUSessionResourceReleaseCommandTransfer =
pDUSessionResourceReleaseCommandTransfer;
pdu_session_resource_release_command_transfer_;
return true;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceToReleaseItemRelCmd::
decodefromPDUSessionResourceToReleaseItemRelCmd(
Ngap_PDUSessionResourceToReleaseItemRelCmd_t*
pduSessionResourceToReleaseItemRelCmd) {
pDUSessionResourceReleaseCommandTransfer =
pduSessionResourceToReleaseItemRelCmd
bool PDUSessionResourceToReleaseItemRelCmd::decode(
Ngap_PDUSessionResourceToReleaseItemRelCmd_t*
pdu_session_resource_to_release_item_rel_cmd) {
pdu_session_resource_release_command_transfer_ =
pdu_session_resource_to_release_item_rel_cmd
->pDUSessionResourceReleaseCommandTransfer;
return true;
......
......@@ -35,23 +35,21 @@ class PDUSessionResourceToReleaseItemRelCmd {
PDUSessionResourceToReleaseItemRelCmd();
virtual ~PDUSessionResourceToReleaseItemRelCmd();
void setPDUSessionResourceToReleaseItemRelCmd(
const PDUSessionID& m_pDUSessionID,
const OCTET_STRING_t& m_pDUSessionResourceReleaseCommandTransfer);
void getPDUSessionResourceToReleaseItemRelCmd(
PDUSessionID& m_pDUSessionID,
OCTET_STRING_t& m_pDUSessionResourceReleaseCommandTransfer);
bool encode2PDUSessionResourceToReleaseItemRelCmd(
Ngap_PDUSessionResourceToReleaseItemRelCmd_t*
pduSessionResourceToReleaseItemRelCmd);
bool decodefromPDUSessionResourceToReleaseItemRelCmd(
Ngap_PDUSessionResourceToReleaseItemRelCmd_t*
pduSessionResourceToReleaseItemRelCmd);
void set(
const PDUSessionID& pdu_session_id,
const OCTET_STRING_t& pdu_session_resource_release_command_transfer);
void get(
PDUSessionID& pdu_session_id,
OCTET_STRING_t& pdu_session_resource_release_command_transfer);
bool encode(Ngap_PDUSessionResourceToReleaseItemRelCmd_t*
pdu_session_resource_to_release_item_rel_cmd);
bool decode(Ngap_PDUSessionResourceToReleaseItemRelCmd_t*
pdu_session_resource_to_release_item_rel_cmd);
private:
PDUSessionID pDUSessionID; // Mandatory
OCTET_STRING_t pDUSessionResourceReleaseCommandTransfer; // Mandatory
PDUSessionID pdu_session_id_; // Mandatory
OCTET_STRING_t pdu_session_resource_release_command_transfer_; // Mandatory
};
} // namespace ngap
......
......@@ -32,48 +32,45 @@ PDUSessionResourceToReleaseListRelCmd::
~PDUSessionResourceToReleaseListRelCmd() {}
//------------------------------------------------------------------------------
void PDUSessionResourceToReleaseListRelCmd::
setPDUSessionResourceToReleaseListRelCmd(
const std::vector<PDUSessionResourceToReleaseItemRelCmd>& list) {
itemRelCmdList = list;
void PDUSessionResourceToReleaseListRelCmd::set(
const std::vector<PDUSessionResourceToReleaseItemRelCmd>& list) {
item_list_ = list;
}
//------------------------------------------------------------------------------
void PDUSessionResourceToReleaseListRelCmd::
getPDUSessionResourceToReleaseListRelCmd(
std::vector<PDUSessionResourceToReleaseItemRelCmd>& list) {
list = itemRelCmdList;
void PDUSessionResourceToReleaseListRelCmd::get(
std::vector<PDUSessionResourceToReleaseItemRelCmd>& list) {
list = item_list_;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceToReleaseListRelCmd::
encode2PDUSessionResourceToReleaseListRelCmd(
Ngap_PDUSessionResourceToReleaseListRelCmd_t*
pduSessionResourceToReleaseListRelCmd) {
for (auto& item : itemRelCmdList) {
bool PDUSessionResourceToReleaseListRelCmd::encode(
Ngap_PDUSessionResourceToReleaseListRelCmd_t*
pdu_session_resource_to_released_list_rel_cmd) {
for (auto& item : item_list_) {
Ngap_PDUSessionResourceToReleaseItemRelCmd_t* rel =
(Ngap_PDUSessionResourceToReleaseItemRelCmd_t*) calloc(
1, sizeof(Ngap_PDUSessionResourceToReleaseItemRelCmd_t));
if (!rel) return false;
if (!item.encode2PDUSessionResourceToReleaseItemRelCmd(rel)) return false;
if (ASN_SEQUENCE_ADD(&pduSessionResourceToReleaseListRelCmd->list, rel) !=
0)
if (!item.encode(rel)) return false;
if (ASN_SEQUENCE_ADD(
&pdu_session_resource_to_released_list_rel_cmd->list, rel) != 0)
return false;
}
return true;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceToReleaseListRelCmd::
decodefromPDUSessionResourceToReleaseListRelCmd(
Ngap_PDUSessionResourceToReleaseListRelCmd_t*
pduSessionResourceToReleaseListRelCmd) {
for (int i = 0; i < pduSessionResourceToReleaseListRelCmd->list.count; i++) {
bool PDUSessionResourceToReleaseListRelCmd::decode(
Ngap_PDUSessionResourceToReleaseListRelCmd_t*
pdu_session_resource_to_released_list_rel_cmd) {
for (int i = 0; i < pdu_session_resource_to_released_list_rel_cmd->list.count;
i++) {
PDUSessionResourceToReleaseItemRelCmd item = {};
if (!item.decodefromPDUSessionResourceToReleaseItemRelCmd(
pduSessionResourceToReleaseListRelCmd->list.array[i]))
if (!item.decode(
pdu_session_resource_to_released_list_rel_cmd->list.array[i]))
return false;
itemRelCmdList.push_back(item);
item_list_.push_back(item);
}
return true;
}
......
......@@ -37,20 +37,16 @@ class PDUSessionResourceToReleaseListRelCmd {
PDUSessionResourceToReleaseListRelCmd();
virtual ~PDUSessionResourceToReleaseListRelCmd();
void setPDUSessionResourceToReleaseListRelCmd(
const std::vector<PDUSessionResourceToReleaseItemRelCmd>& list);
void getPDUSessionResourceToReleaseListRelCmd(
std::vector<PDUSessionResourceToReleaseItemRelCmd>& list);
bool encode2PDUSessionResourceToReleaseListRelCmd(
Ngap_PDUSessionResourceToReleaseListRelCmd_t*
pduSessionResourceToReleaseListRelCmd);
bool decodefromPDUSessionResourceToReleaseListRelCmd(
Ngap_PDUSessionResourceToReleaseListRelCmd_t*
pduSessionResourceToReleaseListRelCmd);
void set(const std::vector<PDUSessionResourceToReleaseItemRelCmd>& list);
void get(std::vector<PDUSessionResourceToReleaseItemRelCmd>& list);
bool encode(Ngap_PDUSessionResourceToReleaseListRelCmd_t*
pduSessionResourceToReleaseListRelCmd);
bool decode(Ngap_PDUSessionResourceToReleaseListRelCmd_t*
pduSessionResourceToReleaseListRelCmd);
private:
std::vector<PDUSessionResourceToReleaseItemRelCmd> itemRelCmdList;
std::vector<PDUSessionResourceToReleaseItemRelCmd> item_list_;
};
} // namespace ngap
......
......@@ -33,8 +33,8 @@ namespace ngap {
PduSessionResourceReleaseCommandMsg::PduSessionResourceReleaseCommandMsg()
: NgapUEMessage() {
pduSessionResourceReleaseCommandIEs = nullptr;
ranPagingPriority = nullptr;
nasPdu = nullptr;
ranPagingPriority = std::nullopt;
nasPdu = std::nullopt;
setMessageType(NgapMessageType::PDU_SESSION_RESOURCE_RELEASE_COMMAND);
initialize();
......@@ -104,9 +104,9 @@ void PduSessionResourceReleaseCommandMsg::setRanUeNgapId(
//------------------------------------------------------------------------------
void PduSessionResourceReleaseCommandMsg::setRanPagingPriority(
const uint8_t& priority) {
if (!ranPagingPriority) ranPagingPriority = new RANPagingPriority();
ranPagingPriority->set(priority);
RANPagingPriority tmp = {};
tmp.set(priority);
ranPagingPriority = std::optional<RANPagingPriority>(tmp);
Ngap_PDUSessionResourceReleaseCommandIEs_t* ie =
(Ngap_PDUSessionResourceReleaseCommandIEs_t*) calloc(
......@@ -116,7 +116,8 @@ void PduSessionResourceReleaseCommandMsg::setRanPagingPriority(
ie->value.present =
Ngap_PDUSessionResourceReleaseCommandIEs__value_PR_RANPagingPriority;
int ret = ranPagingPriority->encode(ie->value.choice.RANPagingPriority);
int ret =
ranPagingPriority.value().encode(ie->value.choice.RANPagingPriority);
if (!ret) {
Logger::nas_mm().warn("Encode RANPagingPriority IE error");
free_wrapper((void**) &ie);
......@@ -129,16 +130,18 @@ void PduSessionResourceReleaseCommandMsg::setRanPagingPriority(
}
//------------------------------------------------------------------------------
int PduSessionResourceReleaseCommandMsg::getRanPagingPriority() {
if (!ranPagingPriority) return -1;
return ranPagingPriority->get();
bool PduSessionResourceReleaseCommandMsg::getRanPagingPriority(
uint8_t& priority) {
if (!ranPagingPriority.has_value()) return false;
priority = ranPagingPriority.value().get();
return true;
}
//------------------------------------------------------------------------------
void PduSessionResourceReleaseCommandMsg::setNasPdu(const bstring& pdu) {
if (!nasPdu) nasPdu = new NAS_PDU();
nasPdu->set(pdu);
NAS_PDU tmp = {};
tmp.set(pdu);
nasPdu = std::optional<NAS_PDU>(tmp);
Ngap_PDUSessionResourceReleaseCommandIEs_t* ie =
(Ngap_PDUSessionResourceReleaseCommandIEs_t*) calloc(
......@@ -148,7 +151,7 @@ void PduSessionResourceReleaseCommandMsg::setNasPdu(const bstring& pdu) {
ie->value.present =
Ngap_PDUSessionResourceReleaseCommandIEs__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) {
Logger::nas_mm().warn("encode NAS_PDU IE error");
free_wrapper((void**) &ie);
......@@ -162,26 +165,25 @@ void PduSessionResourceReleaseCommandMsg::setNasPdu(const bstring& pdu) {
//------------------------------------------------------------------------------
bool PduSessionResourceReleaseCommandMsg::getNasPdu(bstring& pdu) {
if (!nasPdu) return false;
return nasPdu->get(pdu);
if (!nasPdu.has_value()) return false;
return nasPdu.value().get(pdu);
}
//------------------------------------------------------------------------------
void PduSessionResourceReleaseCommandMsg::setPduSessionResourceToReleaseList(
const std::vector<PDUSessionResourceToReleaseItem_t>& list) {
std::vector<PDUSessionResourceToReleaseItemRelCmd> itemRelCmdList;
std::vector<PDUSessionResourceToReleaseItemRelCmd> item_rel_cmd_list;
for (int i = 0; i < list.size(); i++) {
PDUSessionResourceToReleaseItemRelCmd itemRelCmd = {};
PDUSessionID pDUSessionID = {};
pDUSessionID.set(list[i].pduSessionId);
itemRelCmd.setPDUSessionResourceToReleaseItemRelCmd(
pDUSessionID, list[i].pduSessionResourceReleaseCommandTransfer);
itemRelCmdList.push_back(itemRelCmd);
PDUSessionResourceToReleaseItemRelCmd item_rel_cmd = {};
PDUSessionID pdu_session_id = {};
pdu_session_id.set(list[i].pduSessionId);
item_rel_cmd.set(
pdu_session_id, list[i].pduSessionResourceReleaseCommandTransfer);
item_rel_cmd_list.push_back(item_rel_cmd);
}
pduSessionResourceToReleaseList.setPDUSessionResourceToReleaseListRelCmd(
itemRelCmdList);
pduSessionResourceToReleaseList.set(item_rel_cmd_list);
Ngap_PDUSessionResourceReleaseCommandIEs_t* ie =
(Ngap_PDUSessionResourceReleaseCommandIEs_t*) calloc(
......@@ -192,9 +194,8 @@ void PduSessionResourceReleaseCommandMsg::setPduSessionResourceToReleaseList(
ie->value.present =
Ngap_PDUSessionResourceReleaseCommandIEs__value_PR_PDUSessionResourceToReleaseListRelCmd;
int ret = pduSessionResourceToReleaseList
.encode2PDUSessionResourceToReleaseListRelCmd(
&ie->value.choice.PDUSessionResourceToReleaseListRelCmd);
int ret = pduSessionResourceToReleaseList.encode(
&ie->value.choice.PDUSessionResourceToReleaseListRelCmd);
if (!ret) {
Logger::nas_mm().warn(
"Encode PDUSessionResourceToReleaseListRelCmd IE error");
......@@ -211,17 +212,15 @@ void PduSessionResourceReleaseCommandMsg::setPduSessionResourceToReleaseList(
//------------------------------------------------------------------------------
bool PduSessionResourceReleaseCommandMsg::getPduSessionResourceToReleaseList(
std::vector<PDUSessionResourceToReleaseItem_t>& list) {
std::vector<PDUSessionResourceToReleaseItemRelCmd> itemRelCmdList;
pduSessionResourceToReleaseList.getPDUSessionResourceToReleaseListRelCmd(
itemRelCmdList);
std::vector<PDUSessionResourceToReleaseItemRelCmd> item_rel_cmd_list;
pduSessionResourceToReleaseList.get(item_rel_cmd_list);
for (auto& item : itemRelCmdList) {
for (auto& item : item_rel_cmd_list) {
PDUSessionResourceToReleaseItem_t rel = {};
PDUSessionID pDUSessionID = {};
PDUSessionID pdu_session_id = {};
item.getPDUSessionResourceToReleaseItemRelCmd(
pDUSessionID, rel.pduSessionResourceReleaseCommandTransfer);
pDUSessionID.get(rel.pduSessionId);
item.get(pdu_session_id, rel.pduSessionResourceReleaseCommandTransfer);
pdu_session_id.get(rel.pduSessionId);
list.push_back(rel);
}
......@@ -303,14 +302,14 @@ bool PduSessionResourceReleaseCommandMsg::decodeFromPdu(
pduSessionResourceReleaseCommandIEs->protocolIEs.list.array[i]
->value.present ==
Ngap_PDUSessionResourceReleaseCommandIEs__value_PR_RANPagingPriority) {
ranPagingPriority = new RANPagingPriority();
if (!ranPagingPriority->decode(
pduSessionResourceReleaseCommandIEs->protocolIEs.list
.array[i]
->value.choice.RANPagingPriority)) {
RANPagingPriority tmp = {};
if (!tmp.decode(pduSessionResourceReleaseCommandIEs->protocolIEs.list
.array[i]
->value.choice.RANPagingPriority)) {
Logger::nas_mm().warn("Decoded NGAP RANPagingPriority IE error");
return false;
}
ranPagingPriority = std::optional<RANPagingPriority>(tmp);
} else {
Logger::nas_mm().warn("Decoded NGAP RANPagingPriority IE error");
return false;
......@@ -323,14 +322,14 @@ bool PduSessionResourceReleaseCommandMsg::decodeFromPdu(
pduSessionResourceReleaseCommandIEs->protocolIEs.list.array[i]
->value.present ==
Ngap_PDUSessionResourceReleaseCommandIEs__value_PR_NAS_PDU) {
nasPdu = new NAS_PDU();
if (!nasPdu->decode(
pduSessionResourceReleaseCommandIEs->protocolIEs.list
.array[i]
->value.choice.NAS_PDU)) {
NAS_PDU tmp = {};
if (!tmp.decode(pduSessionResourceReleaseCommandIEs->protocolIEs.list
.array[i]
->value.choice.NAS_PDU)) {
Logger::nas_mm().warn("Decoded NGAP NAS_PDU IE error");
return false;
}
nasPdu = std::optional<NAS_PDU>(tmp);
} else {
Logger::nas_mm().warn("Decoded NGAP NAS_PDU IE error");
return false;
......@@ -343,12 +342,10 @@ bool PduSessionResourceReleaseCommandMsg::decodeFromPdu(
pduSessionResourceReleaseCommandIEs->protocolIEs.list.array[i]
->value.present ==
Ngap_PDUSessionResourceReleaseCommandIEs__value_PR_PDUSessionResourceToReleaseListRelCmd) {
if (!pduSessionResourceToReleaseList
.decodefromPDUSessionResourceToReleaseListRelCmd(
&pduSessionResourceReleaseCommandIEs->protocolIEs.list
.array[i]
->value.choice
.PDUSessionResourceToReleaseListRelCmd)) {
if (!pduSessionResourceToReleaseList.decode(
&pduSessionResourceReleaseCommandIEs->protocolIEs.list
.array[i]
->value.choice.PDUSessionResourceToReleaseListRelCmd)) {
Logger::nas_mm().warn(
"Decoded NGAP PDUSessionResourceToReleaseListRelCmd IE error");
return false;
......
......@@ -28,6 +28,8 @@
#include "NAS-PDU.hpp"
#include "NgapUEMessage.hpp"
#include <optional>
namespace ngap {
class PduSessionResourceReleaseCommandMsg : public NgapUEMessage {
......@@ -42,7 +44,7 @@ class PduSessionResourceReleaseCommandMsg : public NgapUEMessage {
bool decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) override;
void setRanPagingPriority(const uint8_t& priority);
int getRanPagingPriority();
bool getRanPagingPriority(uint8_t& priority);
void setNasPdu(const bstring& pdu);
bool getNasPdu(bstring& pdu);
......@@ -55,8 +57,8 @@ class PduSessionResourceReleaseCommandMsg : public NgapUEMessage {
private:
Ngap_PDUSessionResourceReleaseCommand_t* pduSessionResourceReleaseCommandIEs;
RANPagingPriority* ranPagingPriority; // Optional
NAS_PDU* nasPdu; // Optional
std::optional<RANPagingPriority> ranPagingPriority; // Optional
std::optional<NAS_PDU> nasPdu; // Optional
PDUSessionResourceToReleaseListRelCmd
pduSessionResourceToReleaseList; // Mandatory
};
......
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