Commit 818c01a7 authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Fix decoding Authentication Failure msg

parent 8d29f4e2
...@@ -28,19 +28,16 @@ using namespace nas; ...@@ -28,19 +28,16 @@ using namespace nas;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
_5gmmCause::_5gmmCause(uint8_t iei) : Type3NasIe(iei) { _5gmmCause::_5gmmCause(uint8_t iei) : Type3NasIe(iei) {
value_ = 0; value_ = 0;
SetIeName(k5gmmCauseIeName);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
_5gmmCause::_5gmmCause() : Type3NasIe() { _5gmmCause::_5gmmCause() : Type3NasIe() {
value_ = 0; value_ = 0;
SetIeName(k5gmmCauseIeName);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
_5gmmCause::_5gmmCause(uint8_t iei, uint8_t value) : Type3NasIe(iei) { _5gmmCause::_5gmmCause(uint8_t iei, uint8_t value) : Type3NasIe(iei) {
value_ = value; value_ = value;
SetIeName(k5gmmCauseIeName);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
...@@ -97,7 +94,7 @@ int _5gmmCause::Decode(uint8_t* buf, int len, bool is_iei) { ...@@ -97,7 +94,7 @@ int _5gmmCause::Decode(uint8_t* buf, int len, bool is_iei) {
int decoded_size = 0; int decoded_size = 0;
// IEI and Length // IEI and Length
decoded_size += Type3NasIe::Decode(buf + decoded_size, len, true); decoded_size += Type3NasIe::Decode(buf + decoded_size, len, is_iei);
DECODE_U8(buf + decoded_size, value_, decoded_size); DECODE_U8(buf + decoded_size, value_, decoded_size);
......
...@@ -110,8 +110,9 @@ int AuthenticationFailure::Encode(uint8_t* buf, int len) { ...@@ -110,8 +110,9 @@ int AuthenticationFailure::Encode(uint8_t* buf, int len) {
} }
if (!ie_authentication_failure_parameter.has_value()) { if (!ie_authentication_failure_parameter.has_value()) {
Logger::nas_mm().warn( Logger::nas_mm().debug(
"IE ie_authentication_failure_parameter is not available"); "IE %s is not available",
AuthenticationFailureParameter::GetIeName().c_str());
} else { } else {
size = ie_authentication_failure_parameter.value().Encode( size = ie_authentication_failure_parameter.value().Encode(
buf + encoded_size, len - encoded_size); buf + encoded_size, len - encoded_size);
...@@ -148,29 +149,33 @@ int AuthenticationFailure::Decode(uint8_t* buf, int len) { ...@@ -148,29 +149,33 @@ int AuthenticationFailure::Decode(uint8_t* buf, int len) {
if ((decoded_result = ie_5gmm_cause.Decode( if ((decoded_result = ie_5gmm_cause.Decode(
buf + decoded_size, len - decoded_size, false)) == buf + decoded_size, len - decoded_size, false)) ==
KEncodeDecodeError) KEncodeDecodeError)
return decoded_result; return KEncodeDecodeError;
decoded_size += decoded_result; decoded_size += decoded_result;
Logger::nas_mm().debug("Decoded_size (%d)", decoded_size); Logger::nas_mm().debug("Decoded_size (%d)", decoded_size);
uint8_t octet = *(buf + decoded_size);
Logger::nas_mm().debug("First option IEI (0x%x)", octet); // Decode other IEs
uint8_t octet = 0x00;
DECODE_U8_VALUE(buf + decoded_size, octet);
while ((octet != 0x0)) { while ((octet != 0x0)) {
Logger::nas_mm().debug("IEI 0x%x", octet);
switch (octet) { switch (octet) {
case 0x30: { case kIeiAuthenticationFailureParameter: {
Logger::nas_mm().debug("Decoding IEI (0x30)"); Logger::nas_mm().debug("Decoding IEI (0x30)");
AuthenticationFailureParameter ie_authentication_failure_parameter_tmp = AuthenticationFailureParameter ie_authentication_failure_parameter_tmp =
{}; {};
if ((decoded_result = ie_authentication_failure_parameter_tmp.Decode( if ((decoded_result = ie_authentication_failure_parameter_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) == buf + decoded_size, len - decoded_size, true)) ==
KEncodeDecodeError) KEncodeDecodeError)
return decoded_result; return KEncodeDecodeError;
decoded_size += decoded_result; decoded_size += decoded_result;
ie_authentication_failure_parameter = ie_authentication_failure_parameter =
std::optional<AuthenticationFailureParameter>( std::optional<AuthenticationFailureParameter>(
ie_authentication_failure_parameter_tmp); ie_authentication_failure_parameter_tmp);
octet = *(buf + decoded_size); DECODE_U8_VALUE(buf + decoded_size, octet);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
default: { default: {
Logger::nas_mm().warn("Unknown IEI 0x%x, stop decoding...", octet); Logger::nas_mm().warn("Unknown IEI 0x%x, stop decoding...", octet);
// Stop decoding // Stop decoding
...@@ -178,6 +183,7 @@ int AuthenticationFailure::Decode(uint8_t* buf, int len) { ...@@ -178,6 +183,7 @@ int AuthenticationFailure::Decode(uint8_t* buf, int len) {
} break; } break;
} }
} }
Logger::nas_mm().debug( Logger::nas_mm().debug(
"Decoded AuthenticationFailure message len (%d)", decoded_size); "Decoded AuthenticationFailure 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