Commit 489e0fa6 authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Code cleanup

parent 2f184c9d
...@@ -2476,8 +2476,7 @@ void amf_n1::security_mode_complete_handle( ...@@ -2476,8 +2476,7 @@ void amf_n1::security_mode_complete_handle(
} }
// Decode Security Mode Complete // Decode Security Mode Complete
auto security_mode_complete = std::make_unique<SecurityModeComplete>(); auto security_mode_complete = std::make_unique<SecurityModeComplete>();
security_mode_complete->Decode( security_mode_complete->Decode((uint8_t*) bdata(nas_msg), blength(nas_msg));
nullptr, (uint8_t*) bdata(nas_msg), blength(nas_msg));
comUt::print_buffer( comUt::print_buffer(
"amf_n1", "Security Mode Complete message buffer", "amf_n1", "Security Mode Complete message buffer",
......
...@@ -94,7 +94,7 @@ int AuthenticationRequest::Encode(uint8_t* buf, int len) { ...@@ -94,7 +94,7 @@ int AuthenticationRequest::Encode(uint8_t* buf, int len) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding ie_ngKSI error"); Logger::nas_mm().error("Encoding ie_ngKSI error");
return 0; return KEncodeDecodeError;
} }
// Spare half octet // Spare half octet
encoded_size++; // 1/2 octet + 1/2 octet from ie_ngKSI encoded_size++; // 1/2 octet + 1/2 octet from ie_ngKSI
...@@ -105,7 +105,7 @@ int AuthenticationRequest::Encode(uint8_t* buf, int len) { ...@@ -105,7 +105,7 @@ int AuthenticationRequest::Encode(uint8_t* buf, int len) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding ie_abba error"); Logger::nas_mm().error("Encoding ie_abba error");
return 0; return KEncodeDecodeError;
} }
// Authentication parameter RAND // Authentication parameter RAND
...@@ -115,11 +115,11 @@ int AuthenticationRequest::Encode(uint8_t* buf, int len) { ...@@ -115,11 +115,11 @@ int AuthenticationRequest::Encode(uint8_t* buf, int len) {
} else { } else {
int size = ie_authentication_parameter_rand.value().Encode( int size = ie_authentication_parameter_rand.value().Encode(
buf + encoded_size, len - encoded_size); buf + encoded_size, len - encoded_size);
if (size != 0) { if (size != KEncodeDecodeError) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding ie_authentication_parameter_rand error"); Logger::nas_mm().error("Encoding ie_authentication_parameter_rand error");
return 0; return KEncodeDecodeError;
} }
} }
// Authentication parameter AUTN // Authentication parameter AUTN
...@@ -129,11 +129,11 @@ int AuthenticationRequest::Encode(uint8_t* buf, int len) { ...@@ -129,11 +129,11 @@ int AuthenticationRequest::Encode(uint8_t* buf, int len) {
} else { } else {
int size = ie_authentication_parameter_autn.value().Encode( int size = ie_authentication_parameter_autn.value().Encode(
buf + encoded_size, len - encoded_size); buf + encoded_size, len - encoded_size);
if (size != 0) { if (size != KEncodeDecodeError) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding ie_authentication_parameter_autn error"); Logger::nas_mm().error("Encoding ie_authentication_parameter_autn error");
return 0; return KEncodeDecodeError;
} }
} }
// EAP message // EAP message
...@@ -142,11 +142,11 @@ int AuthenticationRequest::Encode(uint8_t* buf, int len) { ...@@ -142,11 +142,11 @@ int AuthenticationRequest::Encode(uint8_t* buf, int len) {
} else { } else {
int size = int size =
ie_eap_message.value().Encode(buf + encoded_size, len - encoded_size); ie_eap_message.value().Encode(buf + encoded_size, len - encoded_size);
if (size != 0) { if (size != KEncodeDecodeError) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding ie_eap_message error"); Logger::nas_mm().error("Encoding ie_eap_message error");
return 0; return KEncodeDecodeError;
} }
} }
......
...@@ -19,13 +19,6 @@ ...@@ -19,13 +19,6 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "SecurityModeComplete.hpp" #include "SecurityModeComplete.hpp"
#include "3gpp_24.501.hpp" #include "3gpp_24.501.hpp"
...@@ -35,12 +28,11 @@ ...@@ -35,12 +28,11 @@
using namespace nas; using namespace nas;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
SecurityModeComplete::SecurityModeComplete() { SecurityModeComplete::SecurityModeComplete()
Logger::nas_mm().debug("initiating class SecurityModeComplete"); : NasMmPlainHeader(EPD_5GS_MM_MSG, SECURITY_MODE_COMPLETE) {
plain_header = nullptr; ie_imeisv = std::nullopt;
ie_imeisv = nullptr; ie_nas_message_container = std::nullopt;
ie_nas_message_container = nullptr; ie_non_imeisvpei = std::nullopt;
ie_non_imeisvpei = nullptr;
}; };
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
...@@ -48,34 +40,32 @@ SecurityModeComplete::~SecurityModeComplete() {} ...@@ -48,34 +40,32 @@ SecurityModeComplete::~SecurityModeComplete() {}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void SecurityModeComplete::setHeader(uint8_t security_header_type) { void SecurityModeComplete::setHeader(uint8_t security_header_type) {
plain_header = new NasMmPlainHeader(); NasMmPlainHeader::SetSecurityHeaderType(security_header_type);
plain_header->setHeader(
EPD_5GS_MM_MSG, security_header_type, SECURITY_MODE_COMPLETE);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void SecurityModeComplete::SetImeisv(IMEISV_t imeisv) { void SecurityModeComplete::SetImeisv(IMEISV_t imeisv) {
ie_imeisv = new _5GSMobileIdentity(); ie_imeisv = std::make_optional<_5GSMobileIdentity>(kIeiImeisv);
ie_imeisv->SetIei(kIeiImeisv); // ie_imeisv->SetIei(kIeiImeisv);
ie_imeisv->SetImeisv(imeisv); ie_imeisv.value().SetImeisv(imeisv);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void SecurityModeComplete::setNAS_Message_Container(bstring value) { void SecurityModeComplete::setNAS_Message_Container(bstring value) {
ie_nas_message_container = new NasMessageContainer(value); ie_nas_message_container = std::make_optional<NasMessageContainer>(value);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void SecurityModeComplete::setNON_IMEISV(IMEISV_t imeisv) { void SecurityModeComplete::setNON_IMEISV(IMEISV_t imeisv) {
ie_non_imeisvpei = new _5GSMobileIdentity(); ie_non_imeisvpei = std::make_optional<_5GSMobileIdentity>(kIeiNonImeisvPei);
ie_non_imeisvpei->SetIei(kIeiNonImeisvPei); // ie_non_imeisvpei->SetIei(kIeiNonImeisvPei);
ie_non_imeisvpei->SetImeisv(imeisv); ie_non_imeisvpei.value().SetImeisv(imeisv);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool SecurityModeComplete::GetImeisv(IMEISV_t& imeisv) { bool SecurityModeComplete::GetImeisv(IMEISV_t& imeisv) const {
if (ie_imeisv) { if (ie_imeisv.has_value()) {
ie_imeisv->GetImeisv(imeisv); ie_imeisv.value().GetImeisv(imeisv);
return true; return true;
} else { } else {
return false; return false;
...@@ -83,9 +73,9 @@ bool SecurityModeComplete::GetImeisv(IMEISV_t& imeisv) { ...@@ -83,9 +73,9 @@ bool SecurityModeComplete::GetImeisv(IMEISV_t& imeisv) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool SecurityModeComplete::getNasMessageContainer(bstring& nas) { bool SecurityModeComplete::getNasMessageContainer(bstring& nas) const {
if (ie_nas_message_container) { if (ie_nas_message_container.has_value()) {
ie_nas_message_container->GetValue(nas); ie_nas_message_container.value().GetValue(nas);
return true; return true;
} else { } else {
return false; return false;
...@@ -93,9 +83,9 @@ bool SecurityModeComplete::getNasMessageContainer(bstring& nas) { ...@@ -93,9 +83,9 @@ bool SecurityModeComplete::getNasMessageContainer(bstring& nas) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool SecurityModeComplete::getNON_IMEISV(IMEISV_t& imeisv) { bool SecurityModeComplete::getNON_IMEISV(IMEISV_t& imeisv) const {
if (ie_non_imeisvpei) { if (ie_non_imeisvpei.has_value()) {
ie_non_imeisvpei->GetImeisv(imeisv); ie_non_imeisvpei.value().GetImeisv(imeisv);
return true; return true;
} else { } else {
return false; return false;
...@@ -105,56 +95,74 @@ bool SecurityModeComplete::getNON_IMEISV(IMEISV_t& imeisv) { ...@@ -105,56 +95,74 @@ bool SecurityModeComplete::getNON_IMEISV(IMEISV_t& imeisv) {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int SecurityModeComplete::Encode(uint8_t* buf, int len) { int SecurityModeComplete::Encode(uint8_t* buf, int len) {
Logger::nas_mm().debug("Encoding SecurityModeComplete message"); Logger::nas_mm().debug("Encoding SecurityModeComplete message");
int encoded_size = 0; int encoded_size = 0;
if (!plain_header) { int encoded_ie_size = 0;
Logger::nas_mm().error("Mandatory IE missing Header");
return 0; // Header
if ((encoded_ie_size = NasMmPlainHeader::Encode(buf, len)) ==
KEncodeDecodeError) {
Logger::nas_mm().error("Encoding NAS Header error");
return KEncodeDecodeError;
} }
if (!(plain_header->Encode(buf, len))) return 0; encoded_size += encoded_ie_size;
encoded_size += 3;
if (!ie_imeisv) { if (!ie_imeisv.has_value()) {
Logger::nas_mm().warn("IE ie_imeisv is not available"); Logger::nas_mm().warn("IE ie_imeisv is not available");
} else { } else {
if (int size = ie_imeisv->Encode(buf + encoded_size, len - encoded_size)) { int size = ie_imeisv.value().Encode(buf + encoded_size, len - encoded_size);
if (size != KEncodeDecodeError) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding IE ie_imeisv error"); Logger::nas_mm().error("Encoding ie_imeisv error");
return 0; return KEncodeDecodeError;
} }
} }
if (!ie_nas_message_container) {
if (!ie_nas_message_container.has_value()) {
Logger::nas_mm().warn("IE ie_nas_message_container is not available"); Logger::nas_mm().warn("IE ie_nas_message_container is not available");
} else { } else {
if (int size = ie_nas_message_container->Encode( int size = ie_nas_message_container.value().Encode(
buf + encoded_size, len - encoded_size)) { buf + encoded_size, len - encoded_size);
if (size != KEncodeDecodeError) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding ie_nas_message_container error"); Logger::nas_mm().error("Encoding ie_nas_message_container error");
return 0; return KEncodeDecodeError;
} }
} }
if (!ie_non_imeisvpei) {
if (!ie_non_imeisvpei.has_value()) {
Logger::nas_mm().warn("IE ie_non_imeisvpei is not available"); Logger::nas_mm().warn("IE ie_non_imeisvpei is not available");
} else { } else {
if (int size = int size =
ie_non_imeisvpei->Encode(buf + encoded_size, len - encoded_size)) { ie_non_imeisvpei.value().Encode(buf + encoded_size, len - encoded_size);
if (size != KEncodeDecodeError) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding IE ie_non_imeisvpei error"); Logger::nas_mm().error("Encoding ie_non_imeisvpei error");
return 0; return KEncodeDecodeError;
} }
} }
Logger::nas_mm().debug( Logger::nas_mm().debug(
"Encoded SecurityModeComplete message len (%d)", encoded_size); "Encoded SecurityModeComplete message len (%d)", encoded_size);
return 1; return 1;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int SecurityModeComplete::Decode( int SecurityModeComplete::Decode(uint8_t* buf, int len) {
NasMmPlainHeader* header, uint8_t* buf, int len) {
Logger::nas_mm().debug("Decoding SecurityModeComplete message"); Logger::nas_mm().debug("Decoding SecurityModeComplete message");
int decoded_size = 3; // For the header
plain_header = header; int decoded_size = 0;
int decoded_result = 0;
// Header
decoded_result = NasMmPlainHeader::Decode(buf, len);
if (decoded_result == KEncodeDecodeError) {
Logger::nas_mm().error("Decoding NAS Header error");
return KEncodeDecodeError;
}
decoded_size += decoded_result;
Logger::nas_mm().debug("Decoded_size (%d)", decoded_size); Logger::nas_mm().debug("Decoded_size (%d)", decoded_size);
// while ((octet != 0x0)) { // while ((octet != 0x0)) {
...@@ -164,21 +172,35 @@ int SecurityModeComplete::Decode( ...@@ -164,21 +172,35 @@ int SecurityModeComplete::Decode(
switch (octet) { switch (octet) {
case 0x77: { case 0x77: {
Logger::nas_mm().debug("Decoding IEI (0x77)"); Logger::nas_mm().debug("Decoding IEI (0x77)");
ie_imeisv = new _5GSMobileIdentity(); _5GSMobileIdentity ie_imeisv_tmp = {};
decoded_size += if ((decoded_result = ie_imeisv_tmp.Decode(
ie_imeisv->Decode(buf + decoded_size, len - decoded_size, true); buf + decoded_size, len - decoded_size, true)) ==
KEncodeDecodeError)
return decoded_result;
decoded_size += decoded_result;
ie_imeisv = std::optional<_5GSMobileIdentity>(ie_imeisv_tmp);
} break; } break;
case 0x71: { case 0x71: {
Logger::nas_mm().debug("Decoding IEI (0x71)"); Logger::nas_mm().debug("Decoding IEI (0x71)");
ie_nas_message_container = new NasMessageContainer(); NasMessageContainer ie_nas_message_container_tmp = {};
decoded_size += ie_nas_message_container->Decode( if ((decoded_result = ie_nas_message_container_tmp.Decode(
buf + decoded_size, len - decoded_size, true); buf + decoded_size, len - decoded_size, true)) ==
KEncodeDecodeError)
return decoded_result;
decoded_size += decoded_result;
ie_nas_message_container =
std::optional<NasMessageContainer>(ie_nas_message_container_tmp);
} break; } break;
case 0x78: { case 0x78: {
Logger::nas_mm().debug("Decoding IEI (0x78)"); Logger::nas_mm().debug("Decoding IEI (0x78)");
ie_non_imeisvpei = new _5GSMobileIdentity(); _5GSMobileIdentity ie_non_imeisvpei_tmp = {};
decoded_size += ie_non_imeisvpei->Decode( if ((decoded_result = ie_non_imeisvpei_tmp.Decode(
buf + decoded_size, len - decoded_size, true); buf + decoded_size, len - decoded_size, true)) ==
KEncodeDecodeError)
return decoded_result;
decoded_size += decoded_result;
ie_non_imeisvpei =
std::optional<_5GSMobileIdentity>(ie_non_imeisvpei_tmp);
} break; } break;
default: { default: {
Logger::nas_mm().debug("Unexpected IEI (0x%x)", octet); Logger::nas_mm().debug("Unexpected IEI (0x%x)", octet);
...@@ -186,7 +208,8 @@ int SecurityModeComplete::Decode( ...@@ -186,7 +208,8 @@ int SecurityModeComplete::Decode(
} }
} }
} }
Logger::nas_mm().debug( Logger::nas_mm().debug(
"Decoded SecurityModeComplete message len (%d)", decoded_size); "Decoded SecurityModeComplete message len (%d)", decoded_size);
return TLV_ERROR_OK; return decoded_size;
} }
...@@ -19,41 +19,36 @@ ...@@ -19,41 +19,36 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file #ifndef _SECURITY_MODE_COMPLETE_H_
\brief #define _SECURITY_MODE_COMPLETE_H_
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _SecurityModeComplete_H_
#define _SecurityModeComplete_H_
#include "NasIeHeader.hpp" #include "NasIeHeader.hpp"
namespace nas { namespace nas {
class SecurityModeComplete { class SecurityModeComplete : public NasMmPlainHeader {
public: public:
SecurityModeComplete(); SecurityModeComplete();
~SecurityModeComplete(); ~SecurityModeComplete();
int Encode(uint8_t* buf, int len);
int Decode(NasMmPlainHeader* header, uint8_t* buf, int len);
void setHeader(uint8_t security_header_type); void setHeader(uint8_t security_header_type);
int Encode(uint8_t* buf, int len);
int Decode(uint8_t* buf, int len);
void SetImeisv(IMEISV_t imeisv); void SetImeisv(IMEISV_t imeisv);
bool GetImeisv(IMEISV_t& imeisv) const;
void setNAS_Message_Container(bstring value); void setNAS_Message_Container(bstring value);
void setNON_IMEISV(IMEISV_t imeisv); bool getNasMessageContainer(bstring& nas) const;
bool GetImeisv(IMEISV_t& imeisv); void setNON_IMEISV(IMEISV_t imeisv);
bool getNasMessageContainer(bstring& nas); bool getNON_IMEISV(IMEISV_t& imeisv) const;
bool getNON_IMEISV(IMEISV_t& imeisv);
public: public:
NasMmPlainHeader* plain_header; std::optional<_5GSMobileIdentity> ie_imeisv; // Optional
_5GSMobileIdentity* ie_imeisv; std::optional<NasMessageContainer> ie_nas_message_container; // Optional
NasMessageContainer* ie_nas_message_container; std::optional<_5GSMobileIdentity> ie_non_imeisvpei; // Optional
_5GSMobileIdentity* ie_non_imeisvpei;
}; };
} // namespace nas } // 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