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