Blame src/mw_debug.c.fix-glib-headers

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