Commit 7317ea9e authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Code cleanup for UL NAS Transfport

parent 15a1a93e
...@@ -3263,7 +3263,8 @@ void amf_n1::ul_nas_transport_handle( ...@@ -3263,7 +3263,8 @@ void amf_n1::ul_nas_transport_handle(
auto ul_nas = std::make_unique<ULNASTransport>(); auto ul_nas = std::make_unique<ULNASTransport>();
ul_nas->Decode((uint8_t*) bdata(nas), blength(nas)); ul_nas->Decode((uint8_t*) bdata(nas), blength(nas));
uint8_t payload_type = ul_nas->GetPayloadContainerType(); uint8_t payload_type = ul_nas->GetPayloadContainerType();
uint8_t pdu_session_id = ul_nas->GetPduSessionId(); uint8_t pdu_session_id = 0;
ul_nas->GetPduSessionId(pdu_session_id);
uint8_t request_type = 0; uint8_t request_type = 0;
if (!ul_nas->GetRequestType(request_type)) { if (!ul_nas->GetRequestType(request_type)) {
...@@ -3314,7 +3315,7 @@ void amf_n1::ul_nas_transport_handle( ...@@ -3314,7 +3315,7 @@ void amf_n1::ul_nas_transport_handle(
bstring dnn = bfromcstr("default"); bstring dnn = bfromcstr("default");
if (!ul_nas->getDnn(dnn)) { if (!ul_nas->GetDnn(dnn)) {
Logger::amf_n1().debug( Logger::amf_n1().debug(
"No DNN available in ULNASTransport, use default DNN!"); "No DNN available in ULNASTransport, use default DNN!");
// TODO: use default DNN for the corresponding NSSAI // TODO: use default DNN for the corresponding NSSAI
......
...@@ -81,7 +81,7 @@ S_NSSAI::S_NSSAI(std::optional<uint8_t> iei, SNSSAI_s snssai) { ...@@ -81,7 +81,7 @@ S_NSSAI::S_NSSAI(std::optional<uint8_t> iei, SNSSAI_s snssai) {
S_NSSAI::~S_NSSAI() {} S_NSSAI::~S_NSSAI() {}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void S_NSSAI::getValue(SNSSAI_t& snssai) { void S_NSSAI::getValue(SNSSAI_t& snssai) const {
uint8_t len = {0}; uint8_t len = {0};
// SST // SST
snssai.sst = sst_; snssai.sst = sst_;
......
...@@ -43,7 +43,7 @@ class S_NSSAI : public Type4NasIe { ...@@ -43,7 +43,7 @@ class S_NSSAI : public Type4NasIe {
int Encode(uint8_t* buf, int len); int Encode(uint8_t* buf, int len);
int Decode(uint8_t* buf, int len, const bool is_option = true); int Decode(uint8_t* buf, int len, const bool is_option = true);
void getValue(SNSSAI_t& snssai); void getValue(SNSSAI_t& snssai) const;
void SetSNSSAI( void SetSNSSAI(
std::optional<int8_t> iei, uint8_t sst, std::optional<int32_t> sd, std::optional<int8_t> iei, uint8_t sst, std::optional<int32_t> sd,
......
...@@ -29,8 +29,8 @@ using namespace nas; ...@@ -29,8 +29,8 @@ using namespace nas;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
ULNASTransport::ULNASTransport() ULNASTransport::ULNASTransport()
: NasMmPlainHeader(EPD_5GS_MM_MSG, UL_NAS_TRANSPORT) { : NasMmPlainHeader(EPD_5GS_MM_MSG, UL_NAS_TRANSPORT) {
ie_pdu_session_identity_2 = std::nullopt; ie_pdu_session_id = std::nullopt;
ie_old_pdu_session_identity_2 = std::nullopt; ie_old_pdu_session_id = std::nullopt;
ie_request_type = std::nullopt; ie_request_type = std::nullopt;
ie_s_nssai = std::nullopt; ie_s_nssai = std::nullopt;
ie_dnn = std::nullopt; ie_dnn = std::nullopt;
...@@ -53,52 +53,53 @@ void ULNASTransport::SetPayloadContainerType(uint8_t value) { ...@@ -53,52 +53,53 @@ void ULNASTransport::SetPayloadContainerType(uint8_t value) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
uint8_t ULNASTransport::GetPayloadContainerType() { uint8_t ULNASTransport::GetPayloadContainerType() const {
return ie_payload_container_type.GetValue(); return ie_payload_container_type.GetValue();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void ULNASTransport::SetPayloadContainer( void ULNASTransport::SetPayloadContainer(
std::vector<PayloadContainerEntry> content) { const std::vector<PayloadContainerEntry>& content) {
ie_payload_container.SetValue(content); ie_payload_container.SetValue(content);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void ULNASTransport::GetPayloadContainer(bstring& content) { void ULNASTransport::GetPayloadContainer(bstring& content) const {
ie_payload_container.GetValue(content); ie_payload_container.GetValue(content);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void ULNASTransport::GetPayloadContainer( void ULNASTransport::GetPayloadContainer(
std::vector<PayloadContainerEntry>& content) { std::vector<PayloadContainerEntry>& content) const {
ie_payload_container.GetValue(content); ie_payload_container.GetValue(content);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void ULNASTransport::SetPduSessionIdentity2(uint8_t value) { void ULNASTransport::SetPduSessionId(uint8_t value) {
ie_pdu_session_identity_2 = ie_pdu_session_id =
std::make_optional<PduSessionIdentity2>(kIeiPduSessionId, value); std::make_optional<PduSessionIdentity2>(kIeiPduSessionId, value);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
uint8_t ULNASTransport::GetPduSessionId() { bool ULNASTransport::GetPduSessionId(uint8_t& value) const {
if (ie_pdu_session_identity_2.has_value()) { if (ie_pdu_session_id.has_value()) {
return ie_pdu_session_identity_2.value().GetValue(); value = ie_pdu_session_id.value().GetValue();
return true;
} else { } else {
return -1; return false;
} }
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void ULNASTransport::SetOldPduSessionIdentity2(uint8_t value) { void ULNASTransport::SetOldPduSessionId(uint8_t value) {
ie_old_pdu_session_identity_2 = ie_old_pdu_session_id =
std::make_optional<PduSessionIdentity2>(kIeiOldPduSessionId, value); std::make_optional<PduSessionIdentity2>(kIeiOldPduSessionId, value);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool ULNASTransport::GetOldPduSessionId(uint8_t& value) { bool ULNASTransport::GetOldPduSessionId(uint8_t& value) const {
if (ie_old_pdu_session_identity_2.has_value()) { if (ie_old_pdu_session_id.has_value()) {
value = ie_old_pdu_session_identity_2.value().GetValue(); value = ie_old_pdu_session_id.value().GetValue();
return true; return true;
} else { } else {
return false; return false;
...@@ -111,7 +112,7 @@ void ULNASTransport::SetRequestType(uint8_t value) { ...@@ -111,7 +112,7 @@ void ULNASTransport::SetRequestType(uint8_t value) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool ULNASTransport::GetRequestType(uint8_t& value) { bool ULNASTransport::GetRequestType(uint8_t& value) const {
if (ie_request_type.has_value()) { if (ie_request_type.has_value()) {
value = ie_request_type.value().GetValue(); value = ie_request_type.value().GetValue();
return true; return true;
...@@ -121,13 +122,13 @@ bool ULNASTransport::GetRequestType(uint8_t& value) { ...@@ -121,13 +122,13 @@ bool ULNASTransport::GetRequestType(uint8_t& value) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void ULNASTransport::SetSNssai(SNSSAI_s snssai) { void ULNASTransport::SetSNssai(const SNSSAI_s& snssai) {
ie_s_nssai = ie_s_nssai =
std::make_optional<S_NSSAI>(std::optional<uint8_t>{kIeiSNssai}, snssai); std::make_optional<S_NSSAI>(std::optional<uint8_t>{kIeiSNssai}, snssai);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool ULNASTransport::GetSNssai(SNSSAI_s& snssai) { bool ULNASTransport::GetSNssai(SNSSAI_s& snssai) const {
if (ie_s_nssai.has_value()) { if (ie_s_nssai.has_value()) {
ie_s_nssai.value().getValue(snssai); ie_s_nssai.value().getValue(snssai);
return true; return true;
...@@ -137,12 +138,12 @@ bool ULNASTransport::GetSNssai(SNSSAI_s& snssai) { ...@@ -137,12 +138,12 @@ bool ULNASTransport::GetSNssai(SNSSAI_s& snssai) {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void ULNASTransport::setDNN(bstring dnn) { void ULNASTransport::SetDnn(const bstring& dnn) {
ie_dnn = std::make_optional<DNN>(dnn); ie_dnn = std::make_optional<DNN>(dnn);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool ULNASTransport::getDnn(bstring& dnn) { bool ULNASTransport::GetDnn(bstring& dnn) const {
if (ie_dnn.has_value()) { if (ie_dnn.has_value()) {
ie_dnn.value().GetValue(dnn); ie_dnn.value().GetValue(dnn);
return true; return true;
...@@ -195,94 +196,102 @@ int ULNASTransport::Encode(uint8_t* buf, int len) { ...@@ -195,94 +196,102 @@ int ULNASTransport::Encode(uint8_t* buf, int len) {
size = ie_payload_container.Encode( size = ie_payload_container.Encode(
buf + encoded_size, len - encoded_size, buf + encoded_size, len - encoded_size,
ie_payload_container_type.GetValue()); ie_payload_container_type.GetValue());
if (size != KEncodeDecodeError) { if (size != KEncodeDecodeError) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error("Encoding ie_payload_container error"); Logger::nas_mm().error(
"Decoding %s error", Payload_Container::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
if (!ie_pdu_session_identity_2.has_value()) { if (!ie_pdu_session_id.has_value()) {
Logger::nas_mm().warn("IE ie_pdu_session_identity_2 is not available"); Logger::nas_mm().debug(
"IE %s is not available", PduSessionIdentity2::GetIeName().c_str());
} else { } else {
size = ie_pdu_session_identity_2.value().Encode( size = ie_pdu_session_id.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 ie_pdu_session_identity_2 error"); Logger::nas_mm().error(
"Encoding %s error", PduSessionIdentity2::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
if (!ie_old_pdu_session_identity_2.has_value()) { if (!ie_old_pdu_session_id.has_value()) {
Logger::nas_mm().warn("IE ie_old_pdu_session_identity_2 is not available"); Logger::nas_mm().debug(
"IE %s is not available", PduSessionIdentity2::GetIeName().c_str());
} else { } else {
size = ie_old_pdu_session_identity_2.value().Encode( size = ie_old_pdu_session_id.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( Logger::nas_mm().error(
"Encoding IE ie_old_pdu_session_identity_2 error"); "Encoding %s error", PduSessionIdentity2::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
if (!ie_request_type.has_value()) { if (!ie_request_type.has_value()) {
Logger::nas_mm().warn("IE ie_request_type is not available"); Logger::nas_mm().debug(
"IE %s is not available", RequestType::GetIeName().c_str());
} else { } else {
size = size =
ie_request_type.value().Encode(buf + encoded_size, len - encoded_size); ie_request_type.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 ie_request_type error"); Logger::nas_mm().error(
"Encoding %s error", RequestType::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
if (!ie_s_nssai.has_value()) { if (!ie_s_nssai.has_value()) {
Logger::nas_mm().warn("IE ie_s_nssai is not available"); Logger::nas_mm().debug(
"IE %s is not available", S_NSSAI::GetIeName().c_str());
} else { } else {
size = ie_s_nssai.value().Encode(buf + encoded_size, len - encoded_size); size = ie_s_nssai.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 ie_s_nssai error"); Logger::nas_mm().error("Encoding %s error", S_NSSAI::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
if (!ie_dnn.has_value()) { if (!ie_dnn.has_value()) {
Logger::nas_mm().warn("IE ie_dnn is not available"); Logger::nas_mm().debug("IE %s is not available", DNN::GetIeName().c_str());
} else { } else {
size = ie_dnn.value().Encode(buf + encoded_size, len - encoded_size); size = ie_dnn.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 ie_dnn error"); Logger::nas_mm().error("Encoding %s error", DNN::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
if (!ie_additional_information.has_value()) { if (!ie_additional_information.has_value()) {
Logger::nas_mm().warn("IE ie_additional_information is not available"); Logger::nas_mm().debug(
"IE %s is not available", AdditionalInformation::GetIeName().c_str());
} else { } else {
size = ie_additional_information.value().Encode( size = ie_additional_information.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 ie_additional_information error"); Logger::nas_mm().error(
"Encoding %s error", AdditionalInformation::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
if (!ie_ma_pdu_session_information.has_value()) { if (!ie_ma_pdu_session_information.has_value()) {
Logger::nas_mm().warn("IE ie_ma_pdu_session_information is not available"); Logger::nas_mm().debug(
"IE %s is not available", MaPduSessionInformation::GetIeName().c_str());
} else { } else {
size = ie_ma_pdu_session_information.value().Encode( size = ie_ma_pdu_session_information.value().Encode(
buf + encoded_size, len - encoded_size); buf + encoded_size, len - encoded_size);
...@@ -290,23 +299,24 @@ int ULNASTransport::Encode(uint8_t* buf, int len) { ...@@ -290,23 +299,24 @@ int ULNASTransport::Encode(uint8_t* buf, int len) {
encoded_size += size; encoded_size += size;
} else { } else {
Logger::nas_mm().error( Logger::nas_mm().error(
"Encoding IE ie_ma_pdu_session_information error"); "Encoding %s error", MaPduSessionInformation::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
if (!ie_release_assistance_indication.has_value()) { if (!ie_release_assistance_indication.has_value()) {
Logger::nas_mm().warn( Logger::nas_mm().debug(
"IE ie_release_assistance_indication is not available"); "IE %s is not available",
ReleaseAssistanceIndication::GetIeName().c_str());
} else { } else {
size = ie_release_assistance_indication.value().Encode( size = ie_release_assistance_indication.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( Logger::nas_mm().error(
"Encoding IE ie_release_assistance_indication error"); "Encoding %s error",
ReleaseAssistanceIndication::GetIeName().c_str());
return KEncodeDecodeError; return KEncodeDecodeError;
} }
} }
...@@ -333,7 +343,11 @@ int ULNASTransport::Decode(uint8_t* buf, int len) { ...@@ -333,7 +343,11 @@ int ULNASTransport::Decode(uint8_t* buf, int len) {
// Payload Container Type // Payload Container Type
decoded_result = ie_payload_container_type.Decode( decoded_result = ie_payload_container_type.Decode(
buf + decoded_size, len - decoded_size, false); buf + decoded_size, len - decoded_size, false);
if (decoded_result == KEncodeDecodeError) return KEncodeDecodeError; if (decoded_result == KEncodeDecodeError) {
Logger::nas_mm().error(
"Decoding %s error", PayloadContainerType::GetIeName().c_str());
return KEncodeDecodeError;
}
decoded_size += decoded_result; decoded_size += decoded_result;
decoded_size++; // 1/2 octet for PayloadContainerType, 1/2 octet for spare decoded_size++; // 1/2 octet for PayloadContainerType, 1/2 octet for spare
...@@ -341,11 +355,18 @@ int ULNASTransport::Decode(uint8_t* buf, int len) { ...@@ -341,11 +355,18 @@ int ULNASTransport::Decode(uint8_t* buf, int len) {
decoded_result = ie_payload_container.Decode( decoded_result = ie_payload_container.Decode(
buf + decoded_size, len - decoded_size, false, buf + decoded_size, len - decoded_size, false,
ie_payload_container_type.GetValue()); ie_payload_container_type.GetValue());
if (decoded_result == KEncodeDecodeError) return KEncodeDecodeError; if (decoded_result == KEncodeDecodeError) {
Logger::nas_mm().error(
"Decoding %s error", Payload_Container::GetIeName().c_str());
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);
// Decode other IEs
uint8_t octet = 0x00;
DECODE_U8_VALUE(buf + decoded_size, octet);
Logger::nas_mm().debug("First option IEI (0x%x)", octet); Logger::nas_mm().debug("First option IEI (0x%x)", octet);
bool flag = false; bool flag = false;
...@@ -357,24 +378,25 @@ int ULNASTransport::Decode(uint8_t* buf, int len) { ...@@ -357,24 +378,25 @@ int ULNASTransport::Decode(uint8_t* buf, int len) {
if ((decoded_result = ie_request_type_tmp.Decode( if ((decoded_result = ie_request_type_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_request_type = std::optional<RequestType>(ie_request_type_tmp); ie_request_type = std::optional<RequestType>(ie_request_type_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 kIeiMaPduSessionInformation: { case kIeiMaPduSessionInformation: {
Logger::nas_mm().debug("Decoding IEI (0xA)"); Logger::nas_mm().debug(
"Decoding IEI 0x%x", kIeiMaPduSessionInformation);
MaPduSessionInformation ie_ma_pdu_session_information_tmp = {}; MaPduSessionInformation ie_ma_pdu_session_information_tmp = {};
if ((decoded_result = ie_ma_pdu_session_information_tmp.Decode( if ((decoded_result = ie_ma_pdu_session_information_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_ma_pdu_session_information = std::optional<MaPduSessionInformation>( ie_ma_pdu_session_information = std::optional<MaPduSessionInformation>(
ie_ma_pdu_session_information_tmp); ie_ma_pdu_session_information_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;
...@@ -385,12 +407,12 @@ int ULNASTransport::Decode(uint8_t* buf, int len) { ...@@ -385,12 +407,12 @@ int ULNASTransport::Decode(uint8_t* buf, int len) {
if ((decoded_result = ie_release_assistance_indication_tmp.Decode( if ((decoded_result = ie_release_assistance_indication_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_release_assistance_indication = ie_release_assistance_indication =
std::optional<ReleaseAssistanceIndication>( std::optional<ReleaseAssistanceIndication>(
ie_release_assistance_indication_tmp); ie_release_assistance_indication_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;
...@@ -402,29 +424,29 @@ int ULNASTransport::Decode(uint8_t* buf, int len) { ...@@ -402,29 +424,29 @@ int ULNASTransport::Decode(uint8_t* buf, int len) {
switch (octet) { switch (octet) {
case kIeiPduSessionId: { case kIeiPduSessionId: {
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiPduSessionId); Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiPduSessionId);
PduSessionIdentity2 ie_pdu_session_identity_2_tmp = {}; PduSessionIdentity2 ie_pdu_session_id_tmp = {};
if ((decoded_result = ie_pdu_session_identity_2_tmp.Decode( if ((decoded_result = ie_pdu_session_id_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_pdu_session_identity_2 = ie_pdu_session_id =
std::optional<PduSessionIdentity2>(ie_pdu_session_identity_2_tmp); std::optional<PduSessionIdentity2>(ie_pdu_session_id_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 kIeiOldPduSessionId: { case kIeiOldPduSessionId: {
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiOldPduSessionId); Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiOldPduSessionId);
PduSessionIdentity2 ie_old_pdu_session_identity_2_tmp = {}; PduSessionIdentity2 ie_old_pdu_session_id_tmp = {};
if ((decoded_result = ie_old_pdu_session_identity_2_tmp.Decode( if ((decoded_result = ie_old_pdu_session_id_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_old_pdu_session_identity_2 = std::optional<PduSessionIdentity2>( ie_old_pdu_session_id =
ie_old_pdu_session_identity_2_tmp); std::optional<PduSessionIdentity2>(ie_old_pdu_session_id_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;
...@@ -435,10 +457,10 @@ int ULNASTransport::Decode(uint8_t* buf, int len) { ...@@ -435,10 +457,10 @@ int ULNASTransport::Decode(uint8_t* buf, int len) {
if ((decoded_result = ie_s_nssai_tmp.Decode( if ((decoded_result = ie_s_nssai_tmp.Decode(
buf + decoded_size, len - decoded_size, kIeIsOptional)) == buf + decoded_size, len - decoded_size, kIeIsOptional)) ==
KEncodeDecodeError) KEncodeDecodeError)
return decoded_result; return KEncodeDecodeError;
decoded_size += decoded_result; decoded_size += decoded_result;
ie_s_nssai = std::optional<S_NSSAI>(ie_s_nssai_tmp); ie_s_nssai = std::optional<S_NSSAI>(ie_s_nssai_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;
...@@ -448,11 +470,10 @@ int ULNASTransport::Decode(uint8_t* buf, int len) { ...@@ -448,11 +470,10 @@ int ULNASTransport::Decode(uint8_t* buf, int len) {
if ((decoded_result = ie_dnn_tmp.Decode( if ((decoded_result = ie_dnn_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_dnn = std::optional<DNN>(ie_dnn_tmp); ie_dnn = std::optional<DNN>(ie_dnn_tmp);
DECODE_U8_VALUE(buf + decoded_size, octet);
octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
...@@ -462,11 +483,11 @@ int ULNASTransport::Decode(uint8_t* buf, int len) { ...@@ -462,11 +483,11 @@ int ULNASTransport::Decode(uint8_t* buf, int len) {
if ((decoded_result = ie_additional_information_tmp.Decode( if ((decoded_result = ie_additional_information_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_additional_information = ie_additional_information =
std::optional<AdditionalInformation>(ie_additional_information_tmp); std::optional<AdditionalInformation>(ie_additional_information_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;
...@@ -483,6 +504,6 @@ int ULNASTransport::Decode(uint8_t* buf, int len) { ...@@ -483,6 +504,6 @@ int ULNASTransport::Decode(uint8_t* buf, int len) {
} }
Logger::nas_mm().debug( Logger::nas_mm().debug(
"Decoded ULNASTransport message len(%d)", decoded_size); "Decoded ULNASTransport message len (%d)", decoded_size);
return decoded_size; return decoded_size;
} }
...@@ -37,43 +37,46 @@ class ULNASTransport : public NasMmPlainHeader { ...@@ -37,43 +37,46 @@ class ULNASTransport : public NasMmPlainHeader {
int Decode(uint8_t* buf, int len); int Decode(uint8_t* buf, int len);
void SetPayloadContainerType(uint8_t value); void SetPayloadContainerType(uint8_t value);
uint8_t GetPayloadContainerType(); uint8_t GetPayloadContainerType() const;
void SetPayloadContainer(std::vector<PayloadContainerEntry> content); void SetPayloadContainer(const std::vector<PayloadContainerEntry>& content);
void GetPayloadContainer(std::vector<PayloadContainerEntry>& content); void GetPayloadContainer(std::vector<PayloadContainerEntry>& content) const;
void GetPayloadContainer(bstring& content); void GetPayloadContainer(bstring& content) const;
void SetPduSessionIdentity2(uint8_t value); void SetPduSessionId(uint8_t value);
uint8_t GetPduSessionId(); bool GetPduSessionId(uint8_t& value) const;
void SetOldPduSessionIdentity2(uint8_t value); void SetOldPduSessionId(uint8_t value);
bool GetOldPduSessionId(uint8_t& value); bool GetOldPduSessionId(uint8_t& value) const;
void SetRequestType(uint8_t value); void SetRequestType(uint8_t value);
bool GetRequestType(uint8_t& value); bool GetRequestType(uint8_t& value) const;
void SetSNssai(SNSSAI_s snssai); void SetSNssai(const SNSSAI_s& snssai);
bool GetSNssai(SNSSAI_s& snssai); bool GetSNssai(SNSSAI_s& snssai) const;
void setDNN(bstring dnn); void SetDnn(const bstring& dnn);
bool getDnn(bstring& dnn); bool GetDnn(bstring& dnn) const;
void SetAdditionalInformation(const bstring& value); void SetAdditionalInformation(const bstring& value);
// TODO: Get
void SetMaPduSessionInformation(uint8_t value); void SetMaPduSessionInformation(uint8_t value);
// TODO: Get
void SetReleaseAssistanceIndication(uint8_t value); void SetReleaseAssistanceIndication(uint8_t value);
// TODO: Get
public: public:
PayloadContainerType ie_payload_container_type; // Mandatory PayloadContainerType ie_payload_container_type; // Mandatory
Payload_Container ie_payload_container; // Mandatory Payload_Container ie_payload_container; // Mandatory
std::optional<PduSessionIdentity2> ie_pdu_session_identity_2; // Optional std::optional<PduSessionIdentity2> ie_pdu_session_id; // Optional
std::optional<PduSessionIdentity2> ie_old_pdu_session_identity_2; // Optional std::optional<PduSessionIdentity2> ie_old_pdu_session_id; // Optional
std::optional<RequestType> ie_request_type; // Optional std::optional<RequestType> ie_request_type; // Optional
std::optional<S_NSSAI> ie_s_nssai; // Optional std::optional<S_NSSAI> ie_s_nssai; // Optional
std::optional<DNN> ie_dnn; // Optional std::optional<DNN> ie_dnn; // Optional
std::optional<AdditionalInformation> ie_additional_information; // Optional std::optional<AdditionalInformation> ie_additional_information; // Optional
std::optional<MaPduSessionInformation> std::optional<MaPduSessionInformation>
ie_ma_pdu_session_information; // Optional ie_ma_pdu_session_information; // Optional
std::optional<ReleaseAssistanceIndication> std::optional<ReleaseAssistanceIndication>
......
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