Mercurial > pidgin.yaz
annotate libpurple/protocols/jabber/parser.c @ 32477:efe38e6319f2
Clean up SRV/TXT query functions.
* Rename _account functions to their regular form.
* Remove the unnecessary _cancel functions.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Fri, 02 Sep 2011 03:18:15 +0000 |
parents | a5b556ac1de5 |
children |
rev | line source |
---|---|
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1 /* |
15823 | 2 * purple - Jabber XML parser stuff |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3 * |
28398
c585572e80dd
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents:
27219
diff
changeset
|
4 * Purple is the legal property of its developers, whose names are too numerous |
c585572e80dd
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents:
27219
diff
changeset
|
5 * to list here. Please refer to the COPYRIGHT file distributed with this |
c585572e80dd
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents:
27219
diff
changeset
|
6 * source distribution. |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
7 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
8 * This program is free software; you can redistribute it and/or modify |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
11 * (at your option) any later version. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
12 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
16 * GNU General Public License for more details. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
17 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
19680
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
15823
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
21 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
22 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
23 #include "internal.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
24 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
25 #include <libxml/parser.h> |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
26 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
27 #include "connection.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
28 #include "debug.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
29 #include "jabber.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
30 #include "parser.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
31 #include "util.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
32 #include "xmlnode.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
33 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
34 static void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
35 jabber_parser_element_start_libxml(void *user_data, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
36 const xmlChar *element_name, const xmlChar *prefix, const xmlChar *namespace, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
37 int nb_namespaces, const xmlChar **namespaces, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
38 int nb_attributes, int nb_defaulted, const xmlChar **attributes) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
39 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
40 JabberStream *js = user_data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
41 xmlnode *node; |
24818
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
42 int i, j; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
43 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
44 if(!element_name) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
45 return; |
30003
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
46 } else if (js->stream_id == NULL) { |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
47 /* Sanity checking! */ |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
48 if (0 != xmlStrcmp(element_name, (xmlChar *) "stream") || |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
49 0 != xmlStrcmp(namespace, (xmlChar *) NS_XMPP_STREAMS)) { |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
50 /* We were expecting a <stream:stream/> opening stanza, but |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
51 * didn't get it. Bad! |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
52 */ |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
53 purple_debug_error("jabber", "Expecting stream header, got %s with " |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
54 "xmlns %s\n", element_name, namespace); |
32330
a5b556ac1de5
Rename purple_connection_error_reason to purple_connection_error
Mark Doliner <mark@kingant.net>
parents:
31534
diff
changeset
|
55 purple_connection_error(js->gc, |
30003
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
56 PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE, |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
57 _("XMPP stream header missing")); |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
58 return; |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
59 } |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
60 |
29961
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
61 js->protocol_version.major = 0; |
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
62 js->protocol_version.minor = 9; |
30003
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
63 |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
64 for (i = 0; i < nb_attributes * 5; i += 5) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
65 int attrib_len = attributes[i+4] - attributes[i+3]; |
29108
f6f35d5960e9
Use g_strndup() for great justice.
Paul Aurich <paul@darkrain42.org>
parents:
29062
diff
changeset
|
66 char *attrib = g_strndup((gchar *)attributes[i+3], attrib_len); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
67 |
29961
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
68 if(!xmlStrcmp(attributes[i], (xmlChar*) "version")) { |
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
69 const char *dot = strchr(attrib, '.'); |
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
70 |
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
71 js->protocol_version.major = atoi(attrib); |
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
72 js->protocol_version.minor = dot ? atoi(dot + 1) : 0; |
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
73 |
30003
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
74 if (js->protocol_version.major > 1) { |
29964
9d1794da1d10
jabber: Connected again; checked section 5.4.5 of the bis.
Paul Aurich <paul@darkrain42.org>
parents:
29963
diff
changeset
|
75 /* TODO: Send <unsupported-version/> error */ |
32330
a5b556ac1de5
Rename purple_connection_error_reason to purple_connection_error
Mark Doliner <mark@kingant.net>
parents:
31534
diff
changeset
|
76 purple_connection_error(js->gc, |
29961
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
77 PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE, |
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
78 _("XMPP Version Mismatch")); |
30003
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
79 g_free(attrib); |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
80 return; |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
81 } |
29962
32fe87f58d06
jabber: Backward compatibility in case any servers advertise other random 0.## versions
Paul Aurich <paul@darkrain42.org>
parents:
29961
diff
changeset
|
82 |
32fe87f58d06
jabber: Backward compatibility in case any servers advertise other random 0.## versions
Paul Aurich <paul@darkrain42.org>
parents:
29961
diff
changeset
|
83 if (js->protocol_version.major == 0 && js->protocol_version.minor != 9) { |
32fe87f58d06
jabber: Backward compatibility in case any servers advertise other random 0.## versions
Paul Aurich <paul@darkrain42.org>
parents:
29961
diff
changeset
|
84 purple_debug_warning("jabber", "Treating version %s as 0.9 for backward " |
32fe87f58d06
jabber: Backward compatibility in case any servers advertise other random 0.## versions
Paul Aurich <paul@darkrain42.org>
parents:
29961
diff
changeset
|
85 "compatibility\n", attrib); |
32fe87f58d06
jabber: Backward compatibility in case any servers advertise other random 0.## versions
Paul Aurich <paul@darkrain42.org>
parents:
29961
diff
changeset
|
86 } |
32fe87f58d06
jabber: Backward compatibility in case any servers advertise other random 0.## versions
Paul Aurich <paul@darkrain42.org>
parents:
29961
diff
changeset
|
87 g_free(attrib); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
88 } else if(!xmlStrcmp(attributes[i], (xmlChar*) "id")) { |
15635
baec42670246
Patch from MatsMattsson (Adium Trac #6429) which fixes a leak of attrib for any attribute that isn't 'id' or 'version'.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15498
diff
changeset
|
89 g_free(js->stream_id); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
90 js->stream_id = attrib; |
15635
baec42670246
Patch from MatsMattsson (Adium Trac #6429) which fixes a leak of attrib for any attribute that isn't 'id' or 'version'.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15498
diff
changeset
|
91 } else { |
24818
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
92 g_free(attrib); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
93 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
94 } |
30003
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
95 |
30882
ec12d2883266
jabber: Make the reliance on stream ID laxer. Closes #12331
Paul Aurich <paul@darkrain42.org>
parents:
30003
diff
changeset
|
96 if (js->stream_id == NULL) { |
ec12d2883266
jabber: Make the reliance on stream ID laxer. Closes #12331
Paul Aurich <paul@darkrain42.org>
parents:
30003
diff
changeset
|
97 #if 0 |
ec12d2883266
jabber: Make the reliance on stream ID laxer. Closes #12331
Paul Aurich <paul@darkrain42.org>
parents:
30003
diff
changeset
|
98 /* This was underspecified in rfc3920 as only being a SHOULD, so |
ec12d2883266
jabber: Make the reliance on stream ID laxer. Closes #12331
Paul Aurich <paul@darkrain42.org>
parents:
30003
diff
changeset
|
99 * we cannot rely on it. See #12331 and Oracle's server. |
ec12d2883266
jabber: Make the reliance on stream ID laxer. Closes #12331
Paul Aurich <paul@darkrain42.org>
parents:
30003
diff
changeset
|
100 */ |
32330
a5b556ac1de5
Rename purple_connection_error_reason to purple_connection_error
Mark Doliner <mark@kingant.net>
parents:
31534
diff
changeset
|
101 purple_connection_error(js->gc, |
30003
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
102 PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE, |
6e598ca344b3
jabber: Clear the stream header when restarting a stream, and be
Paul Aurich <paul@darkrain42.org>
parents:
29964
diff
changeset
|
103 _("XMPP stream missing ID")); |
30882
ec12d2883266
jabber: Make the reliance on stream ID laxer. Closes #12331
Paul Aurich <paul@darkrain42.org>
parents:
30003
diff
changeset
|
104 #else |
30896
4072761e3454
jabber: Slight improvements to the stream ID fix
Paul Aurich <paul@darkrain42.org>
parents:
30882
diff
changeset
|
105 /* Instead, let's make up a placeholder stream ID, which we need |
4072761e3454
jabber: Slight improvements to the stream ID fix
Paul Aurich <paul@darkrain42.org>
parents:
30882
diff
changeset
|
106 * to do because we flag on it being NULL as a special case |
4072761e3454
jabber: Slight improvements to the stream ID fix
Paul Aurich <paul@darkrain42.org>
parents:
30882
diff
changeset
|
107 * in this parsing code. |
30882
ec12d2883266
jabber: Make the reliance on stream ID laxer. Closes #12331
Paul Aurich <paul@darkrain42.org>
parents:
30003
diff
changeset
|
108 */ |
30896
4072761e3454
jabber: Slight improvements to the stream ID fix
Paul Aurich <paul@darkrain42.org>
parents:
30882
diff
changeset
|
109 js->stream_id = g_strdup(""); |
4072761e3454
jabber: Slight improvements to the stream ID fix
Paul Aurich <paul@darkrain42.org>
parents:
30882
diff
changeset
|
110 purple_debug_info("jabber", "Server failed to specify a stream " |
4072761e3454
jabber: Slight improvements to the stream ID fix
Paul Aurich <paul@darkrain42.org>
parents:
30882
diff
changeset
|
111 "ID (underspecified in rfc3920, but intended " |
31534
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
31026
diff
changeset
|
112 "to be a MUST; digest legacy auth may fail.\n"); |
30882
ec12d2883266
jabber: Make the reliance on stream ID laxer. Closes #12331
Paul Aurich <paul@darkrain42.org>
parents:
30003
diff
changeset
|
113 #endif |
ec12d2883266
jabber: Make the reliance on stream ID laxer. Closes #12331
Paul Aurich <paul@darkrain42.org>
parents:
30003
diff
changeset
|
114 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
115 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
116 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
117 if(js->current) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
118 node = xmlnode_new_child(js->current, (const char*) element_name); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
119 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
120 node = xmlnode_new((const char*) element_name); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
121 xmlnode_set_namespace(node, (const char*) namespace); |
24818
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
122 xmlnode_set_prefix(node, (const char *)prefix); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
123 |
24818
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
124 if (nb_namespaces != 0) { |
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
125 node->namespace_map = g_hash_table_new_full( |
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
126 g_str_hash, g_str_equal, g_free, g_free); |
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
127 |
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
128 for (i = 0, j = 0; i < nb_namespaces; i++, j += 2) { |
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
129 const char *key = (const char *)namespaces[j]; |
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
130 const char *val = (const char *)namespaces[j + 1]; |
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
131 g_hash_table_insert(node->namespace_map, |
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
132 g_strdup(key ? key : ""), g_strdup(val ? val : "")); |
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
133 } |
f5c0cdaef99a
Don't ignore XML namespace and prefix information when parsing incoming XMPP
Michal Witkowski <neuro@o2.pl>
parents:
24425
diff
changeset
|
134 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
135 for(i=0; i < nb_attributes * 5; i+=5) { |
26262
b03430dae08e
Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25110
diff
changeset
|
136 const char *name = (const char *)attributes[i]; |
b03430dae08e
Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25110
diff
changeset
|
137 const char *prefix = (const char *)attributes[i+1]; |
25110
b096f7fb6899
Don't set an attribute prefix on the node, and remove an unnecessary call
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24898
diff
changeset
|
138 const char *attrib_ns = (const char *)attributes[i+2]; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
139 char *txt; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
140 int attrib_len = attributes[i+4] - attributes[i+3]; |
29108
f6f35d5960e9
Use g_strndup() for great justice.
Paul Aurich <paul@darkrain42.org>
parents:
29062
diff
changeset
|
141 char *attrib = g_strndup((gchar *)attributes[i+3], attrib_len); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
142 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
143 txt = attrib; |
29398
e1c01f236674
Correctly parse "<br>" in an XML attribute. Closes #11318.
Paul Aurich <paul@darkrain42.org>
parents:
29126
diff
changeset
|
144 attrib = purple_unescape_text(txt); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
145 g_free(txt); |
26262
b03430dae08e
Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25110
diff
changeset
|
146 xmlnode_set_attrib_full(node, name, attrib_ns, prefix, attrib); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
147 g_free(attrib); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
148 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
149 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
150 js->current = node; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
151 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
152 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
153 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
154 static void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
155 jabber_parser_element_end_libxml(void *user_data, const xmlChar *element_name, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
156 const xmlChar *prefix, const xmlChar *namespace) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
157 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
158 JabberStream *js = user_data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
159 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
160 if(!js->current) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
161 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
162 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
163 if(js->current->parent) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
164 if(!xmlStrcmp((xmlChar*) js->current->name, element_name)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
165 js->current = js->current->parent; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
166 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
167 xmlnode *packet = js->current; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
168 js->current = NULL; |
17621
bbd92ee894f2
Fixed a bug in the XMPP parser involving event handlers that replace the xmlnode packet. This caused double frees in this situation. The replacing function must free the xmlnode, since multiple event handlers could do this, and the intermediate xml trees would leak otherwise.
Andreas Monitzer <pidgin@monitzer.com>
parents:
17606
diff
changeset
|
169 jabber_process_packet(js, &packet); |
24425
7cf760f3560e
Don't try to free NULL xmlnodes stolen by jabber-receiving-xmlnode handlers
Will Thompson <will.thompson@collabora.co.uk>
parents:
24419
diff
changeset
|
170 if (packet != NULL) |
7cf760f3560e
Don't try to free NULL xmlnodes stolen by jabber-receiving-xmlnode handlers
Will Thompson <will.thompson@collabora.co.uk>
parents:
24419
diff
changeset
|
171 xmlnode_free(packet); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
172 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
173 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
174 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
175 static void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
176 jabber_parser_element_text_libxml(void *user_data, const xmlChar *text, int text_len) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
177 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
178 JabberStream *js = user_data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
179 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
180 if(!js->current) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
181 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
182 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
183 if(!text || !text_len) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
184 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
185 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
186 xmlnode_insert_data(js->current, (const char*) text, text_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
187 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
188 |
23426
1b3aea146613
Added a structured error handler callback to the xmlSAXHandler struct.
Evan Schoenberg <evan.s@dreskin.net>
parents:
22914
diff
changeset
|
189 static void |
1b3aea146613
Added a structured error handler callback to the xmlSAXHandler struct.
Evan Schoenberg <evan.s@dreskin.net>
parents:
22914
diff
changeset
|
190 jabber_parser_structured_error_handler(void *user_data, xmlErrorPtr error) |
1b3aea146613
Added a structured error handler callback to the xmlSAXHandler struct.
Evan Schoenberg <evan.s@dreskin.net>
parents:
22914
diff
changeset
|
191 { |
1b3aea146613
Added a structured error handler callback to the xmlSAXHandler struct.
Evan Schoenberg <evan.s@dreskin.net>
parents:
22914
diff
changeset
|
192 JabberStream *js = user_data; |
1b3aea146613
Added a structured error handler callback to the xmlSAXHandler struct.
Evan Schoenberg <evan.s@dreskin.net>
parents:
22914
diff
changeset
|
193 |
24416
e2f5a4a091b5
Don't log an error when parsing vcard data. Also, these messages
Mark Doliner <mark@kingant.net>
parents:
23884
diff
changeset
|
194 if (error->level == XML_ERR_WARNING && error->message != NULL |
29062 | 195 && g_str_equal(error->message, "xmlns: URI vcard-temp is not absolute\n")) |
24416
e2f5a4a091b5
Don't log an error when parsing vcard data. Also, these messages
Mark Doliner <mark@kingant.net>
parents:
23884
diff
changeset
|
196 /* |
e2f5a4a091b5
Don't log an error when parsing vcard data. Also, these messages
Mark Doliner <mark@kingant.net>
parents:
23884
diff
changeset
|
197 * This message happens when parsing vcards, and is normal, so don't |
e2f5a4a091b5
Don't log an error when parsing vcard data. Also, these messages
Mark Doliner <mark@kingant.net>
parents:
23884
diff
changeset
|
198 * bother logging it because people scare easily. |
e2f5a4a091b5
Don't log an error when parsing vcard data. Also, these messages
Mark Doliner <mark@kingant.net>
parents:
23884
diff
changeset
|
199 */ |
e2f5a4a091b5
Don't log an error when parsing vcard data. Also, these messages
Mark Doliner <mark@kingant.net>
parents:
23884
diff
changeset
|
200 return; |
e2f5a4a091b5
Don't log an error when parsing vcard data. Also, these messages
Mark Doliner <mark@kingant.net>
parents:
23884
diff
changeset
|
201 |
29109
6ebacc1710b2
jabber: Use the error code instead of string matching.
Paul Aurich <paul@darkrain42.org>
parents:
29108
diff
changeset
|
202 if (error->level == XML_ERR_FATAL && error->code == XML_ERR_DOCUMENT_END) |
29033
61cd675b73df
jabber: Don't print "Extra content at the end of the document".
Paul Aurich <paul@darkrain42.org>
parents:
28694
diff
changeset
|
203 /* |
61cd675b73df
jabber: Don't print "Extra content at the end of the document".
Paul Aurich <paul@darkrain42.org>
parents:
28694
diff
changeset
|
204 * This is probably more annoying than the vcard-temp error; it occurs |
61cd675b73df
jabber: Don't print "Extra content at the end of the document".
Paul Aurich <paul@darkrain42.org>
parents:
28694
diff
changeset
|
205 * because we disconnect in most cases without waiting for the receiving |
61cd675b73df
jabber: Don't print "Extra content at the end of the document".
Paul Aurich <paul@darkrain42.org>
parents:
28694
diff
changeset
|
206 * </stream:stream> (limitations of libpurple) |
61cd675b73df
jabber: Don't print "Extra content at the end of the document".
Paul Aurich <paul@darkrain42.org>
parents:
28694
diff
changeset
|
207 */ |
61cd675b73df
jabber: Don't print "Extra content at the end of the document".
Paul Aurich <paul@darkrain42.org>
parents:
28694
diff
changeset
|
208 return; |
61cd675b73df
jabber: Don't print "Extra content at the end of the document".
Paul Aurich <paul@darkrain42.org>
parents:
28694
diff
changeset
|
209 |
23426
1b3aea146613
Added a structured error handler callback to the xmlSAXHandler struct.
Evan Schoenberg <evan.s@dreskin.net>
parents:
22914
diff
changeset
|
210 purple_debug_error("jabber", "XML parser error for JabberStream %p: " |
24416
e2f5a4a091b5
Don't log an error when parsing vcard data. Also, these messages
Mark Doliner <mark@kingant.net>
parents:
23884
diff
changeset
|
211 "Domain %i, code %i, level %i: %s", |
23426
1b3aea146613
Added a structured error handler callback to the xmlSAXHandler struct.
Evan Schoenberg <evan.s@dreskin.net>
parents:
22914
diff
changeset
|
212 js, |
1b3aea146613
Added a structured error handler callback to the xmlSAXHandler struct.
Evan Schoenberg <evan.s@dreskin.net>
parents:
22914
diff
changeset
|
213 error->domain, error->code, error->level, |
24419
8de8ca65e1d9
I know Mark was trying to save newlines, but I had one to spare.
Richard Laager <rlaager@wiktel.com>
parents:
24416
diff
changeset
|
214 (error->message ? error->message : "(null)\n")); |
23426
1b3aea146613
Added a structured error handler callback to the xmlSAXHandler struct.
Evan Schoenberg <evan.s@dreskin.net>
parents:
22914
diff
changeset
|
215 } |
1b3aea146613
Added a structured error handler callback to the xmlSAXHandler struct.
Evan Schoenberg <evan.s@dreskin.net>
parents:
22914
diff
changeset
|
216 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
217 static xmlSAXHandler jabber_parser_libxml = { |
22914
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
218 NULL, /*internalSubset*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
219 NULL, /*isStandalone*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
220 NULL, /*hasInternalSubset*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
221 NULL, /*hasExternalSubset*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
222 NULL, /*resolveEntity*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
223 NULL, /*getEntity*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
224 NULL, /*entityDecl*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
225 NULL, /*notationDecl*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
226 NULL, /*attributeDecl*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
227 NULL, /*elementDecl*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
228 NULL, /*unparsedEntityDecl*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
229 NULL, /*setDocumentLocator*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
230 NULL, /*startDocument*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
231 NULL, /*endDocument*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
232 NULL, /*startElement*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
233 NULL, /*endElement*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
234 NULL, /*reference*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
235 jabber_parser_element_text_libxml, /*characters*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
236 NULL, /*ignorableWhitespace*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
237 NULL, /*processingInstruction*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
238 NULL, /*comment*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
239 NULL, /*warning*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
240 NULL, /*error*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
241 NULL, /*fatalError*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
242 NULL, /*getParameterEntity*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
243 NULL, /*cdataBlock*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
244 NULL, /*externalSubset*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
245 XML_SAX2_MAGIC, /*initialized*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
246 NULL, /*_private*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
247 jabber_parser_element_start_libxml, /*startElementNs*/ |
ada1640fa260
Using named elements in a struct initialization doesn't work in MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21358
diff
changeset
|
248 jabber_parser_element_end_libxml, /*endElementNs*/ |
23426
1b3aea146613
Added a structured error handler callback to the xmlSAXHandler struct.
Evan Schoenberg <evan.s@dreskin.net>
parents:
22914
diff
changeset
|
249 jabber_parser_structured_error_handler /*serror*/ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
250 }; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
251 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
252 void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
253 jabber_parser_setup(JabberStream *js) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
254 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
255 /* This seems backwards, but it makes sense. The libxml code creates |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
256 * the parser context when you try to use it (this way, it can figure |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
257 * out the encoding at creation time. So, setting up the parser is |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
258 * just a matter of destroying any current parser. */ |
17603
7a3a66c6530a
Fixed a leak: The XML parser was never cleaned up on disconnect.
Andreas Monitzer <pidgin@monitzer.com>
parents:
15823
diff
changeset
|
259 jabber_parser_free(js); |
7a3a66c6530a
Fixed a leak: The XML parser was never cleaned up on disconnect.
Andreas Monitzer <pidgin@monitzer.com>
parents:
15823
diff
changeset
|
260 } |
7a3a66c6530a
Fixed a leak: The XML parser was never cleaned up on disconnect.
Andreas Monitzer <pidgin@monitzer.com>
parents:
15823
diff
changeset
|
261 |
7a3a66c6530a
Fixed a leak: The XML parser was never cleaned up on disconnect.
Andreas Monitzer <pidgin@monitzer.com>
parents:
15823
diff
changeset
|
262 void jabber_parser_free(JabberStream *js) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
263 if (js->context) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
264 xmlParseChunk(js->context, NULL,0,1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
265 xmlFreeParserCtxt(js->context); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
266 js->context = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
267 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
268 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
269 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
270 void jabber_parser_process(JabberStream *js, const char *buf, int len) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
271 { |
23427
0eca6c183d60
xmlParseChunk() never returns less than 0. It retusn an error code from
Evan Schoenberg <evan.s@dreskin.net>
parents:
23426
diff
changeset
|
272 int ret; |
0eca6c183d60
xmlParseChunk() never returns less than 0. It retusn an error code from
Evan Schoenberg <evan.s@dreskin.net>
parents:
23426
diff
changeset
|
273 |
23429 | 274 if (js->context == NULL) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
275 /* libxml inconsistently starts parsing on creating the |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
276 * parser, so do a ParseChunk right afterwards to force it. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
277 js->context = xmlCreatePushParserCtxt(&jabber_parser_libxml, js, buf, len, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
278 xmlParseChunk(js->context, "", 0, 0); |
23427
0eca6c183d60
xmlParseChunk() never returns less than 0. It retusn an error code from
Evan Schoenberg <evan.s@dreskin.net>
parents:
23426
diff
changeset
|
279 } else if ((ret = xmlParseChunk(js->context, buf, len, 0)) != XML_ERR_OK) { |
23884
08c50482d5a2
Only disconnect xmpp connections during xml parsing if the error is an
Stu Tomlinson <stu@nosnilmot.com>
parents:
23429
diff
changeset
|
280 xmlError *err = xmlCtxtGetLastError(js->context); |
25871
f424f26dd329
*** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents:
25110
diff
changeset
|
281 /* |
f424f26dd329
*** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents:
25110
diff
changeset
|
282 * libxml2 uses a global setting to determine whether or not to store |
f424f26dd329
*** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents:
25110
diff
changeset
|
283 * warnings. Other libraries may set this, which causes err to be |
f424f26dd329
*** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents:
25110
diff
changeset
|
284 * NULL. See #8136 for details. |
f424f26dd329
*** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents:
25110
diff
changeset
|
285 */ |
f424f26dd329
*** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents:
25110
diff
changeset
|
286 xmlErrorLevel level = XML_ERR_WARNING; |
23427
0eca6c183d60
xmlParseChunk() never returns less than 0. It retusn an error code from
Evan Schoenberg <evan.s@dreskin.net>
parents:
23426
diff
changeset
|
287 |
25871
f424f26dd329
*** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents:
25110
diff
changeset
|
288 if (err) |
f424f26dd329
*** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents:
25110
diff
changeset
|
289 level = err->level; |
f424f26dd329
*** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents:
25110
diff
changeset
|
290 |
f424f26dd329
*** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <paul@darkrain42.org>
parents:
25110
diff
changeset
|
291 switch (level) { |
24898
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
292 case XML_ERR_NONE: |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
293 purple_debug_info("jabber", "xmlParseChunk returned info %i\n", ret); |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
294 break; |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
295 case XML_ERR_WARNING: |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
296 purple_debug_warning("jabber", "xmlParseChunk returned warning %i\n", ret); |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
297 break; |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
298 case XML_ERR_ERROR: |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
299 purple_debug_error("jabber", "xmlParseChunk returned error %i\n", ret); |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
300 break; |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
301 case XML_ERR_FATAL: |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
302 purple_debug_error("jabber", "xmlParseChunk returned fatal %i\n", ret); |
32330
a5b556ac1de5
Rename purple_connection_error_reason to purple_connection_error
Mark Doliner <mark@kingant.net>
parents:
31534
diff
changeset
|
303 purple_connection_error (js->gc, |
24898
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
304 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
305 _("XML Parse error")); |
ee9b00cc4298
Make XML parsing error levels match libxml2's levels, making less important
Stu Tomlinson <stu@nosnilmot.com>
parents:
24818
diff
changeset
|
306 break; |
23428
ce361cc8e43b
Drop and then recover from XML messages which trigger invalid character
Evan Schoenberg <evan.s@dreskin.net>
parents:
23427
diff
changeset
|
307 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
308 } |
28694
c7aaad89a2f8
jabber: Re-arrange the code that detects legacy servers so that we don't stomp over "Host Unknown" errors.
Paul Aurich <paul@darkrain42.org>
parents:
28398
diff
changeset
|
309 |
29961
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
310 if (js->protocol_version.major == 0 && js->protocol_version.minor == 9 && |
618c4165d4f8
jabber: Treat the version properly.
Paul Aurich <paul@darkrain42.org>
parents:
29753
diff
changeset
|
311 !js->gc->disconnect_timeout && |
28694
c7aaad89a2f8
jabber: Re-arrange the code that detects legacy servers so that we don't stomp over "Host Unknown" errors.
Paul Aurich <paul@darkrain42.org>
parents:
28398
diff
changeset
|
312 (js->state == JABBER_STREAM_INITIALIZING || |
c7aaad89a2f8
jabber: Re-arrange the code that detects legacy servers so that we don't stomp over "Host Unknown" errors.
Paul Aurich <paul@darkrain42.org>
parents:
28398
diff
changeset
|
313 js->state == JABBER_STREAM_INITIALIZING_ENCRYPTION)) { |
c7aaad89a2f8
jabber: Re-arrange the code that detects legacy servers so that we don't stomp over "Host Unknown" errors.
Paul Aurich <paul@darkrain42.org>
parents:
28398
diff
changeset
|
314 /* |
c7aaad89a2f8
jabber: Re-arrange the code that detects legacy servers so that we don't stomp over "Host Unknown" errors.
Paul Aurich <paul@darkrain42.org>
parents:
28398
diff
changeset
|
315 * Legacy servers don't advertise features, so if we've just gotten |
c7aaad89a2f8
jabber: Re-arrange the code that detects legacy servers so that we don't stomp over "Host Unknown" errors.
Paul Aurich <paul@darkrain42.org>
parents:
28398
diff
changeset
|
316 * the opening <stream:stream> and there was no version, we need to |
c7aaad89a2f8
jabber: Re-arrange the code that detects legacy servers so that we don't stomp over "Host Unknown" errors.
Paul Aurich <paul@darkrain42.org>
parents:
28398
diff
changeset
|
317 * immediately start legacy IQ auth. |
c7aaad89a2f8
jabber: Re-arrange the code that detects legacy servers so that we don't stomp over "Host Unknown" errors.
Paul Aurich <paul@darkrain42.org>
parents:
28398
diff
changeset
|
318 */ |
c7aaad89a2f8
jabber: Re-arrange the code that detects legacy servers so that we don't stomp over "Host Unknown" errors.
Paul Aurich <paul@darkrain42.org>
parents:
28398
diff
changeset
|
319 jabber_stream_set_state(js, JABBER_STREAM_AUTHENTICATING); |
29078
8ada06fb65ed
jabber: Factor the SASL auth methods into their own files.
Paul Aurich <paul@darkrain42.org>
parents:
28694
diff
changeset
|
320 jabber_auth_start_old(js); |
28694
c7aaad89a2f8
jabber: Re-arrange the code that detects legacy servers so that we don't stomp over "Host Unknown" errors.
Paul Aurich <paul@darkrain42.org>
parents:
28398
diff
changeset
|
321 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
322 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
323 |