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

Code cleanup for Service Request

parent 0952db8d
...@@ -41,7 +41,7 @@ void ServiceType::SetValue(uint8_t value) { ...@@ -41,7 +41,7 @@ void ServiceType::SetValue(uint8_t value) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void ServiceType::GetValue(uint8_t& value) { void ServiceType::GetValue(uint8_t& value) const {
value = service_type_value_; value = service_type_value_;
} }
......
...@@ -40,7 +40,7 @@ class ServiceType : public Type1NasIe { ...@@ -40,7 +40,7 @@ class ServiceType : public Type1NasIe {
// int Decode(uint8_t* nuf, int len, bool is_iei, bool is_high); // int Decode(uint8_t* nuf, int len, bool is_iei, bool is_high);
void SetValue(uint8_t value); void SetValue(uint8_t value);
void GetValue(uint8_t& value); void GetValue(uint8_t& value) const;
private: private:
void SetValue() override; void SetValue() override;
......
...@@ -62,13 +62,13 @@ void ServiceRequest::SetServiceType(uint8_t value) { ...@@ -62,13 +62,13 @@ void ServiceRequest::SetServiceType(uint8_t value) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void ServiceRequest::GetServiceType(uint8_t& value) { void ServiceRequest::GetServiceType(uint8_t& value) const {
ie_service_type.GetValue(value); ie_service_type.GetValue(value);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void ServiceRequest::Set5gSTmsi( void ServiceRequest::Set5gSTmsi(
uint16_t amf_set_id, uint8_t amf_pointer, std::string tmsi) { uint16_t amf_set_id, uint8_t amf_pointer, const std::string& tmsi) {
ie_5g_s_tmsi.Set5gSTmsi(amf_set_id, amf_pointer, tmsi); ie_5g_s_tmsi.Set5gSTmsi(amf_set_id, amf_pointer, tmsi);
} }
...@@ -173,12 +173,9 @@ int ServiceRequest::Encode(uint8_t* buf, int len) { ...@@ -173,12 +173,9 @@ int ServiceRequest::Encode(uint8_t* buf, int len) {
// ngKSI and Service Type // ngKSI and Service Type
int size = ie_ng_ksi.Encode(buf + encoded_size, len - encoded_size); int size = ie_ng_ksi.Encode(buf + encoded_size, len - encoded_size);
if (size == KEncodeDecodeError) { if ((size == KEncodeDecodeError) or (size != 0)) { // 1/2 octet
Logger::nas_mm().error("Encoding NgKSI error"); Logger::nas_mm().debug(
return KEncodeDecodeError; "Encoding %s error", NasKeySetIdentifier::GetIeName().c_str());
}
if (size != 0) {
Logger::nas_mm().error("Encoding NgKSI error");
return KEncodeDecodeError; return KEncodeDecodeError;
} }
...@@ -186,7 +183,8 @@ int ServiceRequest::Encode(uint8_t* buf, int len) { ...@@ -186,7 +183,8 @@ int ServiceRequest::Encode(uint8_t* buf, int len) {
if (size != KEncodeDecodeError) { if (size != KEncodeDecodeError) {
encoded_size++; // 1/2 octet for ngKSI, 1/2 for Service Type encoded_size++; // 1/2 octet for ngKSI, 1/2 for Service Type
} else { } else {
Logger::nas_mm().error("Encoding ie_service_type error"); Logger::nas_mm().debug(
"Encoding %s error", ServiceType::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
...@@ -195,62 +193,71 @@ int ServiceRequest::Encode(uint8_t* buf, int len) { ...@@ -195,62 +193,71 @@ int ServiceRequest::Encode(uint8_t* buf, int len) {
if (size != KEncodeDecodeError) { if (size != KEncodeDecodeError) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding IE ie_5g_s_tmsi error"); Logger::nas_mm().debug(
"Encoding %s error", _5GSMobileIdentity::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
// Uplink data status // Uplink data status
if (!ie_uplink_data_status.has_value()) { if (!ie_uplink_data_status.has_value()) {
Logger::nas_mm().warn("IE ie_uplink_data_status is not available"); Logger::nas_mm().debug(
"IE %s is not available", UplinkDataStatus::GetIeName().c_str());
} else { } else {
size = ie_uplink_data_status.value().Encode( size = ie_uplink_data_status.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_uplink_data_status error"); Logger::nas_mm().debug(
"Encoding %s error", UplinkDataStatus::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
// PDU session status // PDU session status
if (!ie_pdu_session_status.has_value()) { if (!ie_pdu_session_status.has_value()) {
Logger::nas_mm().warn("IE ie_pdu_session_status is not available"); Logger::nas_mm().debug(
"IE %s is not available", PDUSessionStatus::GetIeName().c_str());
} else { } else {
size = ie_pdu_session_status.value().Encode( size = ie_pdu_session_status.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_pdu_session_status error"); Logger::nas_mm().debug(
"Encoding %s error", PDUSessionStatus::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
// Allowed PDU session status // Allowed PDU session status
if (!ie_allowed_pdu_session_status.has_value()) { if (!ie_allowed_pdu_session_status.has_value()) {
Logger::nas_mm().warn("IE ie_allowed_pdu_session_status is not available"); Logger::nas_mm().debug(
"IE %s is not available", AllowedPDUSessionStatus::GetIeName().c_str());
} else { } else {
size = ie_allowed_pdu_session_status.value().Encode( size = ie_allowed_pdu_session_status.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_allowed_pdu_session_status error"); Logger::nas_mm().debug(
"Encoding %s error", AllowedPDUSessionStatus::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
// NAS message container // NAS message container
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 {
size = ie_nas_message_container.value().Encode( 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().debug(
"Encoding %s error", NasMessageContainer::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
...@@ -260,7 +267,7 @@ int ServiceRequest::Encode(uint8_t* buf, int len) { ...@@ -260,7 +267,7 @@ int ServiceRequest::Encode(uint8_t* buf, int len) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) { int ServiceRequest::Decode(uint8_t* buf, int len) {
Logger::nas_mm().debug("Decoding ServiceRequest message"); Logger::nas_mm().debug("Decoding ServiceRequest message");
int decoded_size = 0; int decoded_size = 0;
...@@ -288,12 +295,15 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) { ...@@ -288,12 +295,15 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) {
if (decoded_result == KEncodeDecodeError) return KEncodeDecodeError; if (decoded_result == KEncodeDecodeError) return KEncodeDecodeError;
decoded_size += decoded_result; decoded_size += decoded_result;
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 optional IE (0x%x)", octet); Logger::nas_mm().debug("First optional IE (0x%x)", octet);
while ((octet != 0x0)) { while ((octet != 0x0)) {
Logger::nas_mm().debug("IEI 0x%x", octet);
switch (octet) { switch (octet) {
case kIeiUplinkDataStatus: { case kIeiUplinkDataStatus: {
Logger::nas_mm().debug("Decoding ie_uplink_data_status (IEI: 0x40)"); Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiUplinkDataStatus);
UplinkDataStatus ie_uplink_data_status_tmp = {}; UplinkDataStatus ie_uplink_data_status_tmp = {};
if ((decoded_result = ie_uplink_data_status_tmp.Decode( if ((decoded_result = ie_uplink_data_status_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) == buf + decoded_size, len - decoded_size, true)) ==
...@@ -302,13 +312,12 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) { ...@@ -302,13 +312,12 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) {
decoded_size += decoded_result; decoded_size += decoded_result;
ie_uplink_data_status = ie_uplink_data_status =
std::optional<UplinkDataStatus>(ie_uplink_data_status_tmp); std::optional<UplinkDataStatus>(ie_uplink_data_status_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;
case kIeiPduSessionStatus: { case kIeiPduSessionStatus: {
Logger::nas_mm().debug( Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiPduSessionStatus);
"Decoding ie_pdu_session_status (IEI 0x%x)", kIeiPduSessionStatus);
PDUSessionStatus ie_pdu_session_status_tmp = {}; PDUSessionStatus ie_pdu_session_status_tmp = {};
if ((decoded_result = ie_pdu_session_status_tmp.Decode( if ((decoded_result = ie_pdu_session_status_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) == buf + decoded_size, len - decoded_size, true)) ==
...@@ -317,14 +326,13 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) { ...@@ -317,14 +326,13 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) {
decoded_size += decoded_result; decoded_size += decoded_result;
ie_pdu_session_status = ie_pdu_session_status =
std::optional<PDUSessionStatus>(ie_pdu_session_status_tmp); std::optional<PDUSessionStatus>(ie_pdu_session_status_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;
case kIeiAllowedPduSessionStatus: { case kIeiAllowedPduSessionStatus: {
Logger::nas_mm().debug( Logger::nas_mm().debug(
"Decoding ie_allowed_pdu_session_status, IEI 0x%x", "Decoding IEI 0x%x", kIeiAllowedPduSessionStatus);
kIeiAllowedPduSessionStatus);
AllowedPDUSessionStatus ie_allowed_pdu_session_status_tmp = {}; AllowedPDUSessionStatus ie_allowed_pdu_session_status_tmp = {};
if ((decoded_result = ie_allowed_pdu_session_status_tmp.Decode( if ((decoded_result = ie_allowed_pdu_session_status_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) == buf + decoded_size, len - decoded_size, true)) ==
...@@ -333,12 +341,12 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) { ...@@ -333,12 +341,12 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) {
decoded_size += decoded_result; decoded_size += decoded_result;
ie_allowed_pdu_session_status = std::optional<AllowedPDUSessionStatus>( ie_allowed_pdu_session_status = std::optional<AllowedPDUSessionStatus>(
ie_allowed_pdu_session_status_tmp); ie_allowed_pdu_session_status_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;
case kIeiNasMessageContainer: { case kIeiNasMessageContainer: {
Logger::nas_mm().debug("Decoding ie_nas_message_container(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)) ==
...@@ -347,7 +355,7 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) { ...@@ -347,7 +355,7 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) {
decoded_size += decoded_result; decoded_size += decoded_result;
ie_nas_message_container = ie_nas_message_container =
std::optional<NasMessageContainer>(ie_nas_message_container_tmp); std::optional<NasMessageContainer>(ie_nas_message_container_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;
......
...@@ -35,15 +35,16 @@ class ServiceRequest : public NasMmPlainHeader { ...@@ -35,15 +35,16 @@ class ServiceRequest : public NasMmPlainHeader {
void SetHeader(uint8_t security_header_type); void SetHeader(uint8_t security_header_type);
int Encode(uint8_t* buf, int len); int Encode(uint8_t* buf, int len);
int Decode(NasMmPlainHeader* header, uint8_t* buf, int len); int Decode(uint8_t* buf, int len);
void SetNgKsi(uint8_t tsc, uint8_t key_set_id); void SetNgKsi(uint8_t tsc, uint8_t key_set_id);
void GetNgKsi(uint8_t& ng_ksi) const; void GetNgKsi(uint8_t& ng_ksi) const;
void SetServiceType(uint8_t value); void SetServiceType(uint8_t value);
void GetServiceType(uint8_t& value); void GetServiceType(uint8_t& value) const;
void Set5gSTmsi(uint16_t amf_set_id, uint8_t amf_pointer, std::string tmsi); void Set5gSTmsi(
uint16_t amf_set_id, uint8_t amf_pointer, const std::string& tmsi);
bool Get5gSTmsi( bool Get5gSTmsi(
uint16_t& amf_set_id, uint8_t& amf_pointer, std::string& tmsi) const; uint16_t& amf_set_id, uint8_t& amf_pointer, std::string& tmsi) const;
......
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