libgaim/protocols/jabber/parser.c

Wed, 27 Sep 2006 17:28:44 +0000

author
Sean Egan <seanegan@pidgin.im>
date
Wed, 27 Sep 2006 17:28:44 +0000
changeset 14700
98dc3d9a69e3
parent 14690
9287ecc4adb1
child 15158
501a55683bf2
permissions
-rw-r--r--

[gaim-migrate @ 17384]
GtkCellRendererExpander draws an expander in a renderer to avoid a large, needless margin.
The approach is a bit hacky, but it's a good job.

- RTL fix in GtkStatusBox
- Drag-and-drop image into the global buddy icon selector to set a buddy icon

7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
2 * gaim - Jabber XML parser stuff
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
3 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
4 * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
5 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
9 * (at your option) any later version.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
10 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
14 * GNU General Public License for more details.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
15 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
19 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
20 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
21 #include "internal.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
22
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
23 #include <libxml/parser.h>
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
24
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
25 #include "connection.h"
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
26 #include "debug.h"
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
27 #include "jabber.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
28 #include "parser.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
29 #include "xmlnode.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
30
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
31 static void
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
32 jabber_parser_element_start_libxml(void *user_data,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
33 const xmlChar *element_name, const xmlChar *prefix, const xmlChar *namespace,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
34 int nb_namespaces, const xmlChar **namespaces,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
35 int nb_attributes, int nb_defaulted, const xmlChar **attributes)
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
36 {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
37 JabberStream *js = user_data;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
38 xmlnode *node;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
39 int i;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
40
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
41 if(!element_name) {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
42 return;
14690
9287ecc4adb1 [gaim-migrate @ 17369]
Daniel Atallah <datallah@pidgin.im>
parents: 14685
diff changeset
43 } else if(!xmlStrcmp(element_name, (xmlChar*) "stream")) {
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
44 js->protocol_version = JABBER_PROTO_0_9;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
45 for(i=0; i < nb_attributes * 5; i += 5) {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
46 int attrib_len = attributes[i+4] - attributes[i+3];
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
47 char *attrib = g_malloc(attrib_len + 1);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
48 memcpy(attrib, attributes[i+3], attrib_len);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
49 attrib[attrib_len] = '\0';
14498
ede839a78714 [gaim-migrate @ 17150]
Mark Doliner <markdoliner@pidgin.im>
parents: 14476
diff changeset
50
14690
9287ecc4adb1 [gaim-migrate @ 17369]
Daniel Atallah <datallah@pidgin.im>
parents: 14685
diff changeset
51 if(!xmlStrcmp(attributes[i], (xmlChar*) "version")
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
52 && !strcmp(attrib, "1.0")) {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
53 js->protocol_version = JABBER_PROTO_1_0;
14685
7622a9ca1794 [gaim-migrate @ 17352]
Daniel Atallah <datallah@pidgin.im>
parents: 14538
diff changeset
54 g_free(attrib);
14690
9287ecc4adb1 [gaim-migrate @ 17369]
Daniel Atallah <datallah@pidgin.im>
parents: 14685
diff changeset
55 } else if(!xmlStrcmp(attributes[i], (xmlChar*) "id")) {
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
56 if(js->stream_id)
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
57 g_free(js->stream_id);
14685
7622a9ca1794 [gaim-migrate @ 17352]
Daniel Atallah <datallah@pidgin.im>
parents: 14538
diff changeset
58 js->stream_id = attrib;
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
59 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
60 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
61 if(js->protocol_version == JABBER_PROTO_0_9)
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
62 js->auth_type = JABBER_AUTH_IQ_AUTH;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
63
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
64 if(js->state == JABBER_STREAM_INITIALIZING)
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
65 jabber_stream_set_state(js, JABBER_STREAM_AUTHENTICATING);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
66 } else {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
67
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
68 if(js->current)
14690
9287ecc4adb1 [gaim-migrate @ 17369]
Daniel Atallah <datallah@pidgin.im>
parents: 14685
diff changeset
69 node = xmlnode_new_child(js->current, (const char*) element_name);
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
70 else
14690
9287ecc4adb1 [gaim-migrate @ 17369]
Daniel Atallah <datallah@pidgin.im>
parents: 14685
diff changeset
71 node = xmlnode_new((const char*) element_name);
9287ecc4adb1 [gaim-migrate @ 17369]
Daniel Atallah <datallah@pidgin.im>
parents: 14685
diff changeset
72 xmlnode_set_namespace(node, (const char*) namespace);
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
73
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
74 for(i=0; i < nb_attributes * 5; i+=5) {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
75 int attrib_len = attributes[i+4] - attributes[i+3];
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
76 char *attrib = g_malloc(attrib_len + 1);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
77 memcpy(attrib, attributes[i+3], attrib_len);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
78 attrib[attrib_len] = '\0';
14690
9287ecc4adb1 [gaim-migrate @ 17369]
Daniel Atallah <datallah@pidgin.im>
parents: 14685
diff changeset
79 xmlnode_set_attrib(node, (const char*) attributes[i], attrib);
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
80 g_free(attrib);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
81 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
82
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
83 js->current = node;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
84 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
85 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
86
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
87 static void
14498
ede839a78714 [gaim-migrate @ 17150]
Mark Doliner <markdoliner@pidgin.im>
parents: 14476
diff changeset
88 jabber_parser_element_end_libxml(void *user_data, const xmlChar *element_name,
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
89 const xmlChar *prefix, const xmlChar *namespace)
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
90 {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
91 JabberStream *js = user_data;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
92
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
93 if(!js->current)
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
94 return;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
95
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
96 if(js->current->parent) {
14690
9287ecc4adb1 [gaim-migrate @ 17369]
Daniel Atallah <datallah@pidgin.im>
parents: 14685
diff changeset
97 if(!xmlStrcmp((xmlChar*) js->current->name, element_name))
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
98 js->current = js->current->parent;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
99 } else {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
100 xmlnode *packet = js->current;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
101 js->current = NULL;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
102 jabber_process_packet(js, packet);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
103 xmlnode_free(packet);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
104 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
105 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
106
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
107 static void
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
108 jabber_parser_element_text_libxml(void *user_data, const xmlChar *text, int text_len)
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
109 {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
110 JabberStream *js = user_data;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
111
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
112 if(!js->current)
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
113 return;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
114
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
115 if(!text || !text_len)
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
116 return;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
117
14690
9287ecc4adb1 [gaim-migrate @ 17369]
Daniel Atallah <datallah@pidgin.im>
parents: 14685
diff changeset
118 xmlnode_insert_data(js->current, (const char*) text, text_len);
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
119 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
120
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
121 static xmlSAXHandler jabber_parser_libxml = {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
122 .internalSubset = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
123 .isStandalone = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
124 .hasInternalSubset = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
125 .hasExternalSubset = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
126 .resolveEntity = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
127 .getEntity = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
128 .entityDecl = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
129 .notationDecl = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
130 .attributeDecl = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
131 .elementDecl = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
132 .unparsedEntityDecl = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
133 .setDocumentLocator = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
134 .startDocument = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
135 .endDocument = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
136 .startElement = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
137 .endElement = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
138 .reference = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
139 .characters = jabber_parser_element_text_libxml,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
140 .ignorableWhitespace = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
141 .processingInstruction = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
142 .comment = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
143 .warning = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
144 .error = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
145 .fatalError = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
146 .getParameterEntity = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
147 .cdataBlock = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
148 .externalSubset = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
149 .initialized = XML_SAX2_MAGIC,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
150 ._private = NULL,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
151 .startElementNs = jabber_parser_element_start_libxml,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
152 .endElementNs = jabber_parser_element_end_libxml,
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
153 .serror = NULL
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
154 };
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
155
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
156 void
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
157 jabber_parser_setup(JabberStream *js)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
158 {
14538
ada84c622f39 [gaim-migrate @ 17194]
Etan Reisner <deryni@pidgin.im>
parents: 14498
diff changeset
159 /* This seems backwards, but it makes sense. The libxml code creates
ada84c622f39 [gaim-migrate @ 17194]
Etan Reisner <deryni@pidgin.im>
parents: 14498
diff changeset
160 * the parser context when you try to use it (this way, it can figure
ada84c622f39 [gaim-migrate @ 17194]
Etan Reisner <deryni@pidgin.im>
parents: 14498
diff changeset
161 * out the encoding at creation time. So, setting up the parser is
ada84c622f39 [gaim-migrate @ 17194]
Etan Reisner <deryni@pidgin.im>
parents: 14498
diff changeset
162 * just a matter of destroying any current parser. */
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
163 if (js->context) {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
164 xmlParseChunk(js->context, NULL,0,1);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
165 xmlFreeParserCtxt(js->context);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
166 js->context = NULL;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
167 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
168 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
169
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
170
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
171 void jabber_parser_process(JabberStream *js, const char *buf, int len)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
172 {
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
173 if (js->context == NULL) {
14538
ada84c622f39 [gaim-migrate @ 17194]
Etan Reisner <deryni@pidgin.im>
parents: 14498
diff changeset
174 /* libxml inconsistently starts parsing on creating the
ada84c622f39 [gaim-migrate @ 17194]
Etan Reisner <deryni@pidgin.im>
parents: 14498
diff changeset
175 * parser, so do a ParseChunk right afterwards to force it. */
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
176 js->context = xmlCreatePushParserCtxt(&jabber_parser_libxml, js, buf, len, NULL);
14700
98dc3d9a69e3 [gaim-migrate @ 17384]
Sean Egan <seanegan@pidgin.im>
parents: 14690
diff changeset
177 xmlParseChunk(js->context, "", 0, 0);
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
178 } else if (xmlParseChunk(js->context, buf, len, 0) < 0) {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
179 gaim_connection_error(js->gc, _("XML Parse error"));
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 8296
diff changeset
180 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
181 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
182

mercurial