Mercurial > pidgin
comparison libpurple/protocols/jabber/iq.c @ 25652:a4cba207068f
merge of '1f6758f8bdba42d2eeca66535d11e7de12d9e715'
and '7960f1ad9847ca6bd1918ccc6407afbcdc6cfcb8'
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Sun, 08 Feb 2009 07:07:25 +0000 |
parents | d7c195489af3 89c4edb5e545 |
children | af351471ec5a |
comparison
equal
deleted
inserted
replaced
25651:d7c195489af3 | 25652:a4cba207068f |
---|---|
280 JabberCallbackData *jcd; | 280 JabberCallbackData *jcd; |
281 xmlnode *child, *error, *x; | 281 xmlnode *child, *error, *x; |
282 const char *xmlns; | 282 const char *xmlns; |
283 const char *iq_type, *id, *from; | 283 const char *iq_type, *id, *from; |
284 JabberIqType type = JABBER_IQ_NONE; | 284 JabberIqType type = JABBER_IQ_NONE; |
285 JabberIqHandler *jih; | |
286 | 285 |
287 /* | 286 /* |
288 * child will be either the first tag child or NULL if there is no child. | 287 * child will be either the first tag child or NULL if there is no child. |
289 * Historically, we used just the 'query' subchild, but newer XEPs use | 288 * Historically, we used just the 'query' subchild, but newer XEPs use |
290 * differently named children. Grabbing the first child is (for the time | 289 * differently named children. Grabbing the first child is (for the time |
355 } | 354 } |
356 } | 355 } |
357 | 356 |
358 /* Apparently not, so lets see if we have a pre-defined handler */ | 357 /* Apparently not, so lets see if we have a pre-defined handler */ |
359 if(child && (xmlns = xmlnode_get_namespace(child))) { | 358 if(child && (xmlns = xmlnode_get_namespace(child))) { |
360 if((jih = g_hash_table_lookup(iq_handlers, xmlns))) { | 359 char *key = g_strdup_printf("%s %s", child->name, xmlns); |
360 JabberIqHandler *jih = g_hash_table_lookup(iq_handlers, key); | |
361 g_free(key); | |
362 | |
363 if(jih) { | |
361 jih(js, from, type, id, child); | 364 jih(js, from, type, id, child); |
362 return; | 365 return; |
363 } | 366 } |
364 } | 367 } |
365 | 368 |
385 | 388 |
386 jabber_iq_send(iq); | 389 jabber_iq_send(iq); |
387 } | 390 } |
388 } | 391 } |
389 | 392 |
390 void jabber_iq_register_handler(const char *xmlns, JabberIqHandler *handlerfunc) | 393 void jabber_iq_register_handler(const char *node, const char *xmlns, JabberIqHandler *handlerfunc) |
391 { | 394 { |
392 g_hash_table_replace(iq_handlers, g_strdup(xmlns), handlerfunc); | 395 /* |
396 * This is valid because nodes nor namespaces cannot have spaces in them | |
397 * (see http://www.w3.org/TR/2006/REC-xml-20060816/ and | |
398 * http://www.w3.org/TR/REC-xml-names/) | |
399 */ | |
400 char *key = g_strdup_printf("%s %s", node, xmlns); | |
401 g_hash_table_replace(iq_handlers, key, handlerfunc); | |
393 } | 402 } |
394 | 403 |
395 void jabber_iq_init(void) | 404 void jabber_iq_init(void) |
396 { | 405 { |
397 iq_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); | 406 iq_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); |
398 | 407 |
399 jabber_iq_register_handler("google:mail:notify", jabber_gmail_poke); | 408 jabber_iq_register_handler("mailbox", "google:mail:notify", jabber_gmail_poke); |
400 jabber_iq_register_handler("http://jabber.org/protocol/bytestreams", jabber_bytestreams_parse); | 409 jabber_iq_register_handler("new-mail", "google:mail:notify", jabber_gmail_poke); |
401 jabber_iq_register_handler("http://jabber.org/protocol/disco#info", jabber_disco_info_parse); | 410 jabber_iq_register_handler("query", "http://jabber.org/protocol/bytestreams", jabber_bytestreams_parse); |
402 jabber_iq_register_handler("http://jabber.org/protocol/disco#items", jabber_disco_items_parse); | 411 jabber_iq_register_handler("query", "http://jabber.org/protocol/disco#info", jabber_disco_info_parse); |
403 jabber_iq_register_handler("http://jabber.org/protocol/si", jabber_si_parse); | 412 jabber_iq_register_handler("query", "http://jabber.org/protocol/disco#items", jabber_disco_items_parse); |
404 jabber_iq_register_handler("jabber:iq:last", jabber_iq_last_parse); | 413 jabber_iq_register_handler("si", "http://jabber.org/protocol/si", jabber_si_parse); |
405 jabber_iq_register_handler("jabber:iq:oob", jabber_oob_parse); | 414 jabber_iq_register_handler("query", "jabber:iq:last", jabber_iq_last_parse); |
406 jabber_iq_register_handler("jabber:iq:register", jabber_register_parse); | 415 jabber_iq_register_handler("query", "jabber:iq:oob", jabber_oob_parse); |
407 jabber_iq_register_handler("jabber:iq:roster", jabber_roster_parse); | 416 jabber_iq_register_handler("query", "jabber:iq:register", jabber_register_parse); |
408 jabber_iq_register_handler("jabber:iq:time", jabber_iq_time_parse); | 417 jabber_iq_register_handler("query", "jabber:iq:roster", jabber_roster_parse); |
409 jabber_iq_register_handler("jabber:iq:version", jabber_iq_version_parse); | 418 jabber_iq_register_handler("query", "jabber:iq:time", jabber_iq_time_parse); |
410 jabber_iq_register_handler(XEP_0231_NAMESPACE, jabber_data_parse); | 419 jabber_iq_register_handler("query", "jabber:iq:version", jabber_iq_version_parse); |
411 jabber_iq_register_handler("urn:xmpp:ping", jabber_ping_parse); | 420 jabber_iq_register_handler("data", XEP_0231_NAMESPACE, jabber_data_parse); |
412 jabber_iq_register_handler("urn:xmpp:time", jabber_iq_time_parse); | 421 jabber_iq_register_handler("ping", "urn:xmpp:ping", jabber_ping_parse); |
422 jabber_iq_register_handler("time", "urn:xmpp:time", jabber_iq_time_parse); | |
413 } | 423 } |
414 | 424 |
415 void jabber_iq_uninit(void) | 425 void jabber_iq_uninit(void) |
416 { | 426 { |
417 g_hash_table_destroy(iq_handlers); | 427 g_hash_table_destroy(iq_handlers); |