annotate mcabber/mcabber/xmpp_helper.c @ 1909:9c14153e2580

Do not display unhandled IQ result messages to the log window We display the message only in the debug log file, because these messages are usually ignored anyway (ideally we would create a handler explicitly when sending the initial IQ request). Thanks to VarLog for the report!
author Mikael Berthe <mikael@lilotux.net>
date Sun, 18 Apr 2010 14:14:05 +0200
parents 84bb3e893586
children 1a01a7ef4e43
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
1 /*
1599
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
2 * xmpp_helper.c -- Jabber protocol helper functions
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
3 *
1901
84bb3e893586 Update some file headers
Mikael Berthe <mikael@lilotux.net>
parents: 1896
diff changeset
4 * Copyright (C) 2008-2010 Frank Zschockelt <mcabber@freakysoft.de>
84bb3e893586 Update some file headers
Mikael Berthe <mikael@lilotux.net>
parents: 1896
diff changeset
5 * Copyright (C) 2005-2010 Mikael Berthe <mikael@lilotux.net>
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
6 *
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or (at
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
10 * your option) any later version.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
11 *
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful, but
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
15 * General Public License for more details.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
16 *
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
20 * USA
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
21 */
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
22
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
23 #include <string.h>
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
24 #include <stdlib.h>
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
25
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
26 #include "xmpp_helper.h"
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
27 #include "settings.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
28 #include "utils.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
29 #include "caps.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
30 #include "logprint.h"
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
31 #include "config.h"
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
32
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
33 time_t iqlast; // last message/status change time
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
34
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
35 extern char *imstatus_showmap[];
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
36
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
37 struct xmpp_error xmpp_errors[] = {
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
38 {XMPP_ERROR_REDIRECT, "302",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
39 "Redirect", "redirect", "modify"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
40 {XMPP_ERROR_BAD_REQUEST, "400",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
41 "Bad Request", "bad-request", "modify"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
42 {XMPP_ERROR_NOT_AUTHORIZED, "401",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
43 "Not Authorized", "not-authorized", "auth"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
44 {XMPP_ERROR_PAYMENT_REQUIRED, "402",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
45 "Payment Required", "payment-required", "auth"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
46 {XMPP_ERROR_FORBIDDEN, "403",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
47 "Forbidden", "forbidden", "auth"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
48 {XMPP_ERROR_NOT_FOUND, "404",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
49 "Not Found", "item-not-found", "cancel"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
50 {XMPP_ERROR_NOT_ALLOWED, "405",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
51 "Not Allowed", "not-allowed", "cancel"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
52 {XMPP_ERROR_NOT_ACCEPTABLE, "406",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
53 "Not Acceptable", "not-acceptable", "modify"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
54 {XMPP_ERROR_REGISTRATION_REQUIRED, "407",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
55 "Registration required", "registration-required", "auth"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
56 {XMPP_ERROR_REQUEST_TIMEOUT, "408",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
57 "Request Timeout", "remote-server-timeout", "wait"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
58 {XMPP_ERROR_CONFLICT, "409",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
59 "Conflict", "conflict", "cancel"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
60 {XMPP_ERROR_INTERNAL_SERVER_ERROR, "500",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
61 "Internal Server Error", "internal-server-error", "wait"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
62 {XMPP_ERROR_NOT_IMPLEMENTED, "501",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
63 "Not Implemented", "feature-not-implemented", "cancel"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
64 {XMPP_ERROR_REMOTE_SERVER_ERROR, "502",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
65 "Remote Server Error", "service-unavailable", "wait"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
66 {XMPP_ERROR_SERVICE_UNAVAILABLE, "503",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
67 "Service Unavailable", "service-unavailable", "cancel"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
68 {XMPP_ERROR_REMOTE_SERVER_TIMEOUT, "504",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
69 "Remote Server Timeout", "remote-server-timeout", "wait"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
70 {XMPP_ERROR_DISCONNECTED, "510",
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
71 "Disconnected", "service-unavailable", "cancel"},
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
72 {0, NULL, NULL, NULL, NULL}
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
73 };
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
74
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
75
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
76 #ifdef MODULES_ENABLE
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
77 static GSList *xmpp_additional_features = NULL;
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
78 static char *ver, *ver_notavail;
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
79
1857
189c2a5a4e66 Fix coding style in xmpp_helper
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1811
diff changeset
80 void xmpp_add_feature(const char *xmlns)
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
81 {
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
82 if (xmlns) {
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
83 ver = NULL;
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
84 ver_notavail = NULL;
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
85 xmpp_additional_features = g_slist_append(xmpp_additional_features,
1857
189c2a5a4e66 Fix coding style in xmpp_helper
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1811
diff changeset
86 g_strdup(xmlns));
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
87 }
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
88 }
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
89
1857
189c2a5a4e66 Fix coding style in xmpp_helper
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1811
diff changeset
90 void xmpp_del_feature(const char *xmlns)
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
91 {
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
92 GSList *feature = xmpp_additional_features;
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
93 while (feature) {
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
94 if (!strcmp(feature->data, xmlns)) {
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
95 ver = NULL;
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
96 ver_notavail = NULL;
1857
189c2a5a4e66 Fix coding style in xmpp_helper
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1811
diff changeset
97 g_free(feature->data);
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
98 xmpp_additional_features = g_slist_delete_link(xmpp_additional_features,
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
99 feature);
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
100 return;
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
101 }
1857
189c2a5a4e66 Fix coding style in xmpp_helper
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1811
diff changeset
102 feature = g_slist_next(feature);
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
103 }
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
104 }
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
105 #endif
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
106
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
107 const gchar* lm_message_node_get_child_value(LmMessageNode *node,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
108 const gchar *child)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
109 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
110 LmMessageNode *tmp;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
111 tmp = lm_message_node_find_child(node, child);
1896
c5ab9cf3819a [MUC] Fix handling of empty room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1857
diff changeset
112 if (tmp) {
c5ab9cf3819a [MUC] Fix handling of empty room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1857
diff changeset
113 const gchar *val = lm_message_node_get_value(tmp);
c5ab9cf3819a [MUC] Fix handling of empty room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1857
diff changeset
114 return (val ? val : "");
c5ab9cf3819a [MUC] Fix handling of empty room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1857
diff changeset
115 }
c5ab9cf3819a [MUC] Fix handling of empty room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1857
diff changeset
116 return NULL;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
117 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
118
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
119 static LmMessageNode *hidden = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
120
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
121 void lm_message_node_hide(LmMessageNode *node)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
122 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
123 LmMessageNode *parent = node->parent, *prev_sibling = node->prev;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
124
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
125 if (hidden) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
126 hidden->children = hidden->next = hidden->prev = hidden->parent = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
127 lm_message_node_unref(hidden);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
128 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
129
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
130 if (parent->children == node)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
131 parent->children = node->next;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
132 if (prev_sibling)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
133 prev_sibling->next = node->next;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
134 if (node->next)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
135 node->next->prev = prev_sibling;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
136 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
137
1729
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1704
diff changeset
138 // Maybe not a good idea, because it uses internals of loudmouth...
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1704
diff changeset
139 // It's used for rosternotes/bookmarks
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
140 LmMessageNode *lm_message_node_new(const gchar *name, const gchar *xmlns)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
141 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
142 LmMessageNode *node;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
143
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
144 node = g_new0 (LmMessageNode, 1);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
145 node->name = g_strdup (name);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
146 node->value = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
147 node->raw_mode = FALSE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
148 node->attributes = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
149 node->next = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
150 node->prev = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
151 node->parent = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
152 node->children = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
153
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
154 node->ref_count = 1;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
155 lm_message_node_set_attribute(node, "xmlns", xmlns);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
156 return node;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
157 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
158
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
159 void lm_message_node_insert_childnode(LmMessageNode *node,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
160 LmMessageNode *child)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
161 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
162 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
163 lm_message_node_deep_ref(child);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
164
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
165 if (node->children == NULL)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
166 node->children = child;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
167 else {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
168 for (x = node->children; x->next; x = x->next)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
169 ;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
170 x->next = child;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
171 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
172 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
173
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
174 void lm_message_node_deep_ref(LmMessageNode *node)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
175 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
176 if (node == NULL)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
177 return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
178 lm_message_node_ref(node);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
179 lm_message_node_deep_ref(node->next);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
180 lm_message_node_deep_ref(node->children);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
181 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
182
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
183 const gchar* lm_message_get_from(LmMessage *m)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
184 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
185 return lm_message_node_get_attribute(m->node, "from");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
186 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
187
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
188 const gchar* lm_message_get_id(LmMessage *m)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
189 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
190 return lm_message_node_get_attribute(m->node, "id");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
191 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
192
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
193 LmMessage *lm_message_new_iq_from_query(LmMessage *m,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
194 LmMessageSubType type)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
195 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
196 LmMessage *new;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
197 const char *from = lm_message_node_get_attribute(m->node, "from");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
198 const char *id = lm_message_node_get_attribute(m->node, "id");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
199
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
200 new = lm_message_new_with_sub_type(from, LM_MESSAGE_TYPE_IQ,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
201 type);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
202 if (id)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
203 lm_message_node_set_attribute(new->node, "id", id);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
204
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
205 return new;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
206 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
207
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
208 // entity_version(enum imstatus status)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
209 // Return a static version string for Entity Capabilities.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
210 // It should be specific to the client version, please change the id
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
211 // if you alter mcabber's disco support (or add something to the version
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
212 // number) so that it doesn't conflict with the official client.
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
213 const char *entity_version(enum imstatus status)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
214 {
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
215 #ifndef MODULES_ENABLE
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
216 static char *ver, *ver_notavail;
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
217 #endif
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
218
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
219 if (ver && (status != notavail))
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
220 return ver;
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
221 if (ver_notavail)
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
222 return ver_notavail;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
223
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
224 caps_add("");
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
225 caps_set_identity("", "client", PACKAGE_STRING, "pc");
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
226 caps_add_feature("", NS_DISCO_INFO);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
227 caps_add_feature("", NS_MUC);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
228 // advertise ChatStates only if they aren't disabled
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
229 if (!settings_opt_get_int("disable_chatstates"))
1857
189c2a5a4e66 Fix coding style in xmpp_helper
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1811
diff changeset
230 caps_add_feature("", NS_CHATSTATES);
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
231 caps_add_feature("", NS_TIME);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
232 caps_add_feature("", NS_XMPP_TIME);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
233 caps_add_feature("", NS_VERSION);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
234 caps_add_feature("", NS_PING);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
235 caps_add_feature("", NS_COMMANDS);
1602
f4a2c6f767d1 Message Receipts support (XEP-0184)
franky
parents: 1600
diff changeset
236 caps_add_feature("", NS_RECEIPTS);
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
237 if (!settings_opt_get_int("iq_last_disable") &&
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
238 (!settings_opt_get_int("iq_last_disable_when_notavail") ||
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
239 status != notavail))
1857
189c2a5a4e66 Fix coding style in xmpp_helper
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1811
diff changeset
240 caps_add_feature("", NS_LAST);
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
241 #ifdef MODULES_ENABLE
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
242 {
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
243 GSList *el = xmpp_additional_features;
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
244 while (el) {
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
245 caps_add_feature("", el->data);
1857
189c2a5a4e66 Fix coding style in xmpp_helper
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1811
diff changeset
246 el = g_slist_next(el);
1607
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
247 }
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
248 }
14690e624e9d Add modules
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1604
diff changeset
249 #endif
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
250
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
251 if (status == notavail) {
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
252 ver_notavail = caps_generate();
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
253 return ver_notavail;
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
254 }
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
255
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
256 ver = caps_generate();
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
257 return ver;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
258 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
259
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
260 LmMessageNode *lm_message_node_find_xmlns(LmMessageNode *node,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
261 const char *xmlns)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
262 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
263 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
264 const char *p;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
265
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
266 for (x = node->children ; x; x = x->next) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
267 if ((p = lm_message_node_get_attribute(x, "xmlns")) && !strcmp(p, xmlns))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
268 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
269 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
270 return x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
271 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
272
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
273 time_t lm_message_node_get_timestamp(LmMessageNode *node)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
274 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
275 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
276 const char *p;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
277
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
278 x = lm_message_node_find_xmlns(node, NS_XMPP_DELAY);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
279 if (x && (!strcmp(x->name, "delay")) &&
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
280 (p = lm_message_node_get_attribute(x, "stamp")) != NULL)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
281 return from_iso8601(p, 1);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
282 x = lm_message_node_find_xmlns(node, NS_DELAY);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
283 if (x && (p = lm_message_node_get_attribute(x, "stamp")) != NULL)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
284 return from_iso8601(p, 1);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
285 return 0;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
286 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
287
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
288 // lm_message_new_presence(status, recipient, message)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
289 // Create an xmlnode with default presence attributes
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
290 // Note: the caller must free the node after use
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
291 LmMessage *lm_message_new_presence(enum imstatus st,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
292 const char *recipient,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
293 const char *msg)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
294 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
295 unsigned int prio;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
296 LmMessage *x = lm_message_new(recipient, LM_MESSAGE_TYPE_PRESENCE);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
297
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
298 switch(st) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
299 case away:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
300 case notavail:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
301 case dontdisturb:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
302 case freeforchat:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
303 lm_message_node_add_child(x->node, "show", imstatus_showmap[st]);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
304 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
305
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
306 case invisible:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
307 lm_message_node_set_attribute(x->node, "type", "invisible");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
308 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
309
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
310 case offline:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
311 lm_message_node_set_attribute(x->node, "type", "unavailable");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
312 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
313
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
314 default:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
315 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
316 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
317
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
318 if (st == away || st == notavail)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
319 prio = settings_opt_get_int("priority_away");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
320 else
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
321 prio = settings_opt_get_int("priority");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
322
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
323 if (prio) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
324 char strprio[8];
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
325 snprintf(strprio, 8, "%d", (int)prio);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
326 lm_message_node_add_child(x->node, "priority", strprio);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
327 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
328
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
329 if (msg)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
330 lm_message_node_add_child(x->node, "status", msg);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
331
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
332 return x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
333 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
334
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
335 static const char *defaulterrormsg(guint code)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
336 {
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
337 int i;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
338
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
339 for (i = 0; xmpp_errors[i].code; ++i) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
340 if (xmpp_errors[i].code == code)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
341 return xmpp_errors[i].meaning;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
342 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
343 return NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
344 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
345
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
346 // display_server_error(x)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
347 // Display the error to the user
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
348 // x: error tag xmlnode pointer
1800
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1729
diff changeset
349 void display_server_error(LmMessageNode *x, const char *from)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
350 {
1800
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1729
diff changeset
351 const char *desc = NULL, *errname = NULL, *s;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
352 char *sdesc, *tmp;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
353
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
354 if (!x) return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
355
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
356 /* RFC3920:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
357 * The <error/> element:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
358 * o MUST contain a child element corresponding to one of the defined
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
359 * stanza error conditions specified below; this element MUST be
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
360 * qualified by the 'urn:ietf:params:xml:ns:xmpp-stanzas' namespace.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
361 */
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
362 if (x->children)
1704
ab502d645378 Update display_server_error()
Mikael Berthe <mikael@lilotux.net>
parents: 1697
diff changeset
363 errname = x->children->name;
1800
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1729
diff changeset
364
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1729
diff changeset
365 if (from)
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1729
diff changeset
366 scr_LogPrint(LPRINT_LOGNORM, "Received error packet [%s] from <%s>",
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1729
diff changeset
367 (errname ? errname : ""), from);
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1729
diff changeset
368 else
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1729
diff changeset
369 scr_LogPrint(LPRINT_LOGNORM, "Received error packet [%s]",
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1729
diff changeset
370 (errname ? errname : ""));
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
371
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
372 // For backward compatibility
1704
ab502d645378 Update display_server_error()
Mikael Berthe <mikael@lilotux.net>
parents: 1697
diff changeset
373 if (!errname && ((s = lm_message_node_get_attribute(x, "code")) != NULL)) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
374 // Default message
1704
ab502d645378 Update display_server_error()
Mikael Berthe <mikael@lilotux.net>
parents: 1697
diff changeset
375 desc = defaulterrormsg(atoi(s));
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
376 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
377
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
378 // Error tag data is better, if available
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
379 s = lm_message_node_get_value(x);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
380 if (s && *s) desc = s;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
381
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
382 // And sometimes there is a text message
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
383 s = lm_message_node_get_child_value(x, "text");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
384
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
385 if (s && *s) desc = s;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
386
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
387 // If we still have no description, let's give up
1704
ab502d645378 Update display_server_error()
Mikael Berthe <mikael@lilotux.net>
parents: 1697
diff changeset
388 if (!desc || !*desc)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
389 return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
390
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
391 // Strip trailing newlines
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
392 sdesc = g_strdup(desc);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
393 for (tmp = sdesc; *tmp; tmp++) ;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
394 if (tmp > sdesc)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
395 tmp--;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
396 while (tmp >= sdesc && (*tmp == '\n' || *tmp == '\r'))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
397 *tmp-- = '\0';
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
398
1704
ab502d645378 Update display_server_error()
Mikael Berthe <mikael@lilotux.net>
parents: 1697
diff changeset
399 if (*sdesc)
ab502d645378 Update display_server_error()
Mikael Berthe <mikael@lilotux.net>
parents: 1697
diff changeset
400 scr_LogPrint(LPRINT_LOGNORM, "Error message from server: %s", sdesc);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
401 g_free(sdesc);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
402 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents:
diff changeset
403
1811
e6d355e50d7a Update Vim modelines
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
404 /* vim: set et cindent cinoptions=>2\:2(0 ts=2 sw=2: For Vim users... */