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