From 96db716cdf078fe53c4958e35d54daa1d65b8dac Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Sat, 23 Nov 2013 15:36:59 +0000
Subject: [PATCH] - Fix an issue that prevents S1ap library to be rebuilt -
 Added XML print of sent S1AP messages

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4503 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 openair-cn/S1AP/Makefile.eNB       |   4 +-
 openair-cn/S1AP/s1ap_eNB_encoder.c | 130 +++++++++++++++++++++++------
 2 files changed, 107 insertions(+), 27 deletions(-)

diff --git a/openair-cn/S1AP/Makefile.eNB b/openair-cn/S1AP/Makefile.eNB
index 1732b18516..34a4459607 100644
--- a/openair-cn/S1AP/Makefile.eNB
+++ b/openair-cn/S1AP/Makefile.eNB
@@ -98,7 +98,7 @@ $(OUTDIR)/s1ap_asn1regen.stamp: $(ASN1DIR)/$(ASN1RELDIR)/S1AP-CommonDataTypes.as
 	(cd $(ASN1MESSAGESDIR) && asn1c -fhave_native64 -gen-PER $^)
 	@echo Timestamp > $@
 
-$(OUTDIR)/libs1ap.a: | $(OUTDIR)/s1ap_ieregen.stamp $(OUTDIR)/s1ap_asn1regen.stamp $(S1AP_GENERATED) $(addprefix $(OUTDIR)/,$(libs1ap_OBJECTS))
+$(OUTDIR)/libs1ap.a: $(OUTDIR)/s1ap_ieregen.stamp $(OUTDIR)/s1ap_asn1regen.stamp $(S1AP_GENERATED) $(addprefix $(OUTDIR)/,$(libs1ap_OBJECTS))
 	@echo Creating S1AP archive
 	@$(AR) rcs $@ $(S1AP_GENERATED) $(addprefix $(OUTDIR)/,$(libs1ap_OBJECTS))
 
@@ -126,4 +126,4 @@ cleanall: clean
 	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R10:.o=.h))
 
 showcflags:
-	@echo s1ap cflags: $(CFLAGS)
\ No newline at end of file
+	@echo s1ap cflags: $(CFLAGS)
diff --git a/openair-cn/S1AP/s1ap_eNB_encoder.c b/openair-cn/S1AP/s1ap_eNB_encoder.c
index 7d7b811daa..873a153ff7 100644
--- a/openair-cn/S1AP/s1ap_eNB_encoder.c
+++ b/openair-cn/S1AP/s1ap_eNB_encoder.c
@@ -37,14 +37,17 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <stdint.h>
+
+#include "assertions.h"
+#include "conversions.h"
+
+#include "intertask_interface.h"
 
 #include "s1ap_common.h"
 #include "s1ap_ies_defs.h"
 #include "s1ap_eNB_encoder.h"
 
-#include "assertions.h"
-#include "conversions.h"
-
 static inline int s1ap_eNB_encode_initiating(s1ap_message *message,
         uint8_t **buffer,
         uint32_t *len);
@@ -103,61 +106,138 @@ int s1ap_eNB_encode_pdu(s1ap_message *message, uint8_t **buffer, uint32_t *len)
 }
 
 static inline
-int s1ap_eNB_encode_initiating(s1ap_message *message,
+int s1ap_eNB_encode_initiating(s1ap_message *s1ap_message_p,
     uint8_t **buffer, uint32_t *len)
 {
-    switch(message->procedureCode) {
+    int ret = -1;
+    MessageDef *message_p;
+    char       *message_string = NULL;
+    size_t      message_string_size;
+
+    DevAssert(s1ap_message_p != NULL);
+
+    message_string = calloc(10000, sizeof(char));
+
+    s1ap_string_total_size = 0;
+
+    switch(s1ap_message_p->procedureCode) {
         case S1ap_ProcedureCode_id_S1Setup:
-            return s1ap_eNB_encode_s1_setup_request(
-                &message->msg.s1ap_S1SetupRequestIEs, buffer, len);
+            ret = s1ap_eNB_encode_s1_setup_request(
+                &s1ap_message_p->msg.s1ap_S1SetupRequestIEs, buffer, len);
+            s1ap_xer_print_s1ap_s1setuprequest(s1ap_xer__print2sp, message_string, s1ap_message_p);
+            break;
 
         case S1ap_ProcedureCode_id_uplinkNASTransport:
-            return s1ap_eNB_encode_uplink_nas_transport(
-                &message->msg.s1ap_UplinkNASTransportIEs, buffer, len);
+            ret = s1ap_eNB_encode_uplink_nas_transport(
+                &s1ap_message_p->msg.s1ap_UplinkNASTransportIEs, buffer, len);
+            s1ap_xer_print_s1ap_uplinknastransport(s1ap_xer__print2sp, message_string, s1ap_message_p);
+            break;
 
         case S1ap_ProcedureCode_id_UECapabilityInfoIndication:
-            return s1ap_eNB_encode_ue_capability_info_indication(
-                &message->msg.s1ap_UECapabilityInfoIndicationIEs, buffer, len);
+            ret = s1ap_eNB_encode_ue_capability_info_indication(
+                &s1ap_message_p->msg.s1ap_UECapabilityInfoIndicationIEs, buffer, len);
+            s1ap_xer_print_s1ap_uecapabilityinfoindication(s1ap_xer__print2sp, message_string, s1ap_message_p);
+            break;
 
         case S1ap_ProcedureCode_id_initialUEMessage:
-            return s1ap_eNB_encode_initial_ue_message(
-                &message->msg.s1ap_InitialUEMessageIEs, buffer, len);
+            ret = s1ap_eNB_encode_initial_ue_message(
+                &s1ap_message_p->msg.s1ap_InitialUEMessageIEs, buffer, len);
+            s1ap_xer_print_s1ap_initialuemessage(s1ap_xer__print2sp, message_string, s1ap_message_p);
+            break;
 
         default:
             S1AP_DEBUG("Unknown procedure ID (%d) for initiating message\n",
-                       (int)message->procedureCode);
+                       (int)s1ap_message_p->procedureCode);
             break;
     }
-    return -1;
+
+    message_string_size = strlen(message_string);
+
+    message_p = itti_alloc_new_message_sized(TASK_S1AP, GENERIC_LOG, message_string_size);
+    memcpy(&message_p->msg.generic_log, message_string, message_string_size);
+
+    itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p);
+
+    free(message_string);
+
+    return ret;
 }
 
 static inline
