Commit 7a295360 authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Code cleanup for Service Accept

parent 504f62b9
......@@ -819,7 +819,7 @@ void amf_n1::service_request_handle(
std::unique_ptr<ServiceRequest> service_request =
std::make_unique<ServiceRequest>();
int decoded_size =
service_request->Decode(nullptr, (uint8_t*) bdata(nas), blength(nas));
service_request->Decode((uint8_t*) bdata(nas), blength(nas));
// bdestroy_wrapper(&nas);
if (decoded_size != KEncodeDecodeError) {
......@@ -947,7 +947,7 @@ void amf_n1::service_request_handle(
std::unique_ptr<ServiceRequest> service_request_nas =
std::make_unique<ServiceRequest>();
service_request_nas->Decode(
nullptr, (uint8_t*) bdata(plain_msg), blength(plain_msg));
(uint8_t*) bdata(plain_msg), blength(plain_msg));
bdestroy_wrapper(&plain_msg);
if (!service_request_nas->GetPduSessionStatus(pdu_session_status)) {
......
......@@ -28,11 +28,11 @@ using namespace nas;
//------------------------------------------------------------------------------
ServiceAccept::ServiceAccept()
: NasMmPlainHeader(EPD_5GS_MM_MSG, SERVICE_ACCEPT) {
ie_PDU_session_status = std::nullopt;
ie_pdu_session_status = std::nullopt;
ie_pdu_session_reactivation_result = std::nullopt;
ie_pdu_session_reactivation_result_error_cause = std::nullopt;
ie_eap_message = std::nullopt;
ie_T3448_value = std::nullopt;
ie_t3448_value = std::nullopt;
}
ServiceAccept::~ServiceAccept() {}
......@@ -43,7 +43,7 @@ void ServiceAccept::SetHeader(uint8_t security_header_type) {
//------------------------------------------------------------------------------
void ServiceAccept::SetPduSessionStatus(uint16_t value) {
ie_PDU_session_status = std::make_optional<PDUSessionStatus>(value);
ie_pdu_session_status = std::make_optional<PDUSessionStatus>(value);
}
//------------------------------------------------------------------------------
......@@ -61,13 +61,14 @@ void ServiceAccept::SetPduSessionReactivationResultErrorCause(
}
//------------------------------------------------------------------------------
void ServiceAccept::SetEapMessage(bstring eap) {
ie_eap_message = std::make_optional<EapMessage>(0x78, eap);
void ServiceAccept::SetEapMessage(const bstring& eap) {
ie_eap_message = std::make_optional<EapMessage>(kIeiEapMessage, eap);
}
//------------------------------------------------------------------------------
void ServiceAccept::SetT3448Value(uint8_t unit, uint8_t value) {
ie_T3448_value = std::make_optional<GprsTimer3>(0x6B, unit, value);
ie_t3448_value =
std::make_optional<GprsTimer3>(kIeiGprsTimer3T3448, unit, value);
}
//------------------------------------------------------------------------------
......@@ -83,37 +84,42 @@ int ServiceAccept::Encode(uint8_t* buf, int len) {
}
encoded_size += encoded_ie_size;
if (!ie_PDU_session_status.has_value()) {
Logger::nas_mm().warn("IE ie_PDU_session_status is not available");
if (!ie_pdu_session_status.has_value()) {
Logger::nas_mm().debug(
"IE %s is not available", PDUSessionStatus::GetIeName().c_str());
} else {
encoded_ie_size = ie_PDU_session_status.value().Encode(
encoded_ie_size = ie_pdu_session_status.value().Encode(
buf + encoded_size, len - encoded_size);
if (encoded_ie_size != KEncodeDecodeError) {
encoded_size += encoded_ie_size;
} else {
Logger::nas_mm().error("Encoding ie_PDU_session_status error");
Logger::nas_mm().debug(
"Encoding %s error", PDUSessionStatus::GetIeName().c_str());
return KEncodeDecodeError;
}
}
if (!ie_pdu_session_reactivation_result.has_value()) {
Logger::nas_mm().warn(
"IE ie_pdu_session_reactivation_result is not available");
Logger::nas_mm().debug(
"IE %s is not available",
PDU_Session_Reactivation_Result::GetIeName().c_str());
} else {
encoded_ie_size = ie_pdu_session_reactivation_result.value().Encode(
buf + encoded_size, len - encoded_size);
if (encoded_ie_size != KEncodeDecodeError) {
encoded_size += encoded_ie_size;
} else {
Logger::nas_mm().error(
"Encoding ie_pdu_session_reactivation_result error");
Logger::nas_mm().debug(
"Encoding %s error",
PDU_Session_Reactivation_Result::GetIeName().c_str());
return KEncodeDecodeError;
}
}
if (!ie_pdu_session_reactivation_result_error_cause.has_value()) {
Logger::nas_mm().warn(
"IE ie_pdu_session_reactivation_result_error_cause is not available");
Logger::nas_mm().debug(
"IE %s is not available",
PDU_Session_Reactivation_Result_Error_Cause::GetIeName().c_str());
} else {
encoded_ie_size =
ie_pdu_session_reactivation_result_error_cause.value().Encode(
......@@ -122,14 +128,16 @@ int ServiceAccept::Encode(uint8_t* buf, int len) {
if (encoded_ie_size != KEncodeDecodeError) {
encoded_size += encoded_ie_size;
} else {
Logger::nas_mm().error(
"Encoding ie_pdu_session_reactivation_result_error_cause error");
Logger::nas_mm().debug(
"Encoding %s error",
PDU_Session_Reactivation_Result_Error_Cause::GetIeName().c_str());
return KEncodeDecodeError;
}
}
if (!ie_eap_message.has_value()) {
Logger::nas_mm().warn("IE ie_eap_message is not available");
Logger::nas_mm().debug(
"IE %s is not available", EapMessage::GetIeName().c_str());
} else {
encoded_ie_size =
ie_eap_message.value().Encode(buf + encoded_size, len - encoded_size);
......@@ -137,20 +145,23 @@ int ServiceAccept::Encode(uint8_t* buf, int len) {
if (encoded_ie_size != KEncodeDecodeError) {
encoded_size += encoded_ie_size;
} else {
Logger::nas_mm().error("Encoding ie_eap_message error");
Logger::nas_mm().debug(
"Encoding %s error", EapMessage::GetIeName().c_str());
return KEncodeDecodeError;
}
}
if (!ie_T3448_value.has_value()) {
Logger::nas_mm().warn("IE ie_T3448_value is not available");
if (!ie_t3448_value.has_value()) {
Logger::nas_mm().debug(
"IE %s is not available", GprsTimer3::GetIeName().c_str());
} else {
encoded_ie_size =
ie_T3448_value.value().Encode(buf + encoded_size, len - encoded_size);
ie_t3448_value.value().Encode(buf + encoded_size, len - encoded_size);
if (encoded_ie_size != KEncodeDecodeError) {
encoded_size += encoded_ie_size;
} else {
Logger::nas_mm().error("Encoding ie_T3448_value error");
Logger::nas_mm().debug(
"Encoding %s error", GprsTimer3::GetIeName().c_str());
return KEncodeDecodeError;
}
}
......@@ -173,25 +184,26 @@ int ServiceAccept::Decode(uint8_t* buf, int len) {
return KEncodeDecodeError;
}
decoded_size += decoded_result;
Logger::nas_mm().debug("Decoded_size(%d)", decoded_size);
uint8_t octet = *(buf + decoded_size);
// Decode other IEs
uint8_t octet = 0x00;
DECODE_U8_VALUE(buf + decoded_size, octet);
Logger::nas_mm().debug("First option IEI (0x%x)", octet);
while ((octet != 0x0)) {
Logger::nas_mm().debug("Decoding IEI 0x%x", octet);
switch (octet) {
case kIeiPduSessionStatus: {
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiPduSessionStatus);
PDUSessionStatus ie_PDU_session_status_tmp = {};
if ((decoded_result = ie_PDU_session_status_tmp.Decode(
PDUSessionStatus ie_pdu_session_status_tmp = {};
if ((decoded_result = ie_pdu_session_status_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) ==
KEncodeDecodeError)
return decoded_result;
decoded_size += decoded_result;
ie_PDU_session_status =
std::optional<PDUSessionStatus>(ie_PDU_session_status_tmp);
octet = *(buf + decoded_size);
ie_pdu_session_status =
std::optional<PDUSessionStatus>(ie_pdu_session_status_tmp);
DECODE_U8_VALUE(buf + decoded_size, octet);
Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break;
......@@ -208,12 +220,13 @@ int ServiceAccept::Decode(uint8_t* buf, int len) {
ie_pdu_session_reactivation_result =
std::optional<PDU_Session_Reactivation_Result>(
ie_pdu_session_reactivation_result_tmp);
octet = *(buf + decoded_size);
DECODE_U8_VALUE(buf + decoded_size, octet);
Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break;
case kIeiPduSessionReactivationResultErrorCause: {
Logger::nas_mm().debug("Decoding IEI (0x72)");
Logger::nas_mm().debug(
"Decoding IEI 0x%x", kIeiPduSessionReactivationResultErrorCause);
PDU_Session_Reactivation_Result_Error_Cause
ie_pdu_session_reactivation_result_error_cause_tmp = {};
if ((decoded_result =
......@@ -225,12 +238,12 @@ int ServiceAccept::Decode(uint8_t* buf, int len) {
ie_pdu_session_reactivation_result_error_cause =
std::optional<PDU_Session_Reactivation_Result_Error_Cause>(
ie_pdu_session_reactivation_result_error_cause_tmp);
octet = *(buf + decoded_size);
DECODE_U8_VALUE(buf + decoded_size, octet);
Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break;
case kIeiEapMessage: {
Logger::nas_mm().debug("Decoding IEI (0x78)");
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiEapMessage);
EapMessage ie_eap_message_tmp = {};
if ((decoded_result = ie_eap_message_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) ==
......@@ -238,20 +251,20 @@ int ServiceAccept::Decode(uint8_t* buf, int len) {
return decoded_result;
decoded_size += decoded_result;
ie_eap_message = std::optional<EapMessage>(ie_eap_message_tmp);
octet = *(buf + decoded_size);
DECODE_U8_VALUE(buf + decoded_size, octet);
Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break;
case kIeiGprsTimer3T3448: {
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiGprsTimer3T3448);
GprsTimer3 ie_T3448_value_tmp(kIeiGprsTimer3T3448);
if ((decoded_result = ie_T3448_value_tmp.Decode(
GprsTimer3 ie_t3448_value_tmp(kIeiGprsTimer3T3448);
if ((decoded_result = ie_t3448_value_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) ==
KEncodeDecodeError)
return decoded_result;
decoded_size += decoded_result;
ie_T3448_value = std::optional<GprsTimer3>(ie_T3448_value_tmp);
octet = *(buf + decoded_size);
ie_t3448_value = std::optional<GprsTimer3>(ie_t3448_value_tmp);
DECODE_U8_VALUE(buf + decoded_size, octet);
Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break;
......
......@@ -20,11 +20,9 @@
*/
#ifndef _SERVICE_ACCEPT_H_
#define _SERVICE_ACCEPT_H_
#include <stdint.h>
#include <string>
#include "NasIeHeader.hpp"
......@@ -50,20 +48,20 @@ class ServiceAccept : public NasMmPlainHeader {
uint8_t session_id, uint8_t value);
// TODO: Get
void SetEapMessage(bstring eap);
void SetEapMessage(const bstring& eap);
// TODO: Get
void SetT3448Value(uint8_t unit, uint8_t value);
// TODO: Get
private:
std::optional<PDUSessionStatus> ie_PDU_session_status; // Optional
std::optional<PDUSessionStatus> ie_pdu_session_status; // Optional
std::optional<PDU_Session_Reactivation_Result>
ie_pdu_session_reactivation_result; // Optional
std::optional<PDU_Session_Reactivation_Result_Error_Cause>
ie_pdu_session_reactivation_result_error_cause; // Optional
std::optional<EapMessage> ie_eap_message; // Optional
std::optional<GprsTimer3> ie_T3448_value; // Optional
std::optional<GprsTimer3> ie_t3448_value; // Optional
};
} // namespace nas
......
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