diff --git a/gatchat/gatutil.c b/gatchat/gatutil.c index 575019d6..1306c616 100644 --- a/gatchat/gatutil.c +++ b/gatchat/gatutil.c @@ -109,6 +109,29 @@ void g_at_util_debug_chat(gboolean in, const char *str, gsize len, g_free(escaped_str); } +void g_at_util_debug_dump(gboolean in, const unsigned char *buf, gsize len, + GAtDebugFunc debugf, gpointer user_data) +{ + char type = in ? '<' : '>'; + GString *str; + gsize i; + + if (!debugf || !len) + return; + + str = g_string_sized_new(1 + (len * 2)); + if (!str) + return; + + g_string_append_c(str, type); + + for (i = 0; i < len; i++) + g_string_append_printf(str, " %02x", buf[i]); + + debugf(str->str, user_data); + g_string_free(str, TRUE); +} + gboolean g_at_util_setup_io(GIOChannel *io, GIOFlags flags) { GIOFlags io_flags; diff --git a/gatchat/gatutil.h b/gatchat/gatutil.h index 993db457..1a065af2 100644 --- a/gatchat/gatutil.h +++ b/gatchat/gatutil.h @@ -22,15 +22,18 @@ #ifndef __GATUTIL_H #define __GATUTIL_H +#include "gat.h" + #ifdef __cplusplus extern "C" { #endif -#include "gat.h" - void g_at_util_debug_chat(gboolean in, const char *str, gsize len, GAtDebugFunc debugf, gpointer user_data); +void g_at_util_debug_dump(gboolean in, const unsigned char *buf, gsize len, + GAtDebugFunc debugf, gpointer user_data); + gboolean g_at_util_setup_io(GIOChannel *io, GIOFlags flags); #ifdef __cplusplus