-int s1ap_eNB_encode_successfull_outcome(s1ap_message *message,
+int s1ap_eNB_encode_successfull_outcome(s1ap_message *s1ap_message_p,
     uint8_t **buffer, uint32_t *len)
 {
-    switch(message->procedureCode) {
+    int ret = -1;
+    MessageDef *message_p;
+    char       *message_string = NULL;
+    size_t      message_string_size;
+
+    DevAssert(s1ap_message_p != NULL);
+
+    message_string = calloc(10000, sizeof(char));
+
+    s1ap_string_total_size = 0;
+
+    switch(s1ap_message_p->procedureCode) {
         case S1ap_ProcedureCode_id_InitialContextSetup:
-            return s1ap_eNB_encode_initial_context_setup_response(
-                &message->msg.s1ap_InitialContextSetupResponseIEs, buffer, len);
+            ret = s1ap_eNB_encode_initial_context_setup_response(
+                &s1ap_message_p->msg.s1ap_InitialContextSetupResponseIEs, buffer, len);
+            s1ap_xer_print_s1ap_initialcontextsetupresponse(s1ap_xer__print2sp, message_string, s1ap_message_p);
+            break;
         default:
             S1AP_DEBUG("Unknown procedure ID (%d) for successfull outcome message\n",
-                       (int)message->procedureCode);
+                       (int)s1ap_message_p->procedureCode);
             break;
     }
-    return -1;
+
+    message_string_size = strlen(message_string);
+
+    message_p = itti_alloc_new_message_sized(TASK_S1AP, GENERIC_LOG, message_string_size);
+    memcpy(&message_p->msg.generic_log, message_string, message_string_size);
+
+    itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p);
+
+    free(message_string);
+
+    return ret;
 }
 
 static inline
-int s1ap_eNB_encode_unsuccessfull_outcome(s1ap_message *message,
+int s1ap_eNB_encode_unsuccessfull_outcome(s1ap_message *s1ap_message_p,
     uint8_t **buffer, uint32_t *len)
 {
-    switch(message->procedureCode) {
+    int ret = -1;
+    MessageDef *message_p;
+    char       *message_string = NULL;
+    size_t      message_string_size;
+
+    DevAssert(s1ap_message_p != NULL);
+
+    message_string = calloc(10000, sizeof(char));
+
+    s1ap_string_total_size = 0;
+
+    switch(s1ap_message_p->procedureCode) {
+        case S1ap_ProcedureCode_id_InitialContextSetup:
+//             ret = s1ap_encode_s1ap_initialcontextsetupfailureies(
+//                 &s1ap_message_p->msg.s1ap_InitialContextSetupFailureIEs, buffer, len);
+            s1ap_xer_print_s1ap_initialcontextsetupfailure(s1ap_xer__print2sp, message_string, s1ap_message_p);
+            break;
         default:
             S1AP_DEBUG("Unknown procedure ID (%d) for unsuccessfull outcome message\n",
-                       (int)message->procedureCode);
+                       (int)s1ap_message_p->procedureCode);
             break;
     }
-    return -1;
+    message_string_size = strlen(message_string);
+
+    message_p = itti_alloc_new_message_sized(TASK_S1AP, GENERIC_LOG, message_string_size);
+    memcpy(&message_p->msg.generic_log, message_string, message_string_size);
+
+    itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p);
+
+    free(message_string);
+
+    return ret;
 }
 
 static inline
-- 
GitLab