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) {
}
//------------------------------------------------------------------------------
void ServiceType::GetValue(uint8_t& value) {
void ServiceType::GetValue(uint8_t& value) const {
value = service_type_value_;
}
......
......@@ -40,7 +40,7 @@ class ServiceType : public Type1NasIe {
// int Decode(uint8_t* nuf, int len, bool is_iei, bool is_high);
void SetValue(uint8_t value);
void GetValue(uint8_t& value);
void GetValue(uint8_t& value) const;
private:
void SetValue() override;
......
......@@ -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);
}
//------------------------------------------------------------------------------
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);
}
......@@ -173,12 +173,9 @@ int ServiceRequest::Encode(uint8_t* buf, int len) {
// ngKSI and Service Type
int size = ie_ng_ksi.Encode(buf + encoded_size, len - encoded_size);
if (size == KEncodeDecodeError) {
Logger::nas_mm().error("Encoding NgKSI error");
return KEncodeDecodeError;
}
if (size != 0) {
Logger::nas_mm().error("Encoding NgKSI error");
if ((size == KEncodeDecodeError) or (size != 0)) { // 1/2 octet
Logger::nas_mm().debug(
"Encoding %s error", NasKeySetIdentifier::GetIeName().c_str());
return KEncodeDecodeError;
}
......@@ -186,7 +183,8 @@ int ServiceRequest::Encode(uint8_t* buf, int len) {
if (size != KEncodeDecodeError) {
encoded_size++; // 1/2 octet for ngKSI, 1/2 for Service Type
} else {
Logger::nas_mm().error("Encoding ie_service_type error");
Logger::nas_mm().debug(
"Encoding %s error", ServiceType::GetIeName().c_str());
return KEncodeDecodeError;
}
......@@ -195,62 +193,71 @@ int ServiceRequest::Encode(uint8_t* buf, int len) {
if (size != KEncodeDecodeError) {
encoded_size += size;
} 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;
}
// Uplink data status
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 {
size = ie_uplink_data_status.value().Encode(
buf + encoded_size, len - encoded_size);
if (size != KEncodeDecodeError) {
encoded_size += size;
} else {
Logger::nas_mm().error("Encoding ie_uplink_data_status error");
Logger::nas_mm().debug(
"Encoding %s error", UplinkDataStatus::GetIeName().c_str());
return KEncodeDecodeError;
}
}
// PDU session status
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 {
size = ie_pdu_session_status.value().Encode(
buf + encoded_size, len - encoded_size);
if (size != KEncodeDecodeError) {
encoded_size += size;
} else {
Logger::nas_mm().error("Encoding ie_pdu_session_status error");
Logger::nas_mm().debug(
"Encoding %s error", PDUSessionStatus::GetIeName().c_str());
return KEncodeDecodeError;
}
}
// Allowed PDU session status
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 {
size = ie_allowed_pdu_session_status.value().Encode(
buf + encoded_size, len - encoded_size);
if (size != KEncodeDecodeError) {
encoded_size += size;
} 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;
}
}
// 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().debug(
"IE %s is not available", NasMessageContainer::GetIeName().c_str());
} else {
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().debug(
"Encoding %s error", NasMessageContainer::GetIeName().c_str());
return KEncodeDecodeError;
}
}
......@@ -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");
int decoded_size = 0;
......@@ -288,12 +295,15 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) {
if (decoded_result == KEncodeDecodeError) return KEncodeDecodeError;
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);
while ((octet != 0x0)) {
Logger::nas_mm().debug("IEI 0x%x", octet);
switch (octet) {
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 = {};
if ((decoded_result = ie_uplink_data_status_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) ==
......@@ -302,13 +312,12 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) {
decoded_size += decoded_result;
ie_uplink_data_status =
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);
} break;
case kIeiPduSessionStatus: {
Logger::nas_mm().debug(
"Decoding ie_pdu_session_status (IEI 0x%x)", kIeiPduSessionStatus);
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiPduSessionStatus);
PDUSessionStatus ie_pdu_session_status_tmp = {};
if ((decoded_result = ie_pdu_session_status_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) ==
......@@ -317,14 +326,13 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) {
decoded_size += decoded_result;
ie_pdu_session_status =
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);
} break;
case kIeiAllowedPduSessionStatus: {
Logger::nas_mm().debug(
"Decoding ie_allowed_pdu_session_status, IEI 0x%x",
kIeiAllowedPduSessionStatus);
"Decoding IEI 0x%x", kIeiAllowedPduSessionStatus);
AllowedPDUSessionStatus ie_allowed_pdu_session_status_tmp = {};
if ((decoded_result = ie_allowed_pdu_session_status_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) ==
......@@ -333,12 +341,12 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) {
decoded_size += decoded_result;
ie_allowed_pdu_session_status = std::optional<AllowedPDUSessionStatus>(
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);
} break;
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 = {};
if ((decoded_result = ie_nas_message_container_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) ==
......@@ -347,7 +355,7 @@ int ServiceRequest::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) {
decoded_size += decoded_result;
ie_nas_message_container =
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);
} break;
......
......@@ -35,15 +35,16 @@ class ServiceRequest : public NasMmPlainHeader {
void SetHeader(uint8_t security_header_type);
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 GetNgKsi(uint8_t& ng_ksi) const;
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(
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