1
2 #include <stdarg.h>
3
4 #include <glib.h>
5
6 #include "gibber-debug.h"
7
8 #ifdef ENABLE_DEBUG
9
10 static DebugFlags flags = 0;
11 static gboolean initialized = FALSE;
12
13 static GDebugKey keys[] = {
14 { "transport", DEBUG_TRANSPORT },
15 { "net", DEBUG_NET },
16 { "xmpp", DEBUG_XMPP },
17 { "xmpp-reader", DEBUG_XMPP_READER },
18 { "xmpp-writer", DEBUG_XMPP_WRITER },
19 { "sasl", DEBUG_SASL },
20 { "ssl", DEBUG_SSL },
21 { "rmulticast", DEBUG_RMULTICAST },
22 { "rmulticast-sender", DEBUG_RMULTICAST_SENDER },
23 { "muc-connection", DEBUG_MUC_CONNECTION },
24 { "bytestream", DEBUG_BYTESTREAM },
25 { "ft", DEBUG_FILE_TRANSFER },
26 { "all", ~0 },
27 { 0, },
28 };
29
gibber_debug_set_flags_from_env()30 void gibber_debug_set_flags_from_env ()
31 {
32 guint nkeys;
33 const gchar *flags_string;
34
35 for (nkeys = 0; keys[nkeys].value; nkeys++);
36
37 flags_string = g_getenv ("GIBBER_DEBUG");
38
39 if (flags_string)
40 gibber_debug_set_flags (g_parse_debug_string (flags_string, keys, nkeys));
41
42 initialized = TRUE;
43 }
44
gibber_debug_set_flags(DebugFlags new_flags)45 void gibber_debug_set_flags (DebugFlags new_flags)
46 {
47 flags |= new_flags;
48 initialized = TRUE;
49 }
50
gibber_debug_flag_is_set(DebugFlags flag)51 gboolean gibber_debug_flag_is_set (DebugFlags flag)
52 {
53 return flag & flags;
54 }
55
gibber_debug(DebugFlags flag,const gchar * format,...)56 void gibber_debug (DebugFlags flag,
57 const gchar *format,
58 ...)
59 {
60 if (G_UNLIKELY(!initialized))
61 gibber_debug_set_flags_from_env ();
62 if (flag & flags)
63 {
64 va_list args;
65 va_start (args, format);
66 g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, args);
67 va_end (args);
68 }
69 }
70
71 void
gibber_debug_stanza(DebugFlags flag,WockyStanza * stanza,const gchar * format,...)72 gibber_debug_stanza (DebugFlags flag,
73 WockyStanza *stanza,
74 const gchar *format,
75 ...)
76 {
77 WockyNode *node = wocky_stanza_get_top_node (stanza);
78
79 if (G_UNLIKELY(!initialized))
80 gibber_debug_set_flags_from_env ();
81 if (flag & flags)
82 {
83 va_list args;
84 gchar *msg, *node_str;
85
86 va_start (args, format);
87 msg = g_strdup_vprintf (format, args);
88 va_end (args);
89
90 node_str = wocky_node_to_string (node);
91
92 g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%s\n%s", msg, node_str);
93
94 g_free (msg);
95 g_free (node_str);
96 }
97 }
98
99 #endif
100