Blame src/mw_debug.c

Packit 16808d
Packit 16808d
/*
Packit 16808d
  Meanwhile - Unofficial Lotus Sametime Community Client Library
Packit 16808d
  Copyright (C) 2004  Christopher (siege) O'Brien
Packit 16808d
  
Packit 16808d
  This library is free software; you can redistribute it and/or
Packit 16808d
  modify it under the terms of the GNU Library General Public
Packit 16808d
  License as published by the Free Software Foundation; either
Packit 16808d
  version 2 of the License, or (at your option) any later version.
Packit 16808d
  
Packit 16808d
  This library is distributed in the hope that it will be useful,
Packit 16808d
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 16808d
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 16808d
  Library General Public License for more details.
Packit 16808d
  
Packit 16808d
  You should have received a copy of the GNU Library General Public
Packit 16808d
  License along with this library; if not, write to the Free
Packit 16808d
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit 16808d
*/
Packit 16808d
Packit 16808d
Packit Service 7ea76a
#include <glib.h>
Packit 16808d
Packit 16808d
#include "mw_debug.h"
Packit 16808d
Packit 16808d
Packit 16808d
Packit 16808d
#define FRMT1            "%02x"
Packit 16808d
#define FRMT2            FRMT1 FRMT1 " "
Packit 16808d
#define FRMT4            FRMT2 FRMT2
Packit 16808d
#define FRMT8            FRMT4 FRMT4
Packit 16808d
#define FRMT16           FRMT8 FRMT8
Packit 16808d
Packit 16808d
#define ADVANCE(b, n, c)  {b += c; n -= c;}
Packit 16808d
Packit 16808d
Packit 16808d
Packit 16808d
/** writes hex pairs of buf to str */
Packit 16808d
static void pretty_print(GString *str, const guchar *buf, gsize len) {
Packit 16808d
  while(len >= 16) {
Packit 16808d
    /* write a complete line */
Packit 16808d
    g_string_append_printf(str, FRMT16,
Packit 16808d
			   buf[0],  buf[1],  buf[2],  buf[3],
Packit 16808d
			   buf[4],  buf[5],  buf[6],  buf[7],
Packit 16808d
			   buf[8],  buf[9],  buf[10], buf[11],
Packit 16808d
			   buf[12], buf[13], buf[14], buf[15]);
Packit 16808d
    ADVANCE(buf, len, 16);
Packit 16808d
    
Packit 16808d
    /* append \n to each line but the last */
Packit 16808d
    if(len) g_string_append(str, "\n");
Packit 16808d
  }
Packit 16808d
Packit 16808d
  /* write an incomplete line */
Packit 16808d
  if(len >= 8) {
Packit 16808d
    g_string_append_printf(str, FRMT8,
Packit 16808d
			   buf[0], buf[1], buf[2], buf[3],
Packit 16808d
			   buf[4], buf[5], buf[6], buf[7]);
Packit 16808d
    ADVANCE(buf, len, 8);
Packit 16808d
  }
Packit 16808d
  
Packit 16808d
  if(len >= 4) {
Packit 16808d
    g_string_append_printf(str, FRMT4,
Packit 16808d
			   buf[0], buf[1], buf[2], buf[3]);
Packit 16808d
    ADVANCE(buf, len, 4);
Packit 16808d
  }
Packit 16808d
Packit 16808d
  if(len >= 2) {
Packit 16808d
    g_string_append_printf(str, FRMT2, buf[0], buf[1]);
Packit 16808d
    ADVANCE(buf, len, 2);
Packit 16808d
  }
Packit 16808d
Packit 16808d
  if(len >= 1) {
Packit 16808d
    g_string_append_printf(str, FRMT1, buf[0]);
Packit 16808d
    ADVANCE(buf, len, 1);
Packit 16808d
  }
Packit 16808d
}
Packit 16808d
Packit 16808d
Packit 16808d
Packit 16808d
void mw_debug_datav(const guchar *buf, gsize len,
Packit 16808d
		    const char *msg, va_list args) {
Packit 16808d
  GString *str;
Packit 16808d
Packit 16808d
  g_return_if_fail(buf != NULL || len == 0);
Packit 16808d
Packit 16808d
  str = g_string_new(NULL);
Packit 16808d
Packit 16808d
  if(msg) {
Packit 16808d
    char *txt = g_strdup_vprintf(msg, args);
Packit 16808d
    g_string_append_printf(str, "%s\n", txt);
Packit 16808d
    g_free(txt);
Packit 16808d
  }
Packit 16808d
  pretty_print(str, buf, len);
Packit 16808d
Packit Service ff8766
  g_debug("%s", str->str);
Packit 16808d
  g_string_free(str, TRUE);
Packit 16808d
}
Packit 16808d
Packit 16808d
Packit 16808d
Packit 16808d
void mw_debug_data(const guchar *buf, gsize len,
Packit 16808d
		   const char *msg, ...) {
Packit 16808d
  va_list args;
Packit 16808d
  
Packit 16808d
  g_return_if_fail(buf != NULL || len == 0);
Packit 16808d
Packit 16808d
  va_start(args, msg);
Packit 16808d
  mw_debug_datav(buf, len, msg, args);
Packit 16808d
  va_end(args);
Packit 16808d
}
Packit 16808d
Packit 16808d
Packit 16808d
Packit 16808d
void mw_debug_opaquev(struct mwOpaque *o, const char *txt, va_list args) {
Packit 16808d
  g_return_if_fail(o != NULL);
Packit 16808d
  mw_debug_datav(o->data, o->len, txt, args);
Packit 16808d
}
Packit 16808d
Packit 16808d
Packit 16808d
Packit 16808d
void mw_debug_opaque(struct mwOpaque *o, const char *txt, ...) {
Packit 16808d
  va_list args;
Packit 16808d
Packit 16808d
  g_return_if_fail(o != NULL);
Packit 16808d
Packit 16808d
  va_start(args, txt);
Packit 16808d
  mw_debug_opaquev(o, txt, args);
Packit 16808d
  va_end(args);
Packit 16808d
}
Packit 16808d
Packit 16808d
Packit 16808d
void mw_mailme_datav(const guchar *buf, gsize len,
Packit 16808d
		     const char *info, va_list args) {
Packit 16808d
Packit 16808d
#if MW_MAILME
Packit 16808d
  GString *str;
Packit 16808d
  char *txt;
Packit 16808d
Packit 16808d
  str = g_string_new(MW_MAILME_MESSAGE "\n"
Packit 16808d
		     "  Please send mail to: " MW_MAILME_ADDRESS "\n"
Packit 16808d
		     MW_MAILME_CUT_START "\n");
Packit 16808d
  str = g_string_new(NULL);
Packit 16808d
Packit 16808d
  txt = g_strdup_vprintf(info, args);
Packit 16808d
  g_string_append_printf(str, "%s\n", txt);
Packit 16808d
  g_free(txt);
Packit 16808d
Packit 16808d
  if(buf && len) pretty_print(str, buf, len);
Packit 16808d
Packit 16808d
  g_string_append(str, MW_MAILME_CUT_STOP);
Packit 16808d
Packit Service ff8766
  g_debug("%s", str->str);
Packit 16808d
  g_string_free(str, TRUE);
Packit 16808d
Packit 16808d
#else
Packit 16808d
  mw_debug_datav(buf, len, info, args);
Packit 16808d
Packit 16808d
#endif
Packit 16808d
}
Packit 16808d
Packit 16808d
Packit 16808d
Packit 16808d
void mw_mailme_data(const guchar *buf, gsize len,
Packit 16808d
		    const char *info, ...) {
Packit 16808d
  va_list args;
Packit 16808d
  va_start(args, info);
Packit 16808d
  mw_mailme_datav(buf, len, info, args);
Packit 16808d
  va_end(args);
Packit 16808d
}
Packit 16808d
Packit 16808d
Packit 16808d
Packit 16808d
void mw_mailme_opaquev(struct mwOpaque *o, const char *info, va_list args) {
Packit 16808d
  mw_mailme_datav(o->data, o->len, info, args);
Packit 16808d
}
Packit 16808d
Packit 16808d
Packit 16808d
Packit 16808d
void mw_mailme_opaque(struct mwOpaque *o, const char *info, ...) {
Packit 16808d
  va_list args;
Packit 16808d
  va_start(args, info);
Packit 16808d
  mw_mailme_opaquev(o, info, args);
Packit 16808d
  va_end(args);
Packit 16808d
}