Mercurial > pidgin
diff src/protocols/sametime/meanwhile/mw_debug.c @ 10969:3ef77720e577
[gaim-migrate @ 12790]
importing meanwhile library for use in the sametime plugin
committer: Tailor Script <tailor@pidgin.im>
author | Christopher O'Brien <siege@pidgin.im> |
---|---|
date | Sun, 05 Jun 2005 02:50:13 +0000 |
parents | |
children | 0110fc7c6a8a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/protocols/sametime/meanwhile/mw_debug.c Sun Jun 05 02:50:13 2005 +0000 @@ -0,0 +1,129 @@ + +/* + Meanwhile - Unofficial Lotus Sametime Community Client Library + Copyright (C) 2004 Christopher (siege) O'Brien + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include <glib/gstring.h> + +#include "mw_debug.h" + + +#define FRM "%02x" +#define FRMT "%02x%02x " +#define BUF(n) ((unsigned char) buf[n]) +#define ADVANCE(b, n, c) {b += c; n -= c;} + + +#ifdef DEBUG +/** writes hex pairs of buf to str */ +static void t_pretty_print(GString *str, const char *buf, gsize len) { + while(len) { + if(len >= 16) { + g_string_append_printf(str, + FRMT FRMT FRMT FRMT FRMT FRMT FRMT FRMT "\n", + BUF(0), BUF(1), BUF(2), BUF(3), + BUF(4), BUF(5), BUF(6), BUF(7), + BUF(8), BUF(9), BUF(10), BUF(11), + BUF(12), BUF(13), BUF(14), BUF(15)); + ADVANCE(buf, len, 16); + + } else if(len == 2) { + g_string_append_printf(str, FRMT "\n", BUF(0), BUF(1)); + ADVANCE(buf, len, 2); + + } else if(len > 1) { + g_string_append_printf(str, FRMT, BUF(0), BUF(1)); + ADVANCE(buf, len, 2); + + } else { + g_string_append_printf(str, FRM "\n", BUF(0)); + ADVANCE(buf, len, 1); + } + } +} +#endif + + +void pretty_print(const char *buf, gsize len) { +#ifdef DEBUG + GString *str; + + if(! len) return; + + g_return_if_fail(buf != NULL); + + str = g_string_new(NULL); + t_pretty_print(str, buf, len); + g_debug(str->str); + g_string_free(str, TRUE); +#endif + ; +} + + +void pretty_print_opaque(struct mwOpaque *o) { + if(! o) return; + pretty_print(o->data, o->len); +} + + +void mw_debug_mailme_v(struct mwOpaque *block, + const char *info, va_list args) { + /* + MW_MAILME_MESSAGE + begin here + info % args + pretty_print + end here + */ + +#ifdef DEBUG + GString *str; + char *txt; + + str = g_string_new(MW_MAILME_MESSAGE "\n" + " Please send mail to: " MW_MAILME_ADDRESS "\n" + MW_MAILME_CUT_START "\n"); + + txt = g_strdup_vprintf(info, args); + g_string_append(str, txt); + g_free(txt); + + g_string_append(str, "\n"); + + if(block) { + t_pretty_print(str, block->data, block->len); + } + + g_string_append(str, MW_MAILME_CUT_STOP); + + g_debug(str->str); + g_string_free(str, TRUE); +#endif + ; +} + + +void mw_debug_mailme(struct mwOpaque *block, + const char *info, ...) { + va_list args; + va_start(args, info); + mw_debug_mailme_v(block, info, args); + va_end(args); +} +