Commit 3edbfd8c authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Code refactor for PduSessionResourceReleaseResponse

parent ff3d6770
......@@ -30,48 +30,45 @@ PDUSessionResourceReleasedItemRelRes::PDUSessionResourceReleasedItemRelRes() {}
PDUSessionResourceReleasedItemRelRes::~PDUSessionResourceReleasedItemRelRes() {}
//------------------------------------------------------------------------------
void PDUSessionResourceReleasedItemRelRes::
setPDUSessionResourceReleasedItemRelRes(
const PDUSessionID& m_pDUSessionID,
const OCTET_STRING_t& m_pDUSessionResourceReleaseResponseTransfer) {
pDUSessionID = m_pDUSessionID;
pDUSessionResourceReleaseResponseTransfer =
m_pDUSessionResourceReleaseResponseTransfer;
void PDUSessionResourceReleasedItemRelRes::set(
const PDUSessionID& pdu_session_id,
const OCTET_STRING_t& pdu_session_resource_release_response_transfer) {
pdu_session_id_ = pdu_session_id;
pdu_session_resource_release_response_transfer_ =
pdu_session_resource_release_response_transfer;
}
//------------------------------------------------------------------------------
void PDUSessionResourceReleasedItemRelRes::
getPDUSessionResourceReleasedItemRelRes(
PDUSessionID& m_pDUSessionID,
OCTET_STRING_t& m_pDUSessionResourceReleaseResponseTransfer) {
m_pDUSessionID = pDUSessionID;
m_pDUSessionResourceReleaseResponseTransfer =
pDUSessionResourceReleaseResponseTransfer;
void PDUSessionResourceReleasedItemRelRes::get(
PDUSessionID& pdu_session_id,
OCTET_STRING_t& pdu_session_resource_release_response_transfer) {
pdu_session_id = pdu_session_id_;
pdu_session_resource_release_response_transfer =
pdu_session_resource_release_response_transfer_;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceReleasedItemRelRes::
encode2PDUSessionResourceReleasedItemRelRes(
Ngap_PDUSessionResourceReleasedItemRelRes_t*
pduSessionResourceReleasedItemRelRes) {
if (!pDUSessionID.encode(pduSessionResourceReleasedItemRelRes->pDUSessionID))
bool PDUSessionResourceReleasedItemRelRes::encode(
Ngap_PDUSessionResourceReleasedItemRelRes_t*
pdu_session_resource_released_item_rel_res) {
if (!pdu_session_id_.encode(
pdu_session_resource_released_item_rel_res->pDUSessionID))
return false;
pduSessionResourceReleasedItemRelRes
pdu_session_resource_released_item_rel_res
->pDUSessionResourceReleaseResponseTransfer =
pDUSessionResourceReleaseResponseTransfer;
pdu_session_resource_release_response_transfer_;
return true;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceReleasedItemRelRes::
decodefromPDUSessionResourceReleasedItemRelRes(
Ngap_PDUSessionResourceReleasedItemRelRes_t*
pduSessionResourceReleasedItemRelRes) {
pDUSessionID.set(pduSessionResourceReleasedItemRelRes->pDUSessionID);
pDUSessionResourceReleaseResponseTransfer =
pduSessionResourceReleasedItemRelRes
bool PDUSessionResourceReleasedItemRelRes::decode(
Ngap_PDUSessionResourceReleasedItemRelRes_t*
pdu_session_resource_released_item_rel_res) {
pdu_session_id_.set(pdu_session_resource_released_item_rel_res->pDUSessionID);
pdu_session_resource_release_response_transfer_ =
pdu_session_resource_released_item_rel_res
->pDUSessionResourceReleaseResponseTransfer;
return true;
......
......@@ -35,24 +35,22 @@ class PDUSessionResourceReleasedItemRelRes {
PDUSessionResourceReleasedItemRelRes();
virtual ~PDUSessionResourceReleasedItemRelRes();
void setPDUSessionResourceReleasedItemRelRes(
const PDUSessionID& m_pDUSessionID,
const OCTET_STRING_t& m_pDUSessionResourceReleaseResponseTransfer);
void set(
const PDUSessionID& pdu_session_id,
const OCTET_STRING_t& pdu_session_resource_release_response_transfer);
void getPDUSessionResourceReleasedItemRelRes(
PDUSessionID& m_pDUSessionID,
OCTET_STRING_t& m_pDUSessionResourceReleaseResponseTransfer);
void get(
PDUSessionID& pdu_session_id,
OCTET_STRING_t& pdu_session_resource_release_response_transfer);
bool encode2PDUSessionResourceReleasedItemRelRes(
Ngap_PDUSessionResourceReleasedItemRelRes_t*
pduSessionResourceReleasedItemRelRes);
bool decodefromPDUSessionResourceReleasedItemRelRes(
Ngap_PDUSessionResourceReleasedItemRelRes_t*
pduSessionResourceReleasedItemRelRes);
bool encode(Ngap_PDUSessionResourceReleasedItemRelRes_t*
pdu_session_resource_released_item_rel_res);
bool decode(Ngap_PDUSessionResourceReleasedItemRelRes_t*
pdu_session_resource_released_item_rel_res);
private:
PDUSessionID pDUSessionID;
OCTET_STRING_t pDUSessionResourceReleaseResponseTransfer;
PDUSessionID pdu_session_id_;
OCTET_STRING_t pdu_session_resource_release_response_transfer_;
};
} // namespace ngap
......
......@@ -30,47 +30,44 @@ PDUSessionResourceReleasedListRelRes::PDUSessionResourceReleasedListRelRes() {}
PDUSessionResourceReleasedListRelRes::~PDUSessionResourceReleasedListRelRes() {}
//------------------------------------------------------------------------------
void PDUSessionResourceReleasedListRelRes::
setPDUSessionResourceReleasedListRelRes(
const std::vector<PDUSessionResourceReleasedItemRelRes>& list) {
itemRelResList = list;
void PDUSessionResourceReleasedListRelRes::set(
const std::vector<PDUSessionResourceReleasedItemRelRes>& list) {
item_list_ = list;
}
//------------------------------------------------------------------------------
void PDUSessionResourceReleasedListRelRes::
getPDUSessionResourceReleasedListRelRes(
std::vector<PDUSessionResourceReleasedItemRelRes>& list) {
list = itemRelResList;
void PDUSessionResourceReleasedListRelRes::get(
std::vector<PDUSessionResourceReleasedItemRelRes>& list) {
list = item_list_;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceReleasedListRelRes::
encode2PDUSessionResourceReleasedListRelRes(
Ngap_PDUSessionResourceReleasedListRelRes_t*
pduSessionResourceReleasedListRelRes) {
for (auto& item : itemRelResList) {
bool PDUSessionResourceReleasedListRelRes::encode(
Ngap_PDUSessionResourceReleasedListRelRes_t&
pdu_session_resource_released_list_rel_res) {
for (auto& item : item_list_) {
Ngap_PDUSessionResourceReleasedItemRelRes_t* rel =
(Ngap_PDUSessionResourceReleasedItemRelRes_t*) calloc(
1, sizeof(Ngap_PDUSessionResourceReleasedItemRelRes_t));
if (!rel) return false;
if (!item.encode2PDUSessionResourceReleasedItemRelRes(rel)) return false;
if (ASN_SEQUENCE_ADD(&pduSessionResourceReleasedListRelRes->list, rel) != 0)
if (!item.encode(rel)) return false;
if (ASN_SEQUENCE_ADD(
&pdu_session_resource_released_list_rel_res.list, rel) != 0)
return false;
}
return true;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceReleasedListRelRes::
decodefromPDUSessionResourceReleasedListRelRes(
Ngap_PDUSessionResourceReleasedListRelRes_t*
pduSessionResourceReleasedListRelRes) {
for (int i = 0; i < pduSessionResourceReleasedListRelRes->list.count; i++) {
bool PDUSessionResourceReleasedListRelRes::decode(
const Ngap_PDUSessionResourceReleasedListRelRes_t&
pdu_session_resource_released_list_rel_res) {
for (int i = 0; i < pdu_session_resource_released_list_rel_res.list.count;
i++) {
PDUSessionResourceReleasedItemRelRes item = {};
if (!item.decodefromPDUSessionResourceReleasedItemRelRes(
pduSessionResourceReleasedListRelRes->list.array[i]))
if (!item.decode(pdu_session_resource_released_list_rel_res.list.array[i]))
return false;
itemRelResList.push_back(item);
item_list_.push_back(item);
}
return true;
}
......
......@@ -37,22 +37,18 @@ class PDUSessionResourceReleasedListRelRes {
PDUSessionResourceReleasedListRelRes();
virtual ~PDUSessionResourceReleasedListRelRes();
void setPDUSessionResourceReleasedListRelRes(
const std::vector<PDUSessionResourceReleasedItemRelRes>& list);
void set(const std::vector<PDUSessionResourceReleasedItemRelRes>& list);
void getPDUSessionResourceReleasedListRelRes(
std::vector<PDUSessionResourceReleasedItemRelRes>& list);
void get(std::vector<PDUSessionResourceReleasedItemRelRes>& list);
bool encode2PDUSessionResourceReleasedListRelRes(
Ngap_PDUSessionResourceReleasedListRelRes_t*
pduSessionResourceReleasedListRelRes);
bool encode(Ngap_PDUSessionResourceReleasedListRelRes_t&
pdu_session_resource_released_list_rel_res);
bool decodefromPDUSessionResourceReleasedListRelRes(
Ngap_PDUSessionResourceReleasedListRelRes_t*
pduSessionResourceReleasedListRelRes);
bool decode(const Ngap_PDUSessionResourceReleasedListRelRes_t&
pdu_session_resource_released_list_rel_res);
private:
std::vector<PDUSessionResourceReleasedItemRelRes> itemRelResList;
std::vector<PDUSessionResourceReleasedItemRelRes> item_list_;
};
} // namespace ngap
......
......@@ -35,7 +35,7 @@ namespace ngap {
PduSessionResourceReleaseResponseMsg::PduSessionResourceReleaseResponseMsg()
: NgapUEMessage() {
pduSessionResourceReleaseResponseIEs = nullptr;
userLocationInformation = nullptr;
userLocationInformation = std::nullopt;
setMessageType(NgapMessageType::PDU_SESSION_RESOURCE_RELEASE_RESPONSE);
initialize();
......@@ -105,19 +105,18 @@ void PduSessionResourceReleaseResponseMsg::setRanUeNgapId(
//------------------------------------------------------------------------------
void PduSessionResourceReleaseResponseMsg::setPduSessionResourceReleasedList(
const std::vector<PDUSessionResourceReleasedItem_t>& list) {
std::vector<PDUSessionResourceReleasedItemRelRes> itemRelResList;
std::vector<PDUSessionResourceReleasedItemRelRes> item_rel_res_list;
for (int i = 0; i < list.size(); i++) {
PDUSessionResourceReleasedItemRelRes itemRelRes = {};
PDUSessionID pDUSessionID = {};
pDUSessionID.set(list[i].pduSessionId);
PDUSessionResourceReleasedItemRelRes item_rel_res = {};
PDUSessionID pdu_session_id = {};
pdu_session_id.set(list[i].pduSessionId);
itemRelRes.setPDUSessionResourceReleasedItemRelRes(
pDUSessionID, list[i].pduSessionResourceReleaseResponseTransfer);
itemRelResList.push_back(itemRelRes);
item_rel_res.set(
pdu_session_id, list[i].pduSessionResourceReleaseResponseTransfer);
item_rel_res_list.push_back(item_rel_res);
}
pduSessionResourceReleasedList.setPDUSessionResourceReleasedListRelRes(
itemRelResList);
pduSessionResourceReleasedList.set(item_rel_res_list);
Ngap_PDUSessionResourceReleaseResponseIEs_t* ie =
(Ngap_PDUSessionResourceReleaseResponseIEs_t*) calloc(
......@@ -128,9 +127,8 @@ void PduSessionResourceReleaseResponseMsg::setPduSessionResourceReleasedList(
ie->value.present =
Ngap_PDUSessionResourceReleaseResponseIEs__value_PR_PDUSessionResourceReleasedListRelRes;
int ret = pduSessionResourceReleasedList
.encode2PDUSessionResourceReleasedListRelRes(
&ie->value.choice.PDUSessionResourceReleasedListRelRes);
int ret = pduSessionResourceReleasedList.encode(
ie->value.choice.PDUSessionResourceReleasedListRelRes);
if (!ret) {
Logger::nas_mm().warn(
"Encode PDUSessionResourceReleasedListRelRes IE error");
......@@ -148,17 +146,15 @@ void PduSessionResourceReleaseResponseMsg::setPduSessionResourceReleasedList(
//------------------------------------------------------------------------------
bool PduSessionResourceReleaseResponseMsg::getPduSessionResourceReleasedList(
std::vector<PDUSessionResourceReleasedItem_t>& list) {
std::vector<PDUSessionResourceReleasedItemRelRes> itemRelResList;
pduSessionResourceReleasedList.getPDUSessionResourceReleasedListRelRes(
itemRelResList);
std::vector<PDUSessionResourceReleasedItemRelRes> item_rel_res_list;
pduSessionResourceReleasedList.get(item_rel_res_list);
for (auto& item : itemRelResList) {
for (auto& item : item_rel_res_list) {
PDUSessionResourceReleasedItem_t rel = {};
PDUSessionID pDUSessionID = {};
PDUSessionID pdu_session_id = {};
item.getPDUSessionResourceReleasedItemRelRes(
pDUSessionID, rel.pduSessionResourceReleaseResponseTransfer);
pDUSessionID.get(rel.pduSessionId);
item.get(pdu_session_id, rel.pduSessionResourceReleaseResponseTransfer);
pdu_session_id.get(rel.pduSessionId);
list.push_back(rel);
}
......@@ -169,8 +165,7 @@ bool PduSessionResourceReleaseResponseMsg::getPduSessionResourceReleasedList(
//------------------------------------------------------------------------------
void PduSessionResourceReleaseResponseMsg::setUserLocationInfoNR(
const NrCgi_t& cig, const Tai_t& tai) {
if (!userLocationInformation)
userLocationInformation = new UserLocationInformation();
UserLocationInformation tmp = {};
UserLocationInformationNR information_nr = {};
NR_CGI nR_CGI = {};
......@@ -178,7 +173,8 @@ void PduSessionResourceReleaseResponseMsg::setUserLocationInfoNR(
nR_CGI.setNR_CGI(cig.mcc, cig.mnc, cig.nrCellID);
tai_nr.setTAI(tai);
information_nr.set(nR_CGI, tai_nr);
userLocationInformation->setInformation(information_nr);
tmp.setInformation(information_nr);
userLocationInformation = std::optional<UserLocationInformation>(tmp);
Ngap_PDUSessionResourceReleaseResponseIEs_t* ie =
(Ngap_PDUSessionResourceReleaseResponseIEs_t*) calloc(
......@@ -188,7 +184,7 @@ void PduSessionResourceReleaseResponseMsg::setUserLocationInfoNR(
ie->value.present =
Ngap_PDUSessionResourceReleaseResponseIEs__value_PR_UserLocationInformation;
int ret = userLocationInformation->encode(
int ret = userLocationInformation.value().encode(
&ie->value.choice.UserLocationInformation);
if (!ret) {
Logger::nas_mm().warn("Encode UserLocationInformation IE error");
......@@ -206,10 +202,13 @@ void PduSessionResourceReleaseResponseMsg::setUserLocationInfoNR(
//------------------------------------------------------------------------------
bool PduSessionResourceReleaseResponseMsg::getUserLocationInfoNR(
NrCgi_t& cig, Tai_t& tai) {
if (!userLocationInformation.has_value()) return false;
UserLocationInformationNR information_nr = {};
if (!userLocationInformation->getInformation(information_nr)) return false;
if (!userLocationInformation.value().getInformation(information_nr))
return false;
if (userLocationInformation->getChoiceOfUserLocationInformation() !=
if (userLocationInformation.value().getChoiceOfUserLocationInformation() !=
Ngap_UserLocationInformation_PR_userLocationInformationNR)
return false;
NR_CGI nR_CGI = {};
......@@ -297,12 +296,10 @@ bool PduSessionResourceReleaseResponseMsg::decodeFromPdu(
pduSessionResourceReleaseResponseIEs->protocolIEs.list.array[i]
->value.present ==
Ngap_PDUSessionResourceReleaseResponseIEs__value_PR_PDUSessionResourceReleasedListRelRes) {
if (!pduSessionResourceReleasedList
.decodefromPDUSessionResourceReleasedListRelRes(
&pduSessionResourceReleaseResponseIEs->protocolIEs.list
.array[i]
->value.choice
.PDUSessionResourceReleasedListRelRes)) {
if (!pduSessionResourceReleasedList.decode(
pduSessionResourceReleaseResponseIEs->protocolIEs.list
.array[i]
->value.choice.PDUSessionResourceReleasedListRelRes)) {
Logger::nas_mm().warn(
"Decoded NGAP PDUSessionResourceReleasedListRelRes IE error");
return false;
......
......@@ -53,8 +53,8 @@ class PduSessionResourceReleaseResponseMsg : public NgapUEMessage {
pduSessionResourceReleaseResponseIEs;
PDUSessionResourceReleasedListRelRes
pduSessionResourceReleasedList; // Mandatory
UserLocationInformation* userLocationInformation; // Optional
pduSessionResourceReleasedList; // Mandatory
std::optional<UserLocationInformation> userLocationInformation; // Optional
// TODO: CriticalityDiagnostics *criticalityDiagnostics; //Optional
};
......
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