Commit 97521d21 authored by Guido Casati's avatar Guido Casati

Refactor mm_msg_encode

parent 3e27e53f
...@@ -50,67 +50,55 @@ int _nas_mm_msg_encode_header(const fgmm_msg_header_t *header, uint8_t *buffer, ...@@ -50,67 +50,55 @@ int _nas_mm_msg_encode_header(const fgmm_msg_header_t *header, uint8_t *buffer,
int mm_msg_encode(const fgmm_nas_message_plain_t *p, uint8_t *buffer, uint32_t len) int mm_msg_encode(const fgmm_nas_message_plain_t *p, uint8_t *buffer, uint32_t len)
{ {
LOG_FUNC_IN;
int header_result;
int encode_result;
uint8_t msg_type = p->header.message_type; uint8_t msg_type = p->header.message_type;
int enc_msg = 0;
/* First encode the 5GMM message header */ /* First encode the 5GMM message header */
header_result = _nas_mm_msg_encode_header(&p->header, buffer, len); int enc_header = _nas_mm_msg_encode_header(&p->header, buffer, len);
if (header_result < 0) { if (enc_header < 0) {
LOG_TRACE(ERROR, PRINT_NAS_ERROR("Failed to encode 5GMM message header\n");
"Failed to encode 5GMM message header" return enc_header;
"(%d)",
header_result);
LOG_FUNC_RETURN(header_result);
} }
buffer += header_result; buffer += enc_header;
len -= header_result; len -= enc_header;
switch (msg_type) { switch (msg_type) {
case FGS_REGISTRATION_REQUEST: case FGS_REGISTRATION_REQUEST:
encode_result = encode_registration_request(&p->mm_msg.registration_request, buffer, len); enc_msg = encode_registration_request(&p->mm_msg.registration_request, buffer, len);
break; break;
case FGS_IDENTITY_RESPONSE: case FGS_IDENTITY_RESPONSE:
encode_result = encode_fgmm_identity_response(buffer, &p->mm_msg.fgs_identity_response, len); enc_msg = encode_fgmm_identity_response(buffer, &p->mm_msg.fgs_identity_response, len);
break; break;
case FGS_AUTHENTICATION_RESPONSE: case FGS_AUTHENTICATION_RESPONSE:
encode_result = encode_fgs_authentication_response(&p->mm_msg.fgs_auth_response, buffer, len); enc_msg = encode_fgs_authentication_response(&p->mm_msg.fgs_auth_response, buffer, len);
break; break;
case FGS_SECURITY_MODE_COMPLETE: case FGS_SECURITY_MODE_COMPLETE:
encode_result = encode_fgs_security_mode_complete(&p->mm_msg.fgs_security_mode_complete, buffer, len); enc_msg = encode_fgs_security_mode_complete(&p->mm_msg.fgs_security_mode_complete, buffer, len);
break; break;
case FGS_UPLINK_NAS_TRANSPORT: case FGS_UPLINK_NAS_TRANSPORT:
encode_result = encode_fgs_uplink_nas_transport(&p->mm_msg.uplink_nas_transport, buffer, len); enc_msg = encode_fgs_uplink_nas_transport(&p->mm_msg.uplink_nas_transport, buffer, len);
break; break;
case FGS_DEREGISTRATION_REQUEST_UE_ORIGINATING: case FGS_DEREGISTRATION_REQUEST_UE_ORIGINATING:
encode_result = enc_msg =
encode_fgs_deregistration_request_ue_originating(&p->mm_msg.fgs_deregistration_request_ue_originating, buffer, len); encode_fgs_deregistration_request_ue_originating(&p->mm_msg.fgs_deregistration_request_ue_originating, buffer, len);
break; break;
case FGS_SERVICE_REQUEST: case FGS_SERVICE_REQUEST:
encode_result = encode_fgs_service_request(buffer, &p->mm_msg.service_request, len); enc_msg = encode_fgs_service_request(buffer, &p->mm_msg.service_request, len);
break; break;
default: default:
LOG_TRACE(ERROR, " Unexpected message type: 0x%x", p->header.message_type); LOG_TRACE(ERROR, " Unexpected message type: 0x%x", p->header.message_type);
encode_result = TLV_ENCODE_WRONG_MESSAGE_TYPE; enc_msg = TLV_ENCODE_WRONG_MESSAGE_TYPE;
break; break;
/* TODO: Handle not standard layer 3 messages: SERVICE_REQUEST */ /* TODO: Handle not standard layer 3 messages: SERVICE_REQUEST */
} }
if (encode_result < 0) { if (enc_msg < 0) {
LOG_TRACE(ERROR, PRINT_NAS_ERROR("Failed to encode 5GMM message\n");
" Failed to encode L3 EMM message 0x%x " return enc_msg;
"(%d)",
p->header.message_type,
encode_result);
} }
if (encode_result < 0) return enc_header + enc_msg;
LOG_FUNC_RETURN(encode_result);
LOG_FUNC_RETURN(header_result + encode_result);
} }
int nas_protected_security_header_encode(uint8_t *buffer, const fgs_nas_message_security_header_t *header, int length) int nas_protected_security_header_encode(uint8_t *buffer, const fgs_nas_message_security_header_t *header, int length)
......
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