From 10a764c4727693520f9822a6e581940906367cae Mon Sep 17 00:00:00 2001
From: gauthier <lionel.gauthier@eurecom.fr>
Date: Tue, 26 Jan 2016 16:45:48 +0100
Subject: [PATCH] Traces + shift timing bug

---
 openair3/TEST/EPC_TEST/play_scenario.c        | 45 ++++++++++---------
 .../EPC_TEST/play_scenario_s1ap_compare_ie.c  | 12 +++--
 2 files changed, 34 insertions(+), 23 deletions(-)

diff --git a/openair3/TEST/EPC_TEST/play_scenario.c b/openair3/TEST/EPC_TEST/play_scenario.c
index c633cedfa7..cafdd93d31 100644
--- a/openair3/TEST/EPC_TEST/play_scenario.c
+++ b/openair3/TEST/EPC_TEST/play_scenario.c
@@ -141,10 +141,14 @@ void et_get_shift_arg( char * line_argument, shift_packet_t * const shift)
 
 
   while ((line_argument[i] != ':') && (i < len)) {
-    my_num[i] = line_argument[i];
+    if (isdigit(line_argument[i])) { // may occur '\"'
+      my_num[j++] = line_argument[i];
+    }
     i += 1;
   }
-  my_num[i++] = '\0';
+  AssertFatal(':' == line_argument[i], "Bad format");
+  i += 1; // ':'
+  my_num[j++] = '\0';
   shift->frame_number = atoi(my_num);
   AssertFatal(i<len, "Shift argument %s bad format", line_argument);
 
@@ -155,6 +159,7 @@ void et_get_shift_arg( char * line_argument, shift_packet_t * const shift)
     i += 1;
   }
   AssertFatal(i<len, "Shift argument %s bad format", line_argument);
+  j = 0;
   while ((line_argument[i] != '.') && (i < len)) {
     my_num[j++] = line_argument[i++];
   }
