From 76818b8b1ad18e0f9d7a44fb8545a820f9764052 Mon Sep 17 00:00:00 2001 From: Marco Barisione Date: Fri, 10 May 2013 17:50:33 +0100 Subject: tpaw-debug: copy from Empathy This commit just copies the files and renames the function. tp-account-widget's debugging stuff is not functional yet. https://bugzilla.gnome.org/show_bug.cgi?id=699492 --- tp-account-widgets/Makefile.am | 2 + tp-account-widgets/tpaw-debug.c | 164 ++++++++++++++++++++++++++++++++++++++++ tp-account-widgets/tpaw-debug.h | 100 ++++++++++++++++++++++++ 3 files changed, 266 insertions(+) create mode 100644 tp-account-widgets/tpaw-debug.c create mode 100644 tp-account-widgets/tpaw-debug.h diff --git a/tp-account-widgets/Makefile.am b/tp-account-widgets/Makefile.am index 968e62617..e8c2ac434 100644 --- a/tp-account-widgets/Makefile.am +++ b/tp-account-widgets/Makefile.am @@ -34,6 +34,7 @@ libtp_account_widgets_sources = \ tpaw-camera-monitor.c \ tpaw-connection-managers.c \ tpaw-contactinfo-utils.c \ + tpaw-debug.c \ tpaw-keyring.c \ tpaw-irc-network-chooser.c \ tpaw-irc-network-chooser-dialog.c \ @@ -61,6 +62,7 @@ libtp_account_widgets_headers = \ tpaw-camera-monitor.h \ tpaw-connection-managers.h \ tpaw-contactinfo-utils.h \ + tpaw-debug.h \ tpaw-gsettings.h \ tpaw-images.h \ tpaw-keyring.h \ diff --git a/tp-account-widgets/tpaw-debug.c b/tp-account-widgets/tpaw-debug.c new file mode 100644 index 000000000..40d73d6ac --- /dev/null +++ b/tp-account-widgets/tpaw-debug.c @@ -0,0 +1,164 @@ +/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ +/* + * Copyright (C) 2007 Collabora Ltd. + * Copyright (C) 2007 Nokia Corporation + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "config.h" +#include "tpaw-debug.h" + +#ifdef ENABLE_DEBUG + +static TpawDebugFlags flags = 0; + +static GDebugKey keys[] = { + { "Tp", TPAW_DEBUG_TP }, + { "Chat", TPAW_DEBUG_CHAT }, + { "Contact", TPAW_DEBUG_CONTACT }, + { "Account", TPAW_DEBUG_ACCOUNT }, + { "Irc", TPAW_DEBUG_IRC }, + { "Dispatcher", TPAW_DEBUG_DISPATCHER }, + { "Ft", TPAW_DEBUG_FT }, + { "Location", TPAW_DEBUG_LOCATION }, + { "Other", TPAW_DEBUG_OTHER }, + { "Connectivity", TPAW_DEBUG_CONNECTIVITY }, + { "ImportMc4Accounts", TPAW_DEBUG_IMPORT_MC4_ACCOUNTS }, + { "Tests", TPAW_DEBUG_TESTS }, + { "Voip", TPAW_DEBUG_VOIP }, + { "Tls", TPAW_DEBUG_TLS }, + { "Sasl", TPAW_DEBUG_SASL }, + { "Camera", TPAW_DEBUG_CAMERA }, + { 0, } +}; + +static void +debug_set_flags (TpawDebugFlags new_flags) +{ + flags |= new_flags; +} + +void +tpaw_debug_set_flags (const gchar *flags_string) +{ + guint nkeys; + + for (nkeys = 0; keys[nkeys].value; nkeys++); + + tp_debug_set_flags (flags_string); + + if (flags_string) + debug_set_flags (g_parse_debug_string (flags_string, keys, nkeys)); +} + +gboolean +tpaw_debug_flag_is_set (TpawDebugFlags flag) +{ + return (flag & flags) != 0; +} + +GHashTable *flag_to_keys = NULL; + +static const gchar * +debug_flag_to_key (TpawDebugFlags flag) +{ + if (flag_to_keys == NULL) + { + guint i; + + flag_to_keys = g_hash_table_new_full (g_direct_hash, g_direct_equal, + NULL, g_free); + + for (i = 0; keys[i].value; i++) + { + GDebugKey key = (GDebugKey) keys[i]; + g_hash_table_insert (flag_to_keys, GUINT_TO_POINTER (key.value), + g_strdup (key.key)); + } + } + + return g_hash_table_lookup (flag_to_keys, GUINT_TO_POINTER (flag)); +} + +void +tpaw_debug_free (void) +{ + if (flag_to_keys == NULL) + return; + + g_hash_table_unref (flag_to_keys); + flag_to_keys = NULL; +} + +static void +log_to_debug_sender (TpawDebugFlags flag, + const gchar *message) +{ + TpDebugSender *sender; + gchar *domain; + GTimeVal now; + + sender = tp_debug_sender_dup (); + + g_get_current_time (&now); + + domain = g_strdup_printf ("%s/%s", G_LOG_DOMAIN, debug_flag_to_key (flag)); + + tp_debug_sender_add_message (sender, &now, domain, G_LOG_LEVEL_DEBUG, message); + + g_free (domain); + g_object_unref (sender); +} + +void +tpaw_debug (TpawDebugFlags flag, + const gchar *format, + ...) +{ + gchar *message; + va_list args; + + va_start (args, format); + message = g_strdup_vprintf (format, args); + va_end (args); + + log_to_debug_sender (flag, message); + + if (flag & flags) + g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%s", message); + + g_free (message); +} + +#else + +gboolean +tpaw_debug_flag_is_set (TpawDebugFlags flag) +{ + return FALSE; +} + +void +tpaw_debug (TpawDebugFlags flag, const gchar *format, ...) +{ +} + +void +tpaw_debug_set_flags (const gchar *flags_string) +{ +} + +#endif /* ENABLE_DEBUG */ diff --git a/tp-account-widgets/tpaw-debug.h b/tp-account-widgets/tpaw-debug.h new file mode 100644 index 000000000..d4b44f7cd --- /dev/null +++ b/tp-account-widgets/tpaw-debug.h @@ -0,0 +1,100 @@ +/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ +/* + * Copyright (C) 2007 Collabora Ltd. + * Copyright (C) 2007 Nokia Corporation + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __TPAW_DEBUG_H__ +#define __TPAW_DEBUG_H__ + +#include +#include + +G_BEGIN_DECLS + +/* Please keep this enum in sync with #keys in tpaw-debug.c */ +typedef enum +{ + TPAW_DEBUG_TP = 1 << 1, + TPAW_DEBUG_CHAT = 1 << 2, + TPAW_DEBUG_CONTACT = 1 << 3, + TPAW_DEBUG_ACCOUNT = 1 << 4, + TPAW_DEBUG_IRC = 1 << 5, + TPAW_DEBUG_DISPATCHER = 1 << 6, + TPAW_DEBUG_FT = 1 << 7, + TPAW_DEBUG_LOCATION = 1 << 8, + TPAW_DEBUG_OTHER = 1 << 9, + TPAW_DEBUG_SHARE_DESKTOP = 1 << 10, + TPAW_DEBUG_CONNECTIVITY = 1 << 11, + TPAW_DEBUG_IMPORT_MC4_ACCOUNTS = 1 << 11, + TPAW_DEBUG_TESTS = 1 << 12, + TPAW_DEBUG_VOIP = 1 << 13, + TPAW_DEBUG_TLS = 1 << 14, + TPAW_DEBUG_SASL = 1 << 15, + TPAW_DEBUG_CAMERA = 1 << 16, +} TpawDebugFlags; + +gboolean tpaw_debug_flag_is_set (TpawDebugFlags flag); +void tpaw_debug (TpawDebugFlags flag, const gchar *format, ...) + G_GNUC_PRINTF (2, 3); +void tpaw_debug_free (void); +void tpaw_debug_set_flags (const gchar *flags_string); +G_END_DECLS + +#endif /* __TPAW_DEBUG_H__ */ + +/* ------------------------------------ */ + +/* Below this point is outside the __DEBUG_H__ guard - so it can take effect + * more than once. So you can do: + * + * #define DEBUG_FLAG TPAW_DEBUG_ONE_THING + * #include "internal-debug.h" + * ... + * DEBUG ("if we're debugging one thing"); + * ... + * #undef DEBUG_FLAG + * #define DEBUG_FLAG TPAW_DEBUG_OTHER_THING + * #include "internal-debug.h" + * ... + * DEBUG ("if we're debugging the other thing"); + * ... + */ + +#ifdef DEBUG_FLAG +#ifdef ENABLE_DEBUG + +#undef DEBUG +#define DEBUG(format, ...) \ + tpaw_debug (DEBUG_FLAG, "%s: " format, G_STRFUNC, ##__VA_ARGS__) + +#undef DEBUGGING +#define DEBUGGING tpaw_debug_flag_is_set (DEBUG_FLAG) + +#else /* !defined (ENABLE_DEBUG) */ + +#undef DEBUG +#define DEBUG(format, ...) do {} while (0) + +#undef DEBUGGING +#define DEBUGGING 0 + +#endif /* !defined (ENABLE_DEBUG) */ + +#define gabble_debug_free() G_STMT_START { } G_STMT_END + +#endif /* defined (DEBUG_FLAG) */ -- cgit v1.2.3