From 7c28ae7360e846c035db6f906d5f45d570ca0d62 Mon Sep 17 00:00:00 2001 From: gauthier <lionel.gauthier@eurecom.fr> Date: Fri, 13 Nov 2015 16:54:17 +0100 Subject: [PATCH] Still ASN1 display bug --- openair3/TEST/EPC_TEST/play_scenario.c | 144 +++++++++++++++---------- 1 file changed, 86 insertions(+), 58 deletions(-) diff --git a/openair3/TEST/EPC_TEST/play_scenario.c b/openair3/TEST/EPC_TEST/play_scenario.c index a32947c439..982c1ffb40 100644 --- a/openair3/TEST/EPC_TEST/play_scenario.c +++ b/openair3/TEST/EPC_TEST/play_scenario.c @@ -60,6 +60,7 @@ #include <libxslt/transform.h> #include <libxslt/xsltutils.h> +#include "intertask_interface_init.h" #include "assertions.h" #include "play_scenario.h" //#include "s1ap_eNB.h" @@ -470,7 +471,7 @@ int hex2data(unsigned char * const data, const unsigned char * const hexstring, char buf[5] = {'0', 'x', pos[0], pos[1], 0}; data[count] = strtol(buf, &endptr, 16); pos += 2 * sizeof(char); - AssertFatal (endptr[0] == '\0', "ERROR %s() non-hexadecimal character encountered buf %p endptr %p buf %s count %d pos %p\n", __FUNCTION__, buf, endptr, buf, count, pos); + AssertFatal (endptr[0] == '\0', "ERROR %s() non-hexadecimal character encountered buf %p endptr %p buf %s count %zu pos %p\n", __FUNCTION__, buf, endptr, buf, count, pos); AssertFatal (endptr != buf, "ERROR %s() No digits were found\n", __FUNCTION__); } return 0; @@ -553,10 +554,13 @@ void ip_str2test_ip(const xmlChar * const ip_str, test_ip_t * const ip) int test_s1ap_decode_initiating_message(s1ap_message *message, S1ap_InitiatingMessage_t *initiating_p) { + char *message_string = NULL; int ret = -1; DevAssert(initiating_p != NULL); + message_string = calloc(20000, sizeof(char)); + AssertFatal (NULL != message_string, "ERROR malloc()failed!\n"); message->procedureCode = initiating_p->procedureCode; message->criticality = initiating_p->criticality; @@ -565,58 +569,65 @@ int test_s1ap_decode_initiating_message(s1ap_message *message, ret = s1ap_decode_s1ap_downlinknastransporties( &message->msg.s1ap_DownlinkNASTransportIEs, &initiating_p->value); + s1ap_xer_print_s1ap_downlinknastransport(s1ap_xer__print2sp, message_string, message); break; case S1ap_ProcedureCode_id_InitialContextSetup: ret = s1ap_decode_s1ap_initialcontextsetuprequesties( &message->msg.s1ap_InitialContextSetupRequestIEs, &initiating_p->value); + s1ap_xer_print_s1ap_initialcontextsetuprequest(s1ap_xer__print2sp, message_string, message); break; case S1ap_ProcedureCode_id_UEContextRelease: ret = s1ap_decode_s1ap_uecontextreleasecommandies( &message->msg.s1ap_UEContextReleaseCommandIEs, &initiating_p->value); + s1ap_xer_print_s1ap_uecontextreleasecommand(s1ap_xer__print2sp, message_string, message); break; case S1ap_ProcedureCode_id_Paging: ret = s1ap_decode_s1ap_pagingies( &message->msg.s1ap_PagingIEs, &initiating_p->value); + s1ap_xer_print_s1ap_paging(s1ap_xer__print2sp, message_string, message); break; - case S1ap_ProcedureCode_id_uplinkNASTransport: { - ret = s1ap_decode_s1ap_uplinknastransporties (&message->msg.s1ap_UplinkNASTransportIEs, &initiating_p->value); - } + case S1ap_ProcedureCode_id_uplinkNASTransport: + ret = s1ap_decode_s1ap_uplinknastransporties (&message->msg.s1ap_UplinkNASTransportIEs, &initiating_p->value); + s1ap_xer_print_s1ap_uplinknastransport(s1ap_xer__print2sp, message_string, message); break; - case S1ap_ProcedureCode_id_S1Setup: { - ret = s1ap_decode_s1ap_s1setuprequesties (&message->msg.s1ap_S1SetupRequestIEs, &initiating_p->value); - } + case S1ap_ProcedureCode_id_S1Setup: + ret = s1ap_decode_s1ap_s1setuprequesties (&message->msg.s1ap_S1SetupRequestIEs, &initiating_p->value); + s1ap_xer_print_s1ap_s1setuprequest(s1ap_xer__print2sp, message_string, message); break; - case S1ap_ProcedureCode_id_initialUEMessage: { - ret = s1ap_decode_s1ap_initialuemessageies (&message->msg.s1ap_InitialUEMessageIEs, &initiating_p->value); - } + case S1ap_ProcedureCode_id_initialUEMessage: + ret = s1ap_decode_s1ap_initialuemessageies (&message->msg.s1ap_InitialUEMessageIEs, &initiating_p->value); + s1ap_xer_print_s1ap_initialuemessage(s1ap_xer__print2sp, message_string, message); break; - case S1ap_ProcedureCode_id_UEContextReleaseRequest: { - ret = s1ap_decode_s1ap_uecontextreleaserequesties (&message->msg.s1ap_UEContextReleaseRequestIEs, &initiating_p->value); - } + case S1ap_ProcedureCode_id_UEContextReleaseRequest: + ret = s1ap_decode_s1ap_uecontextreleaserequesties (&message->msg.s1ap_UEContextReleaseRequestIEs, &initiating_p->value); + s1ap_xer_print_s1ap_uecontextreleaserequest(s1ap_xer__print2sp, message_string, message); break; - case S1ap_ProcedureCode_id_UECapabilityInfoIndication: { - ret = s1ap_decode_s1ap_uecapabilityinfoindicationies (&message->msg.s1ap_UECapabilityInfoIndicationIEs, &initiating_p->value); - } + case S1ap_ProcedureCode_id_UECapabilityInfoIndication: + ret = s1ap_decode_s1ap_uecapabilityinfoindicationies (&message->msg.s1ap_UECapabilityInfoIndicationIEs, &initiating_p->value); + //s1ap_xer_print_s1ap_uecapabilityinfoindication(s1ap_xer__print2sp, message_string, message); break; - case S1ap_ProcedureCode_id_NASNonDeliveryIndication: { - ret = s1ap_decode_s1ap_nasnondeliveryindication_ies (&message->msg.s1ap_NASNonDeliveryIndication_IEs, &initiating_p->value); - } + case S1ap_ProcedureCode_id_NASNonDeliveryIndication: + ret = s1ap_decode_s1ap_nasnondeliveryindication_ies (&message->msg.s1ap_NASNonDeliveryIndication_IEs, &initiating_p->value); + s1ap_xer_print_s1ap_nasnondeliveryindication_(s1ap_xer__print2sp, message_string, message); break; default: + free(message_string); AssertFatal( 0 , "Unknown procedure ID (%d) for initiating message\n", (int)initiating_p->procedureCode); return -1; } + fprintf(stdout, "s1ap_xer_print:\n%s\n", message_string); + free(message_string); return ret; } @@ -624,9 +635,12 @@ int test_s1ap_decode_initiating_message(s1ap_message *message, int test_s1ap_decode_successful_outcome(s1ap_message *message, S1ap_SuccessfulOutcome_t *successfullOutcome_p) { - int ret = -1; + char *message_string = NULL; + int ret = -1; DevAssert(successfullOutcome_p != NULL); + message_string = calloc(20000, sizeof(char)); + AssertFatal (NULL != message_string, "ERROR malloc()failed!\n"); message->procedureCode = successfullOutcome_p->procedureCode; message->criticality = successfullOutcome_p->criticality; @@ -635,23 +649,27 @@ int test_s1ap_decode_successful_outcome(s1ap_message *message, case S1ap_ProcedureCode_id_S1Setup: ret = s1ap_decode_s1ap_s1setupresponseies( &message->msg.s1ap_S1SetupResponseIEs, &successfullOutcome_p->value); + s1ap_xer_print_s1ap_s1setupresponse(s1ap_xer__print2sp, message_string, message); break; - case S1ap_ProcedureCode_id_InitialContextSetup: { - ret = s1ap_decode_s1ap_initialcontextsetupresponseies (&message->msg.s1ap_InitialContextSetupResponseIEs, &successfullOutcome_p->value); - } + case S1ap_ProcedureCode_id_InitialContextSetup: + ret = s1ap_decode_s1ap_initialcontextsetupresponseies (&message->msg.s1ap_InitialContextSetupResponseIEs, &successfullOutcome_p->value); + s1ap_xer_print_s1ap_initialcontextsetupresponse(s1ap_xer__print2sp, message_string, message); break; - case S1ap_ProcedureCode_id_UEContextRelease: { + case S1ap_ProcedureCode_id_UEContextRelease: ret = s1ap_decode_s1ap_uecontextreleasecompleteies (&message->msg.s1ap_UEContextReleaseCompleteIEs, &successfullOutcome_p->value); - } + s1ap_xer_print_s1ap_uecontextreleasecomplete(s1ap_xer__print2sp, message_string, message); break; default: + free(message_string); AssertFatal(0, "Unknown procedure ID (%d) for successfull outcome message\n", (int)successfullOutcome_p->procedureCode); return -1; } + fprintf(stdout, "s1ap_xer_print:\n%s\n", message_string); + free(message_string); return ret; } @@ -659,29 +677,37 @@ int test_s1ap_decode_successful_outcome(s1ap_message *message, int test_s1ap_decode_unsuccessful_outcome(s1ap_message *message, S1ap_UnsuccessfulOutcome_t *unSuccessfullOutcome_p) { + char *message_string = NULL; int ret = -1; + DevAssert(unSuccessfullOutcome_p != NULL); + message_string = calloc(20000, sizeof(char)); + AssertFatal (NULL != message_string, "ERROR malloc()failed!\n"); message->procedureCode = unSuccessfullOutcome_p->procedureCode; message->criticality = unSuccessfullOutcome_p->criticality; switch(unSuccessfullOutcome_p->procedureCode) { case S1ap_ProcedureCode_id_S1Setup: - return s1ap_decode_s1ap_s1setupfailureies( + ret = s1ap_decode_s1ap_s1setupfailureies( &message->msg.s1ap_S1SetupFailureIEs, &unSuccessfullOutcome_p->value); + s1ap_xer_print_s1ap_s1setupfailure(s1ap_xer__print2sp, message_string, message); + break; - case S1ap_ProcedureCode_id_InitialContextSetup: { - ret = s1ap_decode_s1ap_initialcontextsetupfailureies (&message->msg.s1ap_InitialContextSetupFailureIEs, &unSuccessfullOutcome_p->value); - } + case S1ap_ProcedureCode_id_InitialContextSetup: + ret = s1ap_decode_s1ap_initialcontextsetupfailureies (&message->msg.s1ap_InitialContextSetupFailureIEs, &unSuccessfullOutcome_p->value); + s1ap_xer_print_s1ap_initialcontextsetupfailure(s1ap_xer__print2sp, message_string, message); break; default: + free(message_string); AssertFatal(0,"Unknown procedure ID (%d) for unsuccessfull outcome message\n", (int)unSuccessfullOutcome_p->procedureCode); break; } - + fprintf(stdout, "s1ap_xer_print:\n%s\n", message_string); + free(message_string); return ret; } @@ -758,34 +784,35 @@ void parse_s1ap(xmlDocPtr doc, const xmlNode const *s1ap_node, test_s1ap_t * con xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"hide"); if (NULL != xml_char) { if ((!xmlStrcmp(xml_char, (const xmlChar *)"yes"))) { - xmlFree(xml_char); - return; + go_deeper_in_tree = 0; } xmlFree(xml_char); } - // first get size - xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"size"); - if (NULL != xml_char) { - size = strtoul((const char *)xml_char, NULL, 0); - xmlFree(xml_char); - // second: try to get value (always hex) - xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"value"); + if (0 < go_deeper_in_tree) { + // first get size + xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"size"); if (NULL != xml_char) { - xml_char2 = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"name"); - fprintf(stdout, "s1ap %p field %s size %d value %s\n",s1ap, xml_char2, size, xml_char); - xmlFree(xml_char2); - // if success to get value, do not parse children - //AssertFatal ((xmlStrlen(xml_char) == size), "ERROR %s() mismatch in size %d and strlen %d\n", __FUNCTION__, size, xmlStrlen(xml_char)); - //if (xmlStrlen(xml_char) == size) { - AssertFatal ((s1ap->binary_stream_pos+xmlStrlen(xml_char)/2) <= s1ap->binary_stream_allocated_size, - "ERROR %s() in buffer size: binary_stream_pos %d xmlStrlen(xml_char)/2=%d\n", __FUNCTION__, s1ap->binary_stream_pos, xmlStrlen(xml_char)/2); - rc = hex2data( &s1ap->binary_stream[s1ap->binary_stream_pos], xml_char, xmlStrlen(xml_char)); - s1ap->binary_stream_pos += xmlStrlen(xml_char)/2; - display_node(cur_node, 0); - AssertFatal (rc >= 0, "ERROR %s() in converting hex string %s len %d size %d rc %d\n", __FUNCTION__, xml_char, xmlStrlen(xml_char), size, rc); - go_deeper_in_tree = 0; - //} + size = strtoul((const char *)xml_char, NULL, 0); xmlFree(xml_char); + // second: try to get value (always hex) + xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"value"); + if (NULL != xml_char) { + xml_char2 = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"name"); + fprintf(stdout, "s1ap %p field %s size %d value %s\n",s1ap, xml_char2, size, xml_char); + xmlFree(xml_char2); + // if success to get value, do not parse children + //AssertFatal ((xmlStrlen(xml_char) == size), "ERROR %s() mismatch in size %d and strlen %d\n", __FUNCTION__, size, xmlStrlen(xml_char)); + //if (xmlStrlen(xml_char) == size) { + AssertFatal ((s1ap->binary_stream_pos+xmlStrlen(xml_char)/2) <= s1ap->binary_stream_allocated_size, + "ERROR %s() in buffer size: binary_stream_pos %d xmlStrlen(xml_char)/2=%d\n", __FUNCTION__, s1ap->binary_stream_pos, xmlStrlen(xml_char)/2); + rc = hex2data( &s1ap->binary_stream[s1ap->binary_stream_pos], xml_char, xmlStrlen(xml_char)); + s1ap->binary_stream_pos += xmlStrlen(xml_char)/2; + display_node(cur_node, 0); + AssertFatal (rc >= 0, "ERROR %s() in converting hex string %s len %d size %d rc %d\n", __FUNCTION__, xml_char, xmlStrlen(xml_char), size, rc); + go_deeper_in_tree = 0; + //} + xmlFree(xml_char); + } } } } @@ -1166,7 +1193,6 @@ int generate_xml_scenario( int nb_params = 0; int i,j; char astring[1024]; - char *astring2 = NULL; struct in_addr addr; int ret = 0; @@ -1219,8 +1245,8 @@ int generate_xml_scenario( params[nb_params] = NULL; res = xsltApplyStylesheet(cur, doc, params); if (NULL != res) { - sprintf(play_scenario_filename,"%s",test_scenario_filename); - if (strip_extension(play_scenario_filename) > 0) { + sprintf((char *)play_scenario_filename,"%s",test_scenario_filename); + if (strip_extension((char *)play_scenario_filename) > 0) { strcat((char *)play_scenario_filename, ".tsml"); play_scenario_file = fopen( play_scenario_filename, "w+"); if (NULL != play_scenario_file) { @@ -1398,8 +1424,10 @@ int main( int argc, char **argv ) // logging logInit(); - set_comp_log(S1AP, LOG_TRACE, LOG_MED,1); - set_comp_log(SCTP, LOG_TRACE, LOG_MED,1); + itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL); + + set_comp_log(S1AP, LOG_TRACE, LOG_MED, 1); + set_comp_log(SCTP, LOG_TRACE, LOG_MED, 1); asn_debug = 1; asn1_xer_print = 1; -- 2.26.2