@@ -830,13 +835,13 @@ int et_play_scenario(et_scenario_t* const scenario, const struct shift_packet_s
   while (shift) {
     packet = scenario->list_packet;
     while (packet) {
-//      fprintf(stdout, "*shift: %p\n", shift);
-//      fprintf(stdout, "\tframe_number:       %p\n", shift->frame_number);
-//      fprintf(stdout, "\tshift_seconds:      %ld\n", shift->shift_seconds);
-//      fprintf(stdout, "\tshift_microseconds: %ld\n", shift->shift_microseconds);
-//      fprintf(stdout, "\tsingle:             %d\n\n", shift->single);
-//      fprintf(stdout, "\tshift_all_packets_seconds:      %ld\n", shift_all_packets.tv_sec);
-//      fprintf(stdout, "\tshift_all_packets_microseconds: %ld\n", shift_all_packets.tv_usec);
+      fprintf(stdout, "*shift: %p\n", shift);
+      fprintf(stdout, "\tframe_number:       %d\n", shift->frame_number);
+      fprintf(stdout, "\tshift_seconds:      %ld\n", shift->shift_seconds);
+      fprintf(stdout, "\tshift_microseconds: %ld\n", shift->shift_microseconds);
+      fprintf(stdout, "\tsingle:             %d\n\n", shift->single);
+      fprintf(stdout, "\tshift_all_packets_seconds:      %ld\n", shift_all_packets.tv_sec);
+      fprintf(stdout, "\tshift_all_packets_microseconds: %ld\n", shift_all_packets.tv_usec);
 
       AssertFatal((packet->time_relative_to_first_packet.tv_sec >= 0) && (packet->time_relative_to_first_packet.tv_usec >= 0),
           "Bad timing result time_relative_to_first_packet=%d.%d packet num %u, original frame number %u",
@@ -891,11 +896,11 @@ int et_play_scenario(et_scenario_t* const scenario, const struct shift_packet_s
         shift_all_packets.tv_sec = shift->shift_seconds;
         shift_all_packets.tv_usec = shift->shift_microseconds;
         timeval_add(&packet->time_relative_to_first_packet, &packet->time_relative_to_first_packet, &shift_all_packets);
-//        fprintf(stdout, "\tpacket num %u, now original frame number %u time_relative_to_first_packet=%d.%d\n",
-//            packet->packet_number,
-//            packet->original_frame_number,
-//            packet->time_relative_to_first_packet.tv_sec,
-//            packet->time_relative_to_first_packet.tv_usec);
+        fprintf(stdout, "\tpacket num %u, now original frame number %u time_relative_to_first_packet=%d.%d\n",
+            packet->packet_number,
+            packet->original_frame_number,
+            packet->time_relative_to_first_packet.tv_sec,
+            packet->time_relative_to_first_packet.tv_usec);
         AssertFatal((packet->time_relative_to_first_packet.tv_sec >= 0) && (packet->time_relative_to_first_packet.tv_usec >= 0),
             "Bad timing result time_relative_to_first_packet=%d.%d packet num %u, original frame number %u",
             packet->time_relative_to_first_packet.tv_sec,
@@ -904,11 +909,11 @@ int et_play_scenario(et_scenario_t* const scenario, const struct shift_packet_s
             packet->original_frame_number);
       } else if ((0 == shift->single)  && (shift->frame_number < packet->original_frame_number)) {
         timeval_add(&packet->time_relative_to_first_packet, &packet->time_relative_to_first_packet, &shift_all_packets);
-//        fprintf(stdout, "\tpacket num %u, now original frame number %u time_relative_to_first_packet=%d.%d\n",
-//            packet->packet_number,
-//            packet->original_frame_number,
-//            packet->time_relative_to_first_packet.tv_sec,
-//            packet->time_relative_to_first_packet.tv_usec);
+        fprintf(stdout, "\tpacket num %u, now original frame number %u time_relative_to_first_packet=%d.%d\n",
+            packet->packet_number,
+            packet->original_frame_number,
+            packet->time_relative_to_first_packet.tv_sec,
+            packet->time_relative_to_first_packet.tv_usec);
         AssertFatal((packet->time_relative_to_first_packet.tv_sec >= 0) && (packet->time_relative_to_first_packet.tv_usec >= 0),
             "Bad timing result time_relative_to_first_packet=%d.%d packet num %u, original frame number %u",
             packet->time_relative_to_first_packet.tv_sec,
@@ -1107,8 +1112,8 @@ et_config_parse_opt_line (
             shift = shift->next;
           }
           shift->single = 1;
-          et_get_shift_arg(optarg, shift);
           printf("Arg Shift packet %s\n", optarg);
+          et_get_shift_arg(optarg, shift);
         }
         break;
 
diff --git a/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c b/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c
index 2242a63bd6..1e79c38963 100644
--- a/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c
+++ b/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c
@@ -467,7 +467,7 @@ void update_xpath_node_mme_ue_s1ap_id(et_s1ap_t * const s1ap, xmlNode *node, con
   int            size     = 0;
   int            pos      = 0;
   int            go_deeper_in_tree = 1;
-  S1AP_DEBUG("%s() mme_ue_s1ap_id %u\n", __FUNCTION__, new_id);
+  S1AP_INFO("%s() mme_ue_s1ap_id %u\n", __FUNCTION__, new_id);
 
   // modify
   for (cur_node = (xmlNode *)node; cur_node; cur_node = cur_node->next) {
@@ -527,7 +527,7 @@ void update_xpath_node_mme_ue_s1ap_id(et_s1ap_t * const s1ap, xmlNode *node, con
             } while (pos2 < (2*5));
             // update ASN1
             et_decode_s1ap(s1ap);
-            S1AP_DEBUG("Updated ASN1 for %s\n", showname);
+            S1AP_INFO("Updated ASN1 for %s\n", showname);
           }
         }
       }
@@ -553,6 +553,7 @@ void update_xpath_nodes_mme_ue_s1ap_id(et_s1ap_t * const s1ap_payload, xmlNodeSe
   xmlNode      *s1ap_node = NULL;
 
   size = (nodes) ? nodes->nodeNr : 0;
+  S1AP_DEBUG("%s() num nodes %u\n", __FUNCTION__, size);
 
   /*
    * NOTE: the nodes are processed in reverse order, i.e. reverse document
@@ -614,14 +615,19 @@ int et_s1ap_update_mme_ue_s1ap_id(et_packet_t * const packet, const S1ap_MME_UE_
 
   // Evaluate xpath expression
   xpath_obj = xmlXPathEvalExpression(xpath_expression, xpath_ctx);
+  xmlXPathFreeContext(xpath_ctx);
   AssertFatal(xpath_obj != NULL, "Unable to evaluate XPATH expression \"%s\"\n", xpath_expression);
 
+  if(xmlXPathNodeSetIsEmpty(xpath_obj->nodesetval)){
+    xmlXPathFreeObject(xpath_obj);
+    S1AP_DEBUG("%s() No match packet num %u original frame number %u, mme_ue_s1ap_id %u -> %u\n", __FUNCTION__, packet->packet_number, packet->original_frame_number, old_id, new_id);
+    return -1;
+  }
   // update selected nodes
   update_xpath_nodes_mme_ue_s1ap_id(&packet->sctp_hdr.u.data_hdr.payload, xpath_obj->nodesetval, new_id);
 
   // Cleanup of XPath data
   xmlXPathFreeObject(xpath_obj);
-  xmlXPathFreeContext(xpath_ctx);
 
   return 0;
 }
-- 
2.26.2