comparison libpurple/protocols/jabber/jabber.c @ 25983:439f07ce4c8a

propagate from branch 'im.pidgin.pidgin' (head 303af74a38e7b313d4fb0be4d4054a16cb13d819) to branch 'im.pidgin.cpw.darkrain42.xmpp.iq-handlers' (head b04e8bdc99bebce19e9d8a5df5d7397cffcf2988)
author Paul Aurich <paul@darkrain42.org>
date Sat, 07 Mar 2009 02:14:34 +0000
parents 5f9a24d1c25e 050052891c55
children d24b476cc60f
comparison
equal deleted inserted replaced
25464:0e93bbb7f5ca 25983:439f07ce4c8a
444 txt = xmlnode_to_str(packet, &len); 444 txt = xmlnode_to_str(packet, &len);
445 jabber_send_raw(js, txt, len); 445 jabber_send_raw(js, txt, len);
446 g_free(txt); 446 g_free(txt);
447 } 447 }
448 448
449 static void jabber_pong_cb(JabberStream *js, xmlnode *packet, gpointer unused) 449 static gboolean jabber_keepalive_timeout(PurpleConnection *gc)
450 {
451 purple_timeout_remove(js->keepalive_timeout);
452 js->keepalive_timeout = -1;
453 }
454
455 static gboolean jabber_pong_timeout(PurpleConnection *gc)
456 { 450 {
457 JabberStream *js = gc->proto_data; 451 JabberStream *js = gc->proto_data;
458 purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, 452 purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
459 _("Ping timeout")); 453 _("Ping timeout"));
460 js->keepalive_timeout = -1; 454 js->keepalive_timeout = -1;
464 void jabber_keepalive(PurpleConnection *gc) 458 void jabber_keepalive(PurpleConnection *gc)
465 { 459 {
466 JabberStream *js = gc->proto_data; 460 JabberStream *js = gc->proto_data;
467 461
468 if (js->keepalive_timeout == -1) { 462 if (js->keepalive_timeout == -1) {
469 JabberIq *iq = jabber_iq_new(js, JABBER_IQ_GET); 463 jabber_ping_jid(js, NULL);
470 464 js->keepalive_timeout = purple_timeout_add_seconds(120,
471 xmlnode *ping = xmlnode_new_child(iq->node, "ping"); 465 (GSourceFunc)(jabber_keepalive_timeout), gc);
472 xmlnode_set_namespace(ping, "urn:xmpp:ping");
473
474 js->keepalive_timeout = purple_timeout_add_seconds(120, (GSourceFunc)(jabber_pong_timeout), gc);
475 jabber_iq_set_callback(iq, jabber_pong_cb, NULL);
476 jabber_iq_send(iq);
477 } 466 }
478 } 467 }
479 468
480 static void 469 static void
481 jabber_recv_cb_ssl(gpointer data, PurpleSslConnection *gsc, 470 jabber_recv_cb_ssl(gpointer data, PurpleSslConnection *gsc,
992 981
993 jabber_iq_set_callback(iq, jabber_registration_result_cb, to); 982 jabber_iq_set_callback(iq, jabber_registration_result_cb, to);
994 jabber_iq_send(iq); 983 jabber_iq_send(iq);
995 } 984 }
996 985
997 void jabber_register_parse(JabberStream *js, xmlnode *packet) 986 void jabber_register_parse(JabberStream *js, const char *from, JabberIqType type,
987 const char *id, xmlnode *query)
998 { 988 {
999 PurpleAccount *account = purple_connection_get_account(js->gc); 989 PurpleAccount *account = purple_connection_get_account(js->gc);
1000 const char *type;
1001 const char *from;
1002 PurpleRequestFields *fields; 990 PurpleRequestFields *fields;
1003 PurpleRequestFieldGroup *group; 991 PurpleRequestFieldGroup *group;
1004 PurpleRequestField *field; 992 PurpleRequestField *field;
1005 xmlnode *query, *x, *y; 993 xmlnode *x, *y;
1006 char *instructions; 994 char *instructions;
1007 JabberRegisterCBData *cbdata; 995 JabberRegisterCBData *cbdata;
1008 gboolean registered = FALSE; 996 gboolean registered = FALSE;
1009 997
1010 if(!(type = xmlnode_get_attrib(packet, "type")) || strcmp(type, "result")) 998 if (type != JABBER_IQ_RESULT)
1011 return; 999 return;
1012 1000
1013 from = xmlnode_get_attrib(packet, "from"); 1001 if (!from)
1002 from = js->serverFQDN;
1003 g_return_if_fail(from != NULL);
1014 1004
1015 if(js->registration) { 1005 if(js->registration) {
1016 /* get rid of the login thingy */ 1006 /* get rid of the login thingy */
1017 purple_connection_set_state(js->gc, PURPLE_CONNECTED); 1007 purple_connection_set_state(js->gc, PURPLE_CONNECTED);
1018 } 1008 }
1019
1020 query = xmlnode_get_child(packet, "query");
1021 1009
1022 if(xmlnode_get_child(query, "registered")) { 1010 if(xmlnode_get_child(query, "registered")) {
1023 registered = TRUE; 1011 registered = TRUE;
1024 1012
1025 if(js->registration) { 1013 if(js->registration) {