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

Code cleanup for Security Mode Complete/Reject

parent b57dc98d
...@@ -44,7 +44,7 @@ void SecurityModeComplete::SetHeader(uint8_t security_header_type) { ...@@ -44,7 +44,7 @@ void SecurityModeComplete::SetHeader(uint8_t security_header_type) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void SecurityModeComplete::SetImeisv(IMEISV_t imeisv) { void SecurityModeComplete::SetImeisv(const IMEISV_t& imeisv) {
ie_imeisv = ie_imeisv =
std::make_optional<_5GSMobileIdentity>(kIei5gsMobileIdentityImeiSv); std::make_optional<_5GSMobileIdentity>(kIei5gsMobileIdentityImeiSv);
// ie_imeisv->SetIei(kIei5gsMobileIdentityImeiSv); // ie_imeisv->SetIei(kIei5gsMobileIdentityImeiSv);
...@@ -52,12 +52,12 @@ void SecurityModeComplete::SetImeisv(IMEISV_t imeisv) { ...@@ -52,12 +52,12 @@ void SecurityModeComplete::SetImeisv(IMEISV_t imeisv) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void SecurityModeComplete::SetNasMessageContainer(bstring value) { void SecurityModeComplete::SetNasMessageContainer(const bstring& value) {
ie_nas_message_container = std::make_optional<NasMessageContainer>(value); ie_nas_message_container = std::make_optional<NasMessageContainer>(value);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void SecurityModeComplete::SetNonImeisv(IMEISV_t imeisv) { void SecurityModeComplete::SetNonImeisv(const IMEISV_t& imeisv) {
ie_non_imeisvpei = ie_non_imeisvpei =
std::make_optional<_5GSMobileIdentity>(kIei5gsMobileIdentityNonImeiSvPei); std::make_optional<_5GSMobileIdentity>(kIei5gsMobileIdentityNonImeiSvPei);
// ie_non_imeisvpei->SetIei(kIei5gsMobileIdentityNonImeiSvPei); // ie_non_imeisvpei->SetIei(kIei5gsMobileIdentityNonImeiSvPei);
...@@ -109,46 +109,52 @@ int SecurityModeComplete::Encode(uint8_t* buf, int len) { ...@@ -109,46 +109,52 @@ int SecurityModeComplete::Encode(uint8_t* buf, int len) {
encoded_size += encoded_ie_size; encoded_size += encoded_ie_size;
if (!ie_imeisv.has_value()) { if (!ie_imeisv.has_value()) {
Logger::nas_mm().warn("IE ie_imeisv is not available"); Logger::nas_mm().debug(
"IE %s is not available", _5GSMobileIdentity::GetIeName().c_str());
} else { } else {
int size = ie_imeisv.value().Encode(buf + encoded_size, len - encoded_size); int size = ie_imeisv.value().Encode(buf + encoded_size, len - encoded_size);
if (size != KEncodeDecodeError) { if (size != KEncodeDecodeError) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding ie_imeisv error"); Logger::nas_mm().error(
"Encoding %s error", _5GSMobileIdentity::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
if (!ie_nas_message_container.has_value()) { if (!ie_nas_message_container.has_value()) {
Logger::nas_mm().warn("IE ie_nas_message_container is not available"); Logger::nas_mm().debug(
"IE %s is not available", NasMessageContainer::GetIeName().c_str());
} else { } else {
int size = ie_nas_message_container.value().Encode( int size = ie_nas_message_container.value().Encode(
buf + encoded_size, len - encoded_size); buf + encoded_size, len - encoded_size);
if (size != KEncodeDecodeError) { 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 %s error", NasMessageContainer::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
if (!ie_non_imeisvpei.has_value()) { if (!ie_non_imeisvpei.has_value()) {
Logger::nas_mm().warn("IE ie_non_imeisvpei is not available"); Logger::nas_mm().debug(
"IE %s is not available", _5GSMobileIdentity::GetIeName().c_str());
} else { } else {
int size = int size =
ie_non_imeisvpei.value().Encode(buf + encoded_size, len - encoded_size); ie_non_imeisvpei.value().Encode(buf + encoded_size, len - encoded_size);
if (size != KEncodeDecodeError) { if (size != KEncodeDecodeError) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding ie_non_imeisvpei error"); Logger::nas_mm().error(
"Encoding %s error", _5GSMobileIdentity::GetIeName().c_str());
return KEncodeDecodeError; 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 encoded_size;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
...@@ -169,11 +175,13 @@ int SecurityModeComplete::Decode(uint8_t* buf, int len) { ...@@ -169,11 +175,13 @@ int SecurityModeComplete::Decode(uint8_t* buf, int len) {
// while ((octet != 0x0)) { // while ((octet != 0x0)) {
while (len - decoded_size > 0) { while (len - decoded_size > 0) {
uint8_t octet = *(buf + decoded_size); uint8_t octet = 0x00;
DECODE_U8_VALUE(buf + decoded_size, octet);
Logger::nas_mm().debug("Optional IEI (0x%x)", octet); Logger::nas_mm().debug("Optional IEI (0x%x)", octet);
switch (octet) { switch (octet) {
case kIei5gsMobileIdentityImeiSv: { case kIei5gsMobileIdentityImeiSv: {
Logger::nas_mm().debug("Decoding IEI (0x77)"); Logger::nas_mm().debug(
"Decoding IEI 0x%x", kIei5gsMobileIdentityImeiSv);
_5GSMobileIdentity ie_imeisv_tmp = {}; _5GSMobileIdentity ie_imeisv_tmp = {};
if ((decoded_result = ie_imeisv_tmp.Decode( if ((decoded_result = ie_imeisv_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) == buf + decoded_size, len - decoded_size, true)) ==
...@@ -184,7 +192,7 @@ int SecurityModeComplete::Decode(uint8_t* buf, int len) { ...@@ -184,7 +192,7 @@ int SecurityModeComplete::Decode(uint8_t* buf, int len) {
} break; } break;
case kIeiNasMessageContainer: { case kIeiNasMessageContainer: {
Logger::nas_mm().debug("Decoding IEI (0x71)"); Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiNasMessageContainer);
NasMessageContainer ie_nas_message_container_tmp = {}; NasMessageContainer ie_nas_message_container_tmp = {};
if ((decoded_result = ie_nas_message_container_tmp.Decode( if ((decoded_result = ie_nas_message_container_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) == buf + decoded_size, len - decoded_size, true)) ==
...@@ -196,7 +204,8 @@ int SecurityModeComplete::Decode(uint8_t* buf, int len) { ...@@ -196,7 +204,8 @@ int SecurityModeComplete::Decode(uint8_t* buf, int len) {
} break; } break;
case kIei5gsMobileIdentityNonImeiSvPei: { case kIei5gsMobileIdentityNonImeiSvPei: {
Logger::nas_mm().debug("Decoding IEI (0x78)"); Logger::nas_mm().debug(
"Decoding IEI 0x%x", kIei5gsMobileIdentityNonImeiSvPei);
_5GSMobileIdentity ie_non_imeisvpei_tmp = {}; _5GSMobileIdentity ie_non_imeisvpei_tmp = {};
if ((decoded_result = ie_non_imeisvpei_tmp.Decode( if ((decoded_result = ie_non_imeisvpei_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) == buf + decoded_size, len - decoded_size, true)) ==
......
...@@ -36,13 +36,13 @@ class SecurityModeComplete : public NasMmPlainHeader { ...@@ -36,13 +36,13 @@ class SecurityModeComplete : public NasMmPlainHeader {
int Encode(uint8_t* buf, int len); int Encode(uint8_t* buf, int len);
int Decode(uint8_t* buf, int len); int Decode(uint8_t* buf, int len);
void SetImeisv(IMEISV_t imeisv); void SetImeisv(const IMEISV_t& imeisv);
bool GetImeisv(IMEISV_t& imeisv) const; bool GetImeisv(IMEISV_t& imeisv) const;
void SetNasMessageContainer(bstring value); void SetNasMessageContainer(const bstring& value);
bool GetNasMessageContainer(bstring& nas) const; bool GetNasMessageContainer(bstring& nas) const;
void SetNonImeisv(IMEISV_t imeisv); void SetNonImeisv(const IMEISV_t& imeisv);
bool GetNonImeisv(IMEISV_t& imeisv) const; bool GetNonImeisv(IMEISV_t& imeisv) const;
public: public:
......
...@@ -45,7 +45,7 @@ void SecurityModeReject::Set5gmmCause(uint8_t value) { ...@@ -45,7 +45,7 @@ void SecurityModeReject::Set5gmmCause(uint8_t value) {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int SecurityModeReject::Encode(uint8_t* buf, int len) { int SecurityModeReject::Encode(uint8_t* buf, int len) {
Logger::nas_mm().debug("encoding SecurityModeReject message"); Logger::nas_mm().debug("Encoding SecurityModeReject message");
int encoded_size = 0; int encoded_size = 0;
int encoded_ie_size = 0; int encoded_ie_size = 0;
...@@ -58,20 +58,24 @@ int SecurityModeReject::Encode(uint8_t* buf, int len) { ...@@ -58,20 +58,24 @@ int SecurityModeReject::Encode(uint8_t* buf, int len) {
encoded_size += encoded_ie_size; encoded_size += encoded_ie_size;
// 5GMM Cause // 5GMM Cause
if (int size = ie_5gmm_cause.Encode(buf + encoded_size, len - encoded_size)) { encoded_ie_size =
encoded_size += size; ie_5gmm_cause.Encode(buf + encoded_size, len - encoded_size);
if (encoded_ie_size != KEncodeDecodeError) {
encoded_size += encoded_ie_size;
} else { } else {
Logger::nas_mm().error("Encoding ie_5gmm_cause error"); Logger::nas_mm().error(
"Encoding %s error", _5gmmCause::GetIeName().c_str());
return KEncodeDecodeError;
} }
Logger::nas_mm().debug( Logger::nas_mm().debug(
"encoded SecurityModeReject message len(%d)", encoded_size); "Encoded SecurityModeReject message len(%d)", encoded_size);
return encoded_size; return encoded_size;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int SecurityModeReject::Decode(uint8_t* buf, int len) { int SecurityModeReject::Decode(uint8_t* buf, int len) {
Logger::nas_mm().debug("decoding SecurityModeReject message"); Logger::nas_mm().debug("Decoding SecurityModeReject message");
int decoded_size = 0; int decoded_size = 0;
int decoded_result = 0; int decoded_result = 0;
...@@ -89,11 +93,12 @@ int SecurityModeReject::Decode(uint8_t* buf, int len) { ...@@ -89,11 +93,12 @@ int SecurityModeReject::Decode(uint8_t* buf, int len) {
if (decoded_result != KEncodeDecodeError) { if (decoded_result != KEncodeDecodeError) {
decoded_size += decoded_result; decoded_size += decoded_result;
} else { } else {
Logger::nas_mm().error("Encoding ie_payload_container error"); Logger::nas_mm().error(
"Decoding %s error", _5gmmCause::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
Logger::nas_mm().debug( Logger::nas_mm().debug(
"decoded SecurityModeReject message len(%d)", decoded_size); "Decoded SecurityModeReject message len(%d)", decoded_size);
return decoded_size; return decoded_size;
} }
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