s1ap_free_pdu() is added

This commit is contained in:
Sukchan Lee 2017-02-09 23:15:08 +09:00
parent fc48bcde95
commit fa7b4fef58
7 changed files with 254 additions and 14 deletions

View File

@ -8,7 +8,7 @@ libasn_la_SOURCES = \
s1ap_ies_defs.h s1ap_codecs.h
nodist_libasn_la_SOURCES = \
s1ap_encoder.c s1ap_decoder.c \
s1ap_encoder.c s1ap_decoder.c s1ap_free.c \
s1ap_ies_encoder.c s1ap_ies_decoder.c s1ap_ies_free.c s1ap_ies_xer_print.c
libasn_la_DEPENDENCIES = \

View File

@ -11,8 +11,8 @@ extern "C" {
#define S1AP_SDU_SIZE 2048
CORE_DECLARE(int) s1ap_decode_pdu(s1ap_message *message, pkbuf_t *pkbuf);
CORE_DECLARE(int) s1ap_encode_pdu(pkbuf_t **pkbuf, s1ap_message *message);
CORE_DECLARE(int) s1ap_free_pdu(s1ap_message *message);
#ifdef __cplusplus
}

View File

@ -74,6 +74,7 @@ static int s1ap_decode_initiating(s1ap_message *message,
d_assert(initiating_p, return -1, "Null param");
message->procedureCode = initiating_p->procedureCode;
switch (initiating_p->procedureCode)
{
case S1ap_ProcedureCode_id_uplinkNASTransport:
@ -143,6 +144,7 @@ static int s1ap_decode_successfull_outcome(s1ap_message *message,
d_assert(successfullOutcome_p, return -1, "Null param");
message->procedureCode = successfullOutcome_p->procedureCode;
switch (successfullOutcome_p->procedureCode)
{
case S1ap_ProcedureCode_id_InitialContextSetup:
@ -179,6 +181,7 @@ static int s1ap_decode_unsuccessfull_outcome(s1ap_message *message,
d_assert(unSuccessfulOutcome_p, return -1, "Null param");
message->procedureCode = unSuccessfulOutcome_p->procedureCode;
switch (unSuccessfulOutcome_p->procedureCode)
{
case S1ap_ProcedureCode_id_InitialContextSetup:

View File

@ -20,7 +20,7 @@ static inline int s1ap_encode_s1setup_failure(
s1ap_message *message_p, pkbuf_t *pkbuf);
static inline int s1ap_encode_downlink_nas_transport(
s1ap_message *message_p, pkbuf_t *pkbuf);
static inline int s1ap_encode_ue_context_release_command (
static inline int s1ap_encode_ue_context_release_command(
s1ap_message *message_p, pkbuf_t *pkbuf);
int s1ap_encode_pdu(pkbuf_t **pkb, s1ap_message *message_p)

242
lib/asn/src/s1ap_free.c Normal file
View File

@ -0,0 +1,242 @@
#define TRACE_MODULE _s1free
#include "core_debug.h"
#include "s1ap_codecs.h"
static inline int s1ap_free_initiating_message(s1ap_message *message_p);
static inline int s1ap_free_successfull_outcome(s1ap_message *message_p);
static inline int s1ap_free_unsuccessfull_outcome(s1ap_message *message_p);
static inline void s1ap_free_s1setup_request(s1ap_message *message_p);
static inline void s1ap_free_s1setup_response(s1ap_message *message_p);
static inline void s1ap_free_s1setup_failure(s1ap_message *message_p);
static inline void s1ap_free_initialuemessage_ies(s1ap_message *message_p);
static inline void s1ap_free_uecapabilityinfoindicationies(
s1ap_message *message_p);
static inline void s1ap_free_initial_context_setup_request(
s1ap_message *message_p);
static inline void s1ap_free_initialcontextsetupresponseies(
s1ap_message *message_p);
static inline void s1ap_free_initialcontextsetupfailureies(
s1ap_message *message_p);
static inline void s1ap_free_downlink_nas_transport(s1ap_message *message_p);
static inline void s1ap_free_uplinknastransport_ies(s1ap_message *message_p);
static inline void s1ap_free_nasnondeliveryindication_ies(
s1ap_message *message_p);
static inline void s1ap_free_ue_context_release_command(
s1ap_message *message_p);
static inline void s1ap_free_uecontextreleasecomplete_ies(
s1ap_message *message_p);
static inline void s1ap_free_uecontextreleaserequest_ies(
s1ap_message *message_p);
int s1ap_free_pdu(s1ap_message *message_p)
{
d_assert (message_p, return -1, "Null param");
switch (message_p->direction)
{
case S1AP_PDU_PR_initiatingMessage:
return s1ap_free_initiating_message(message_p);
case S1AP_PDU_PR_successfulOutcome:
return s1ap_free_successfull_outcome(message_p);
case S1AP_PDU_PR_unsuccessfulOutcome:
return s1ap_free_unsuccessfull_outcome(message_p);
default:
d_warn("Unknown message outcome (%d) or not implemented",
(int)message_p->direction);
break;
}
return -1;
}
static inline int s1ap_free_initiating_message(s1ap_message *message_p)
{
switch (message_p->procedureCode)
{
case S1ap_ProcedureCode_id_S1Setup:
s1ap_free_s1setup_request(message_p);
break;
case S1ap_ProcedureCode_id_initialUEMessage:
s1ap_free_initialuemessage_ies(message_p);
break;
case S1ap_ProcedureCode_id_UECapabilityInfoIndication:
s1ap_free_uecapabilityinfoindicationies(message_p);
break;
case S1ap_ProcedureCode_id_InitialContextSetup:
s1ap_free_initial_context_setup_request(message_p);
break;
case S1ap_ProcedureCode_id_downlinkNASTransport:
s1ap_free_downlink_nas_transport(message_p);
break;
case S1ap_ProcedureCode_id_uplinkNASTransport:
s1ap_free_uplinknastransport_ies(message_p);
break;
case S1ap_ProcedureCode_id_NASNonDeliveryIndication:
s1ap_free_nasnondeliveryindication_ies(message_p);
break;
case S1ap_ProcedureCode_id_UEContextRelease:
s1ap_free_ue_context_release_command(message_p);
break;
case S1ap_ProcedureCode_id_UEContextReleaseRequest:
s1ap_free_uecontextreleaserequest_ies(message_p);
break;
default:
d_warn("Unknown procedure ID (%d) for initiating message_p\n",
(int)message_p->procedureCode);
return -1;
}
return 0;
}
static inline int s1ap_free_successfull_outcome(s1ap_message *message_p)
{
switch (message_p->procedureCode)
{
case S1ap_ProcedureCode_id_S1Setup:
s1ap_free_s1setup_response(message_p);
break;
case S1ap_ProcedureCode_id_InitialContextSetup:
s1ap_free_initialcontextsetupresponseies(message_p);
break;
case S1ap_ProcedureCode_id_UEContextRelease:
s1ap_free_uecontextreleasecomplete_ies(message_p);
break;
default:
d_warn("Unknown procedure ID (%d) for successfull "
"outcome message\n", (int)message_p->procedureCode);
return -1;
}
return 0;
}
static inline int s1ap_free_unsuccessfull_outcome(s1ap_message *message_p)
{
switch (message_p->procedureCode)
{
case S1ap_ProcedureCode_id_S1Setup:
s1ap_free_s1setup_failure(message_p);
break;
case S1ap_ProcedureCode_id_InitialContextSetup:
s1ap_free_initialcontextsetupfailureies(message_p);
break;
default:
d_warn("Unknown procedure ID (%d) for unsuccessfull "
"outcome message\n", (int)message_p->procedureCode);
return -1;
}
return 0;
}
static inline void s1ap_free_s1setup_request(s1ap_message *message_p)
{
s1ap_free_s1ap_s1setuprequesties(&message_p->msg.s1ap_S1SetupRequestIEs);
}
static inline void s1ap_free_s1setup_response(s1ap_message *message_p)
{
s1ap_free_s1ap_s1setupresponseies(
&message_p->msg.s1ap_S1SetupResponseIEs);
}
static inline void s1ap_free_s1setup_failure(s1ap_message *message_p)
{
s1ap_free_s1ap_s1setupfailureies(&message_p->msg.s1ap_S1SetupFailureIEs);
}
static inline void s1ap_free_initialuemessage_ies(s1ap_message *message_p)
{
s1ap_free_s1ap_initialuemessage_ies(
&message_p->msg.s1ap_InitialUEMessage_IEs);
}
static inline void s1ap_free_initial_context_setup_request(
s1ap_message *message_p)
{
s1ap_free_s1ap_initialcontextsetuprequesties(
&message_p->msg.s1ap_InitialContextSetupRequestIEs);
}
static inline void s1ap_free_initialcontextsetupresponseies(
s1ap_message *message_p)
{
s1ap_free_s1ap_initialcontextsetupresponseies(
&message_p->msg.s1ap_InitialContextSetupResponseIEs);
}
static inline void s1ap_free_initialcontextsetupfailureies(
s1ap_message *message_p)
{
s1ap_free_s1ap_initialcontextsetupfailureies(
&message_p->msg.s1ap_InitialContextSetupFailureIEs);
}
static inline void s1ap_free_downlink_nas_transport(s1ap_message *message_p)
{
s1ap_free_s1ap_downlinknastransport_ies(
&message_p->msg.s1ap_DownlinkNASTransport_IEs);
}
static inline void s1ap_free_uplinknastransport_ies(s1ap_message *message_p)
{
s1ap_free_s1ap_uplinknastransport_ies(
&message_p->msg.s1ap_UplinkNASTransport_IEs);
}
static inline void s1ap_free_ue_context_release_command(
s1ap_message *message_p)
{
s1ap_free_s1ap_uecontextreleasecommand_ies(
&message_p->msg.s1ap_UEContextReleaseCommand_IEs);
}
static inline void s1ap_free_uecontextreleaserequest_ies(
s1ap_message *message_p)
{
s1ap_free_s1ap_uecontextreleaserequest_ies(
&message_p->msg.s1ap_UEContextReleaseRequest_IEs);
}
static inline void s1ap_free_uecapabilityinfoindicationies(
s1ap_message *message_p)
{
s1ap_free_s1ap_uecapabilityinfoindicationies(
&message_p->msg.s1ap_UECapabilityInfoIndicationIEs);
}
static inline void s1ap_free_nasnondeliveryindication_ies(
s1ap_message *message_p)
{
s1ap_free_s1ap_nasnondeliveryindication_ies(
&message_p->msg.s1ap_NASNonDeliveryIndication_IEs);
}
static inline void s1ap_free_uecontextreleasecomplete_ies(
s1ap_message *message_p)
{
s1ap_free_s1ap_uecontextreleasecomplete_ies(
&message_p->msg.s1ap_UEContextReleaseComplete_IEs);
}

View File

@ -67,8 +67,7 @@ status_t s1ap_build_setup_rsp(pkbuf_t **pkbuf)
message.direction = S1AP_PDU_PR_successfulOutcome;
erval = s1ap_encode_pdu(pkbuf, &message);
s1ap_free_s1ap_s1setupresponseies(ies);
s1ap_free_pdu(&message);
if (erval < 0)
{

View File

@ -26,9 +26,8 @@ static void s1ap_test1(abts_case *tc, void *data)
result = s1ap_decode_pdu(&message, pkbuf);
ABTS_INT_EQUAL(tc, 0, result);
s1ap_free_pdu(&message);
s1ap_free_s1ap_s1setuprequesties(&message.msg.s1ap_S1SetupRequestIEs);
pkbuf_free(pkbuf);
}
@ -50,8 +49,7 @@ static void s1ap_test2(abts_case *tc, void *data)
result = s1ap_decode_pdu(&message, pkbuf);
ABTS_INT_EQUAL(tc, 0, result);
s1ap_free_s1ap_initialuemessage_ies(&message.msg.s1ap_InitialUEMessage_IEs);
s1ap_free_pdu(&message);
pkbuf_free(pkbuf);
}
@ -74,8 +72,7 @@ static void s1ap_test3(abts_case *tc, void *data)
result = s1ap_decode_pdu(&message, pkbuf);
ABTS_INT_EQUAL(tc, 0, result);
s1ap_free_s1ap_initialcontextsetupresponseies(&message.msg.s1ap_InitialContextSetupResponseIEs);
s1ap_free_pdu(&message);
pkbuf_free(pkbuf);
}
@ -137,10 +134,9 @@ static void s1ap_test5(abts_case *tc, void *data)
message.criticality = S1ap_Criticality_reject;
erval = s1ap_encode_pdu(&pkbuf, &message);
s1ap_free_s1ap_s1setuprequesties(s1SetupRequestIEs);
ABTS_INT_EQUAL(tc, 280, erval);
s1ap_free_pdu(&message);
}
abts_suite *test_s1ap(abts_suite *suite)