From 31e1be78fafa9dac4919ace2d4e2d193b7a4b0d4 Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Wed, 22 Jun 2016 16:11:43 +0200
Subject: [PATCH] add possibility to logger 'textlog' to print full content of
 buffers

---
 common/utils/T/tracer/logger/logger.h  |  2 ++
 common/utils/T/tracer/logger/textlog.c | 21 ++++++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/common/utils/T/tracer/logger/logger.h b/common/utils/T/tracer/logger/logger.h
index 926eaff58c..a777581db9 100644
--- a/common/utils/T/tracer/logger/logger.h
+++ b/common/utils/T/tracer/logger/logger.h
@@ -20,6 +20,8 @@ logger *new_iqlog(void *event_handler, void *database,
 void framelog_set_skip(logger *_this, int skip_delay);
 void framelog_set_update_only_at_sf9(logger *_this, int update_only_at_sf9);
 
+void textlog_dump_buffer(logger *_this, int dump_buffer);
+
 #include "view/view.h"
 
 void logger_add_view(logger *l, view *v);
diff --git a/common/utils/T/tracer/logger/textlog.c b/common/utils/T/tracer/logger/textlog.c
index e80af7813e..9eb6fd02d8 100644
--- a/common/utils/T/tracer/logger/textlog.c
+++ b/common/utils/T/tracer/logger/textlog.c
@@ -32,12 +32,13 @@ struct textlog {
   int fsize;
   /* local output buffer */
   OBUF o;
+  int dump_buffer;
 };
 
 static void _event(void *p, event e)
 {
   struct textlog *l = p;
-  int i;
+  int i, j;
 #ifdef T_SEND_TIME
   struct tm *t;
   char tt[64];
@@ -65,6 +66,14 @@ static void _event(void *p, event e)
   case BUFFER:
     PUTS(&l->o, "{buffer size:");
     PUTI(&l->o, e.e[l->f[i].event_arg].bsize);
+    if (l->dump_buffer) {
+      PUTS(&l->o, " [");
+      for (j = 0; j < e.e[l->f[i].event_arg].bsize; j++) {
+        PUTX2(&l->o, ((unsigned char *)e.e[l->f[i].event_arg].b)[j]);
+        PUTC(&l->o, ' ');
+      }
+      PUTS(&l->o, "]");
+    }
     PUTS(&l->o, "}");
     break;
   }
@@ -196,3 +205,13 @@ error:
   printf("%s:%d: bad format '%s'\n", __FILE__, __LINE__, format);
   abort();
 }
+
+/****************************************************************************/
+/*                             public functions                             */
+/****************************************************************************/
+
+void textlog_dump_buffer(logger *_this, int dump_buffer)
+{
+  struct textlog *l = _this;
+  l->dump_buffer = dump_buffer;
+}
-- 
GitLab