Mercurial > pidgin
comparison src/protocols/jabber/chat.c @ 7955:119a22025818
[gaim-migrate @ 8630]
fun jabber stuff, which isn't done yet. mostly harmless, and committing this now makes the next
commit that much easier for a lazy person such as myself to type.
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Mon, 29 Dec 2003 08:59:22 +0000 |
parents | 68900f9cb540 |
children | 6fca0d9cc98b |
comparison
equal
deleted
inserted
replaced
7954:6dc91824d8d4 | 7955:119a22025818 |
---|---|
365 char *room_jid; | 365 char *room_jid; |
366 | 366 |
367 if(!chat) | 367 if(!chat) |
368 return; | 368 return; |
369 | 369 |
370 if(!chat->muc) { | |
371 gaim_notify_error(chat->js->gc, _("Room Configuration Error"), _("Room Configuration Error"), | |
372 _("This room is not capable of being configured")); | |
373 return; | |
374 } | |
375 | |
370 iq = jabber_iq_new_query(chat->js, JABBER_IQ_SET, | 376 iq = jabber_iq_new_query(chat->js, JABBER_IQ_SET, |
371 "http://jabber.org/protocol/muc#owner"); | 377 "http://jabber.org/protocol/muc#owner"); |
372 query = xmlnode_get_child(iq->node, "query"); | 378 query = xmlnode_get_child(iq->node, "query"); |
373 room_jid = g_strdup_printf("%s@%s", chat->room, chat->server); | 379 room_jid = g_strdup_printf("%s@%s", chat->room, chat->server); |
374 | 380 |
401 | 407 |
402 jabber_iq_send(iq); | 408 jabber_iq_send(iq); |
403 | 409 |
404 g_free(room_jid); | 410 g_free(room_jid); |
405 } | 411 } |
412 | |
413 static void jabber_chat_register_x_data_result_cb(JabberStream *js, xmlnode *packet, gpointer data) | |
414 { | |
415 const char *type = xmlnode_get_attrib(packet, "type"); | |
416 | |
417 if(type && !strcmp(type, "error")) { | |
418 /* XXX: handle an error (you'll get a 409 if the nick is already registered) */ | |
419 } | |
420 } | |
421 | |
422 static void jabber_chat_register_x_data_cb(JabberStream *js, xmlnode *result, gpointer data) | |
423 { | |
424 JabberChat *chat = data; | |
425 xmlnode *query; | |
426 JabberIq *iq; | |
427 char *to = g_strdup_printf("%s@%s", chat->room, chat->server); | |
428 | |
429 iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:register"); | |
430 xmlnode_set_attrib(iq->node, "to", to); | |
431 g_free(to); | |
432 | |
433 query = xmlnode_get_child(iq->node, "query"); | |
434 | |
435 xmlnode_insert_child(query, result); | |
436 | |
437 jabber_iq_set_callback(iq, jabber_chat_register_x_data_result_cb, NULL); | |
438 | |
439 jabber_iq_send(iq); | |
440 } | |
441 | |
442 static void jabber_chat_register_cb(JabberStream *js, xmlnode *packet, gpointer data) | |
443 { | |
444 xmlnode *query, *x; | |
445 const char *type = xmlnode_get_attrib(packet, "type"); | |
446 const char *from = xmlnode_get_attrib(packet, "from"); | |
447 char *msg; | |
448 JabberChat *chat; | |
449 JabberID *jid; | |
450 | |
451 if(!type || !from) | |
452 return; | |
453 | |
454 if(!strcmp(type, "result")) { | |
455 jid = jabber_id_new(from); | |
456 | |
457 if(!jid) | |
458 return; | |
459 | |
460 chat = jabber_chat_find(js, jid->node, jid->domain); | |
461 jabber_id_free(jid); | |
462 | |
463 if(!chat) | |
464 return; | |
465 | |
466 if(!(query = xmlnode_get_child(packet, "query"))) | |
467 return; | |
468 | |
469 for(x = query->child; x; x = x->next) { | |
470 const char *xmlns; | |
471 if(strcmp(x->name, "x")) | |
472 continue; | |
473 | |
474 if(!(xmlns = xmlnode_get_attrib(x, "xmlns"))) | |
475 continue; | |
476 | |
477 if(!strcmp(xmlns, "jabber:x:data")) { | |
478 jabber_x_data_request(js, x, jabber_chat_register_x_data_cb, chat); | |
479 return; | |
480 } | |
481 } | |
482 } else if(!strcmp(type, "error")) { | |
483 /* XXX: how many places is this code duplicated? Fix it, immediately */ | |
484 xmlnode *errnode = xmlnode_get_child(packet, "error"); | |
485 const char *code = NULL; | |
486 char *code_txt = NULL; | |
487 char *msg; | |
488 char *text = NULL; | |
489 | |
490 if(errnode) { | |
491 code = xmlnode_get_attrib(errnode, "code"); | |
492 text = xmlnode_get_data(errnode); | |
493 } | |
494 | |
495 if(code) | |
496 code_txt = g_strdup_printf(_(" (Code %s)"), code); | |
497 | |
498 msg = g_strdup_printf("%s%s", text ? text : "", code_txt ? code_txt : ""); | |
499 gaim_notify_error(js->gc, _("Registration error"), _("Registration error"), msg); | |
500 | |
501 g_free(msg); | |
502 if(code_txt) | |
503 g_free(code_txt); | |
504 | |
505 return; | |
506 } | |
507 | |
508 msg = g_strdup_printf("Unable to configure room %s", from); | |
509 | |
510 gaim_notify_info(js->gc, _("Unable to configure"), _("Unable to configure"), msg); | |
511 g_free(msg); | |
512 | |
513 } | |
514 | |
515 void jabber_chat_register(JabberChat *chat) | |
516 { | |
517 JabberIq *iq; | |
518 char *room_jid; | |
519 | |
520 if(!chat) | |
521 return; | |
522 | |
523 room_jid = g_strdup_printf("%s@%s", chat->room, chat->server); | |
524 | |
525 iq = jabber_iq_new_query(chat->js, JABBER_IQ_GET, "jabber:iq:register"); | |
526 xmlnode_set_attrib(iq->node, "to", room_jid); | |
527 g_free(room_jid); | |
528 | |
529 jabber_iq_set_callback(iq, jabber_chat_register_cb, NULL); | |
530 | |
531 jabber_iq_send(iq); | |
532 } | |
533 | |
534 |