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