~ubuntu-branches/ubuntu/maverick/telepathy-salut/maverick

« back to all changes in this revision

Viewing changes to lib/gibber/gibber-debug.c

  • Committer: Bazaar Package Importer
  • Author(s): Sjoerd Simons
  • Date: 2007-06-13 10:54:25 UTC
  • mto: (7.1.1 hardy) (9.1.1 jaunty) (1.3.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 5.
  • Revision ID: james.westby@ubuntu.com-20070613105425-6y7im8a63vq5ooyc
Tags: upstream-0.1.3
ImportĀ upstreamĀ versionĀ 0.1.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
static gboolean initialized = FALSE;
10
10
 
11
11
static GDebugKey keys[] = {
12
 
  { "transport",      DEBUG_TRANSPORT },
13
 
  { "net",            DEBUG_NET },
14
 
  { "xmpp",           DEBUG_XMPP },
15
 
  { "xmpp-reader",    DEBUG_XMPP_READER },
16
 
  { "xmpp-writer",    DEBUG_XMPP_WRITER },
17
 
  { "sasl",           DEBUG_SASL        },
18
 
  { "ssl",            DEBUG_SSL         },
19
 
  { "all",            ~0 },
 
12
  { "transport",         DEBUG_TRANSPORT         },
 
13
  { "net",               DEBUG_NET               },
 
14
  { "xmpp",              DEBUG_XMPP              },
 
15
  { "xmpp-reader",       DEBUG_XMPP_READER       },
 
16
  { "xmpp-writer",       DEBUG_XMPP_WRITER       },
 
17
  { "sasl",              DEBUG_SASL              },
 
18
  { "ssl",               DEBUG_SSL               },
 
19
  { "rmulticast",        DEBUG_RMULTICAST        },
 
20
  { "rmulticast-sender", DEBUG_RMULTICAST_SENDER },
 
21
  { "muc-connection",    DEBUG_MUC_CONNECTION    },
 
22
  { "all",               ~0                      },
20
23
  { 0, },
21
24
};
22
25
 
60
63
      va_end (args);
61
64
    }
62
65
}
 
66
 
 
67
typedef struct
 
68
{
 
69
  GString *string;
 
70
  gchar *indent;
 
71
} PrintStanzaData;
 
72
 
 
73
static gboolean
 
74
attribute_to_string (const gchar *key,
 
75
                     const gchar *value,
 
76
                     const gchar *ns,
 
77
                     gpointer user_data)
 
78
{
 
79
  PrintStanzaData *data = user_data;
 
80
 
 
81
  g_string_append_c (data->string, ' ');
 
82
  if (ns != NULL)
 
83
    {
 
84
      g_string_append (data->string, ns);
 
85
      g_string_append_c (data->string, ':');
 
86
    }
 
87
  g_string_append_printf (data->string, "%s='%s'", key, value);
 
88
 
 
89
  return TRUE;
 
90
}
 
91
 
 
92
static gboolean
 
93
node_to_string (GibberXmppNode *node,
 
94
                gpointer user_data)
 
95
{
 
96
  PrintStanzaData *data = user_data;
 
97
  gchar *old_indent;
 
98
  const gchar *ns;
 
99
 
 
100
  g_string_append_printf (data->string, "%s<%s", data->indent, node->name);
 
101
  ns = gibber_xmpp_node_get_ns (node);
 
102
  if (ns != NULL)
 
103
    g_string_append_printf (data->string, " xmlns='%s'", ns);
 
104
  gibber_xmpp_node_each_attribute (node, attribute_to_string, data);
 
105
  g_string_append_printf (data->string, ">\n");
 
106
 
 
107
  old_indent = data->indent;
 
108
  data->indent = g_strconcat (data->indent, "  ", NULL);
 
109
  if (node->content != NULL)
 
110
    g_string_append_printf (data->string, "%s%s\n", data->indent,
 
111
        node->content);
 
112
  gibber_xmpp_node_each_child (node, node_to_string, data);
 
113
  g_free (data->indent);
 
114
  data->indent = old_indent;
 
115
 
 
116
  g_string_append_printf (data->string, "%s</%s>", data->indent, node->name);
 
117
  if (data->indent[0] != '\0')
 
118
    g_string_append_c (data->string, '\n');
 
119
 
 
120
  return TRUE;
 
121
}
 
122
 
 
123
void
 
124
gibber_debug_stanza (DebugFlags flag,
 
125
                     GibberXmppStanza *stanza,
 
126
                     const gchar *format,
 
127
                     ...)
 
128
{
 
129
  if (flag & flags)
 
130
    {
 
131
      PrintStanzaData *data;
 
132
      va_list args;
 
133
      gchar *tmp;
 
134
 
 
135
      data = g_new0 (PrintStanzaData, 1);
 
136
      data->string = g_string_new ("");
 
137
      data->indent = "";
 
138
 
 
139
      va_start (args, format);
 
140
      tmp = g_strdup_vprintf (format, args);
 
141
      g_string_append (data->string, tmp);
 
142
      va_end (args);
 
143
      g_string_append_c (data->string, '\n');
 
144
      node_to_string (stanza->node, data);
 
145
 
 
146
      g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%s", data->string->str);
 
147
 
 
148
      g_free (tmp);
 
149
      g_string_free (data->string, TRUE);
 
150
      g_free (data);
 
151
    }
 
152
}