| 36 const xmlChar *element_name, const xmlChar *prefix, const xmlChar *namespace, |
36 const xmlChar *element_name, const xmlChar *prefix, const xmlChar *namespace, |
| 37 int nb_namespaces, const xmlChar **namespaces, |
37 int nb_namespaces, const xmlChar **namespaces, |
| 38 int nb_attributes, int nb_defaulted, const xmlChar **attributes) |
38 int nb_attributes, int nb_defaulted, const xmlChar **attributes) |
| 39 { |
39 { |
| 40 JabberStream *js = user_data; |
40 JabberStream *js = user_data; |
| 41 xmlnode *node; |
41 PurpleXmlNode *node; |
| 42 int i, j; |
42 int i, j; |
| 43 |
43 |
| 44 if(!element_name) { |
44 if(!element_name) { |
| 45 return; |
45 return; |
| 46 } else if (js->stream_id == NULL) { |
46 } else if (js->stream_id == NULL) { |
| 113 #endif |
113 #endif |
| 114 } |
114 } |
| 115 } else { |
115 } else { |
| 116 |
116 |
| 117 if(js->current) |
117 if(js->current) |
| 118 node = xmlnode_new_child(js->current, (const char*) element_name); |
118 node = purple_xmlnode_new_child(js->current, (const char*) element_name); |
| 119 else |
119 else |
| 120 node = xmlnode_new((const char*) element_name); |
120 node = purple_xmlnode_new((const char*) element_name); |
| 121 xmlnode_set_namespace(node, (const char*) namespace); |
121 purple_xmlnode_set_namespace(node, (const char*) namespace); |
| 122 xmlnode_set_prefix(node, (const char *)prefix); |
122 purple_xmlnode_set_prefix(node, (const char *)prefix); |
| 123 |
123 |
| 124 if (nb_namespaces != 0) { |
124 if (nb_namespaces != 0) { |
| 125 node->namespace_map = g_hash_table_new_full( |
125 node->namespace_map = g_hash_table_new_full( |
| 126 g_str_hash, g_str_equal, g_free, g_free); |
126 g_str_hash, g_str_equal, g_free, g_free); |
| 127 |
127 |
| 141 char *attrib = g_strndup((gchar *)attributes[i+3], attrib_len); |
141 char *attrib = g_strndup((gchar *)attributes[i+3], attrib_len); |
| 142 |
142 |
| 143 txt = attrib; |
143 txt = attrib; |
| 144 attrib = purple_unescape_text(txt); |
144 attrib = purple_unescape_text(txt); |
| 145 g_free(txt); |
145 g_free(txt); |
| 146 xmlnode_set_attrib_full(node, name, attrib_ns, prefix, attrib); |
146 purple_xmlnode_set_attrib_full(node, name, attrib_ns, prefix, attrib); |
| 147 g_free(attrib); |
147 g_free(attrib); |
| 148 } |
148 } |
| 149 |
149 |
| 150 js->current = node; |
150 js->current = node; |
| 151 } |
151 } |
| 162 |
162 |
| 163 if(js->current->parent) { |
163 if(js->current->parent) { |
| 164 if(!xmlStrcmp((xmlChar*) js->current->name, element_name)) |
164 if(!xmlStrcmp((xmlChar*) js->current->name, element_name)) |
| 165 js->current = js->current->parent; |
165 js->current = js->current->parent; |
| 166 } else { |
166 } else { |
| 167 xmlnode *packet = js->current; |
167 PurpleXmlNode *packet = js->current; |
| 168 js->current = NULL; |
168 js->current = NULL; |
| 169 jabber_process_packet(js, &packet); |
169 jabber_process_packet(js, &packet); |
| 170 if (packet != NULL) |
170 if (packet != NULL) |
| 171 xmlnode_free(packet); |
171 purple_xmlnode_free(packet); |
| 172 } |
172 } |
| 173 } |
173 } |
| 174 |
174 |
| 175 static void |
175 static void |
| 176 jabber_parser_element_text_libxml(void *user_data, const xmlChar *text, int text_len) |
176 jabber_parser_element_text_libxml(void *user_data, const xmlChar *text, int text_len) |