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

Code refactor for PduSessionResourceModifyResponseMsg

parent 40767947
......@@ -1137,6 +1137,7 @@ void amf_n2::handle_itti_message(
release_cmd_msg->setAmfUeNgapId(itti_msg.amf_ue_ngap_id);
release_cmd_msg->setRanUeNgapId(itti_msg.ran_ue_ngap_id);
// TODO: Should be removed
// uint8_t* nas_pdu = (uint8_t*) calloc(1, blength(itti_msg.nas) + 1);
// uint8_t* buf_tmp = (uint8_t*) bdata(itti_msg.nas);
// if (buf_tmp != nullptr) memcpy(nas_pdu, buf_tmp, blength(itti_msg.nas));
......
......@@ -22,9 +22,7 @@
#ifndef _PDU_SESSION_RESOURCE_MODIFY_ITEM_MOD_RES_H_
#define _PDU_SESSION_RESOURCE_MODIFY_ITEM_MOD_RES_H_
#include "NAS-PDU.hpp"
#include "PDUSessionID.hpp"
#include "S-NSSAI.hpp"
extern "C" {
#include "Ngap_PDUSessionResourceModifyItemModRes.h"
......
......@@ -21,9 +21,6 @@
#include "PDUSessionResourceModifyListModRes.hpp"
#include <iostream>
using namespace std;
namespace ngap {
//------------------------------------------------------------------------------
......@@ -33,57 +30,49 @@ PDUSessionResourceModifyListModRes::PDUSessionResourceModifyListModRes() {}
PDUSessionResourceModifyListModRes::~PDUSessionResourceModifyListModRes() {}
//------------------------------------------------------------------------------
void PDUSessionResourceModifyListModRes::setPDUSessionResourceModifyListModRes(
const std::vector<PDUSessionResourceModifyItemModRes>&
m_pduSessionResourceModifyListModRes) {
pduSessionResourceModifyListModRes = m_pduSessionResourceModifyListModRes;
void PDUSessionResourceModifyListModRes::set(
const std::vector<PDUSessionResourceModifyItemModRes>& list) {
item_list_ = list;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceModifyListModRes::
encode2PDUSessionResourceModifyListModRes(
Ngap_PDUSessionResourceModifyListModRes_t&
m_pduSessionResourceModifyListModRes) {
for (auto pdu : pduSessionResourceModifyListModRes) {
Ngap_PDUSessionResourceModifyItemModRes_t* request =
bool PDUSessionResourceModifyListModRes::encode(
Ngap_PDUSessionResourceModifyListModRes_t& list) const {
for (auto pdu : item_list_) {
Ngap_PDUSessionResourceModifyItemModRes_t* item =
(Ngap_PDUSessionResourceModifyItemModRes_t*) calloc(
1, sizeof(Ngap_PDUSessionResourceModifyItemModRes_t));
if (!request) return false;
if (!pdu.encode(*request)) return false;
if (ASN_SEQUENCE_ADD(&m_pduSessionResourceModifyListModRes.list, request) !=
0)
return false;
if (!item) return false;
if (!pdu.encode(*item)) return false;
if (ASN_SEQUENCE_ADD(&list.list, item) != 0) return false;
}
return true;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceModifyListModRes::
decodefromPDUSessionResourceModifyListModRes(
Ngap_PDUSessionResourceModifyListModRes_t&
pduSessionResourceSetupListSURes) {
uint32_t numberofPDUSessions = pduSessionResourceSetupListSURes.list.count;
bool PDUSessionResourceModifyListModRes::decode(
const Ngap_PDUSessionResourceModifyListModRes_t&
pdu_session_resource_modify_list_mod_res) {
uint32_t num_pdu_sessions =
pdu_session_resource_modify_list_mod_res.list.count;
for (int i = 0; i < numberofPDUSessions; i++) {
PDUSessionResourceModifyItemModRes pduSessionResourceModifyItemModRes = {};
for (int i = 0; i < num_pdu_sessions; i++) {
PDUSessionResourceModifyItemModRes item = {};
if (!pduSessionResourceModifyItemModRes.decode(
*pduSessionResourceSetupListSURes.list.array[i]))
if (!item.decode(*pdu_session_resource_modify_list_mod_res.list.array[i]))
return false;
pduSessionResourceModifyListModRes.push_back(
pduSessionResourceModifyItemModRes);
item_list_.push_back(item);
}
return true;
}
//------------------------------------------------------------------------------
void PDUSessionResourceModifyListModRes::getPDUSessionResourceModifyListModRes(
std::vector<PDUSessionResourceModifyItemModRes>&
m_pduSessionResourceModifyListModRes) {
m_pduSessionResourceModifyListModRes = pduSessionResourceModifyListModRes;
void PDUSessionResourceModifyListModRes::get(
std::vector<PDUSessionResourceModifyItemModRes>& list) const {
list = item_list_;
}
} // namespace ngap
......@@ -36,22 +36,17 @@ class PDUSessionResourceModifyListModRes {
PDUSessionResourceModifyListModRes();
virtual ~PDUSessionResourceModifyListModRes();
void setPDUSessionResourceModifyListModRes(
const std::vector<PDUSessionResourceModifyItemModRes>&
m_pduSessionResourceModifyListModRes);
void getPDUSessionResourceModifyListModRes(
std::vector<PDUSessionResourceModifyItemModRes>&
m_pduSessionResourceModifyListModRes);
bool encode2PDUSessionResourceModifyListModRes(
Ngap_PDUSessionResourceModifyListModRes_t&
m_pduSessionResourceModifyListModRes);
bool decodefromPDUSessionResourceModifyListModRes(
Ngap_PDUSessionResourceModifyListModRes_t&
m_pduSessionResourceModifyListModRes);
void set(const std::vector<PDUSessionResourceModifyItemModRes>&
m_pduSessionResourceModifyListModRes);
void get(std::vector<PDUSessionResourceModifyItemModRes>&
m_pduSessionResourceModifyListModRes) const;
bool encode(Ngap_PDUSessionResourceModifyListModRes_t&
m_pduSessionResourceModifyListModRes) const;
bool decode(const Ngap_PDUSessionResourceModifyListModRes_t&
m_pduSessionResourceModifyListModRes);
private:
std::vector<PDUSessionResourceModifyItemModRes>
pduSessionResourceModifyListModRes;
std::vector<PDUSessionResourceModifyItemModRes> item_list_;
};
} // namespace ngap
......
......@@ -32,7 +32,7 @@ namespace ngap {
//------------------------------------------------------------------------------
PduSessionResourceModifyResponseMsg::PduSessionResourceModifyResponseMsg()
: NgapUEMessage() {
pduSessionResourceModifyListModResIsSet = false;
pduSessionResourceModifyList = std::nullopt;
setMessageType(NgapMessageType::PDU_SESSION_RESOURCE_MODIFY_RESPONSE);
initialize();
}
......@@ -103,9 +103,8 @@ void PduSessionResourceModifyResponseMsg::setRanUeNgapId(
void PduSessionResourceModifyResponseMsg::
setPduSessionResourceModifyResponseList(
const std::vector<PDUSessionResourceModifyResponseItem_t>& list) {
std::vector<PDUSessionResourceModifyItemModRes> itemModResList;
// itemModResList.reserve(list.size());
pduSessionResourceModifyListModResIsSet = true;
std::vector<PDUSessionResourceModifyItemModRes> item_mod_res_list;
// item_mod_res_list.reserve(list.size());
for (int i = 0; i < list.size(); i++) {
PDUSessionID pDUSessionID = {};
......@@ -113,11 +112,13 @@ void PduSessionResourceModifyResponseMsg::
pDUSessionID.set(list[i].pduSessionId);
item.set(pDUSessionID, list[i].pduSessionResourceModifyResponseTransfer);
itemModResList.push_back(item);
item_mod_res_list.push_back(item);
}
pduSessionResourceModifyList.setPDUSessionResourceModifyListModRes(
itemModResList);
PDUSessionResourceModifyListModRes item_list = {};
item_list.set(item_mod_res_list);
pduSessionResourceModifyList =
std::optional<PDUSessionResourceModifyListModRes>(item_list);
Ngap_PDUSessionResourceModifyResponseIEs_t* ie =
(Ngap_PDUSessionResourceModifyResponseIEs_t*) calloc(
......@@ -127,9 +128,8 @@ void PduSessionResourceModifyResponseMsg::
ie->value.present =
Ngap_PDUSessionResourceModifyResponseIEs__value_PR_PDUSessionResourceModifyListModRes;
int ret =
pduSessionResourceModifyList.encode2PDUSessionResourceModifyListModRes(
ie->value.choice.PDUSessionResourceModifyListModRes);
int ret = pduSessionResourceModifyList.value().encode(
ie->value.choice.PDUSessionResourceModifyListModRes);
if (!ret) {
Logger::ngap().error(
"Encode NGAP PDUSessionResourceModifyListModRes IE error");
......@@ -148,18 +148,16 @@ void PduSessionResourceModifyResponseMsg::
bool PduSessionResourceModifyResponseMsg::
getPduSessionResourceModifyResponseList(
std::vector<PDUSessionResourceModifyResponseItem_t>& list) {
if (!pduSessionResourceModifyListModResIsSet) return false;
if (!pduSessionResourceModifyList.has_value()) return false;
std::vector<PDUSessionResourceModifyItemModRes> itemModResList;
pduSessionResourceModifyList.getPDUSessionResourceModifyListModRes(
itemModResList);
std::vector<PDUSessionResourceModifyItemModRes> item_mod_res_list;
pduSessionResourceModifyList.value().get(item_mod_res_list);
for (auto& it : itemModResList) {
for (auto& it : item_mod_res_list) {
PDUSessionResourceModifyResponseItem_t response = {};
PDUSessionID pDUSessionID = {};
it.get(pDUSessionID, response.pduSessionResourceModifyResponseTransfer);
pDUSessionID.get(response.pduSessionId);
list.push_back(response);
}
......@@ -239,15 +237,18 @@ bool PduSessionResourceModifyResponseMsg::decodeFromPdu(
pduSessionResourceModifyResponseIEs->protocolIEs.list.array[i]
->value.present ==
Ngap_PDUSessionResourceModifyResponseIEs__value_PR_PDUSessionResourceModifyListModRes) {
if (!pduSessionResourceModifyList
.decodefromPDUSessionResourceModifyListModRes(
pduSessionResourceModifyResponseIEs->protocolIEs.list
.array[i]
->value.choice.PDUSessionResourceModifyListModRes)) {
PDUSessionResourceModifyListModRes item_list = {};
if (!item_list.decode(
pduSessionResourceModifyResponseIEs->protocolIEs.list
.array[i]
->value.choice.PDUSessionResourceModifyListModRes)) {
Logger::ngap().error(
"Decoded NGAP PDUSessionResourceModifyListModRes IE error");
return false;
}
pduSessionResourceModifyList =
std::optional<PDUSessionResourceModifyListModRes>(item_list);
} else {
Logger::ngap().error(
"Decoded NGAP PDUSessionResourceModifyListModRes IE error");
......
......@@ -50,8 +50,8 @@ class PduSessionResourceModifyResponseMsg : public NgapUEMessage {
private:
Ngap_PDUSessionResourceModifyResponse_t* pduSessionResourceModifyResponseIEs;
PDUSessionResourceModifyListModRes pduSessionResourceModifyList; // Optional
bool pduSessionResourceModifyListModResIsSet;
std::optional<PDUSessionResourceModifyListModRes>
pduSessionResourceModifyList; // Optional
// TODO: PDUSessionResourceFailedToModifyListModRes (Optional)
// TODO: User Location Information (Optional)
// TODO: Criticality Diagnostics (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