From 0ec220dcdad0f7434c4f61aeb50f5959fca94b54 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Sun, 5 Feb 2017 15:36:02 +0900 Subject: [PATCH] use pkbuf_t for s1ap_encoder buffer --- lib/asn/src/s1ap_decoder.c | 46 ++++++++++---------------------------- lib/asn/src/s1ap_encoder.c | 26 +++++++++++++++------ lib/asn/src/s1ap_message.h | 3 +-- 3 files changed, 32 insertions(+), 43 deletions(-) diff --git a/lib/asn/src/s1ap_decoder.c b/lib/asn/src/s1ap_decoder.c index 73cf677cc..903654af1 100644 --- a/lib/asn/src/s1ap_decoder.c +++ b/lib/asn/src/s1ap_decoder.c @@ -93,81 +93,67 @@ int s1ap_decode_pdu(s1ap_message *message, pkbuf_t *pkb) static int s1ap_decode_initiating(s1ap_message *message, S1ap_InitiatingMessage_t *initiating_p) { - int ret; + int ret = -1; d_assert(initiating_p, return -1, "Null param"); switch (initiating_p->procedureCode) { case S1ap_ProcedureCode_id_uplinkNASTransport: - { ret = s1ap_decode_s1ap_uplinknastransport_ies( &message->msg.s1ap_UplinkNASTransport_IEs, &initiating_p->value); s1ap_xer_print_message(s1ap_xer_print_s1ap_uplinknastransport, s1ap_xer__print2sp, message); - } - break; + break; case S1ap_ProcedureCode_id_S1Setup: - { ret = s1ap_decode_s1ap_s1setuprequesties( &message->msg.s1ap_S1SetupRequestIEs, &initiating_p->value); s1ap_xer_print_message(s1ap_xer_print_s1ap_s1setuprequest, s1ap_xer__print2sp, message); - } - break; + break; case S1ap_ProcedureCode_id_initialUEMessage: - { ret = s1ap_decode_s1ap_initialuemessage_ies( &message->msg.s1ap_InitialUEMessage_IEs, &initiating_p->value); s1ap_xer_print_message(s1ap_xer_print_s1ap_initialuemessage, s1ap_xer__print2sp, message); - } - break; + break; case S1ap_ProcedureCode_id_UEContextReleaseRequest: - { ret = s1ap_decode_s1ap_uecontextreleaserequest_ies( &message->msg.s1ap_UEContextReleaseRequest_IEs, &initiating_p->value); s1ap_xer_print_message(s1ap_xer_print_s1ap_uecontextreleaserequest, s1ap_xer__print2sp, message); - } - break; + break; case S1ap_ProcedureCode_id_UECapabilityInfoIndication: - { ret = s1ap_decode_s1ap_uecapabilityinfoindicationies( &message->msg.s1ap_UECapabilityInfoIndicationIEs, &initiating_p->value); s1ap_xer_print_message( s1ap_xer_print_s1ap_uecapabilityinfoindication, s1ap_xer__print2sp, message); - } - break; + break; case S1ap_ProcedureCode_id_NASNonDeliveryIndication: - { ret = s1ap_decode_s1ap_nasnondeliveryindication_ies( &message->msg.s1ap_NASNonDeliveryIndication_IEs, &initiating_p->value); s1ap_xer_print_message(s1ap_xer_print_s1ap_nasnondeliveryindication, s1ap_xer__print2sp, message); - } - break; + break; default: - { d_error("Unknown procedure ID (%d) for initiating message", (int)initiating_p->procedureCode); d_assert(0, return -1, "Unknown procedure ID (%d) for initiating message", (int)initiating_p->procedureCode); - } - break; + break; } return ret; @@ -183,26 +169,22 @@ static int s1ap_decode_successfull_outcome(s1ap_message *message, switch (successfullOutcome_p->procedureCode) { case S1ap_ProcedureCode_id_InitialContextSetup: - { ret = s1ap_decode_s1ap_initialcontextsetupresponseies( &message->msg.s1ap_InitialContextSetupResponseIEs, &successfullOutcome_p->value); s1ap_xer_print_message( s1ap_xer_print_s1ap_initialcontextsetupresponse, s1ap_xer__print2sp, message); - } - break; + break; case S1ap_ProcedureCode_id_UEContextRelease: - { ret = s1ap_decode_s1ap_uecontextreleasecomplete_ies( &message->msg.s1ap_UEContextReleaseComplete_IEs, &successfullOutcome_p->value); s1ap_xer_print_message( s1ap_xer_print_s1ap_uecontextreleasecomplete, s1ap_xer__print2sp, message); - } - break; + break; default: d_error("Unknown procedure ID (%ld) for successfull " @@ -223,23 +205,19 @@ static int s1ap_decode_unsuccessfull_outcome(s1ap_message *message, switch (unSuccessfulOutcome_p->procedureCode) { case S1ap_ProcedureCode_id_InitialContextSetup: - { ret = s1ap_decode_s1ap_initialcontextsetupfailureies( &message->msg.s1ap_InitialContextSetupFailureIEs, &unSuccessfulOutcome_p->value); s1ap_xer_print_message( s1ap_xer_print_s1ap_initialcontextsetupfailure, s1ap_xer__print2sp, message); - } - break; + break; default: - { d_error("Unknown procedure ID (%d) for " "unsuccessfull outcome message", (int)unSuccessfulOutcome_p->procedureCode); - } - break; + break; } return ret; diff --git a/lib/asn/src/s1ap_encoder.c b/lib/asn/src/s1ap_encoder.c index f57fb2a12..abe7b08a3 100644 --- a/lib/asn/src/s1ap_encoder.c +++ b/lib/asn/src/s1ap_encoder.c @@ -39,22 +39,27 @@ static inline int s1ap_encode_successfull_outcome( static inline int s1ap_encode_unsuccessfull_outcome( s1ap_message *message_p, uint8_t **buffer, uint32_t *length); -int s1ap_encode_pdu(s1ap_message *message_p, uint8_t **buffer, uint32_t *length) +int s1ap_encode_pdu(pkbuf_t **pkb, s1ap_message *message_p) { + int ret = -1; + uint8_t **buffer = 0; + uint32_t *length = 0; + d_assert (message_p, return -1, "Null param"); - d_assert (buffer, return -1, "Null param"); - d_assert (length, return -1, "Null param"); switch (message_p->direction) { case S1AP_PDU_PR_initiatingMessage: - return s1ap_encode_initiating(message_p, buffer, length); + ret = s1ap_encode_initiating(message_p, buffer, length); + break; case S1AP_PDU_PR_successfulOutcome: - return s1ap_encode_successfull_outcome(message_p, buffer, length); + ret = s1ap_encode_successfull_outcome(message_p, buffer, length); + break; case S1AP_PDU_PR_unsuccessfulOutcome: - return s1ap_encode_unsuccessfull_outcome(message_p, buffer, length); + ret = s1ap_encode_unsuccessfull_outcome(message_p, buffer, length); + break; default: d_warn("Unknown message outcome (%d) or not implemented", @@ -62,7 +67,14 @@ int s1ap_encode_pdu(s1ap_message *message_p, uint8_t **buffer, uint32_t *length) break; } - return -1; + if (ret >= 0) + { + *pkb = pkbuf_alloc(0, *length); + d_assert(*pkb, return -1, "Null Param"); + memcpy((*pkb)->payload, *buffer, *length); + } + + return ret; } ssize_t s1ap_generate_initiating_message(uint8_t **buffer, uint32_t *length, diff --git a/lib/asn/src/s1ap_message.h b/lib/asn/src/s1ap_message.h index a9b216bf3..d1faee5b5 100644 --- a/lib/asn/src/s1ap_message.h +++ b/lib/asn/src/s1ap_message.h @@ -12,8 +12,7 @@ extern "C" { CORE_DECLARE(int) s1ap_decode_pdu(s1ap_message *message, pkbuf_t *pkbuf); -CORE_DECLARE(int) s1ap_encode_pdu(s1ap_message *message, - uint8_t **buffer, uint32_t *len); +CORE_DECLARE(int) s1ap_encode_pdu(pkbuf_t **pkbuf, s1ap_message *message); #ifdef __cplusplus }