diff libpurple/protocols/jabber/bosh.c @ 25050:a03a953ba63d

* moving BOSH interfacing from jabber_send to jabber_send_raw * sending BOSH stream restart after successful SASL login
author Tobias Markmann <tfar@soc.pidgin.im>
date Fri, 15 Aug 2008 16:35:32 +0000
parents f775f6021654
children 5f70e13db5cc
line wrap: on
line diff
--- a/libpurple/protocols/jabber/bosh.c	Fri Aug 15 14:02:21 2008 +0000
+++ b/libpurple/protocols/jabber/bosh.c	Fri Aug 15 16:35:32 2008 +0000
@@ -56,8 +56,54 @@
 	conn->conn_a->userdata = conn;
 }
 
+void jabber_bosh_connection_stream_restart(PurpleBOSHConnection *conn) {
+	/*
+	<body rid='1573741824'
+	      sid='SomeSID'
+	      to='jabber.org'
+	      xml:lang='en'
+	      xmpp:restart='true'
+	      xmlns='http://jabber.org/protocol/httpbind'
+	      xmlns:xmpp='urn:xmpp:xbosh'/>
+	*/
+	xmlnode *restart = xmlnode_new("body");
+	char *tmp = NULL;
+	conn->rid++;
+	xmlnode_set_attrib(restart, "rid", tmp = g_strdup_printf("%d", conn->rid));
+	g_free(tmp);
+	xmlnode_set_attrib(restart, "sid", conn->sid);
+	xmlnode_set_attrib(restart, "to", conn->js->user->domain);
+	xmlnode_set_attrib(restart, "xml:lang", "en");
+	xmlnode_set_attrib(restart, "xmpp:restart", "true");
+	xmlnode_set_attrib(restart, "xmlns", "http://jabber.org/protocol/httpbind");
+	xmlnode_set_attrib(restart, "xmlns:xmpp", "urn:xmpp:xbosh"); 
+	
+	jabber_bosh_connection_send_native(conn, restart);
+}
+
+void jabber_bosh_connection_received(PurpleBOSHConnection *conn, xmlnode *node) {
+	
+	xmlnode_free(node);
+}
+
 void jabber_bosh_connection_auth_response(PurpleBOSHConnection *conn, xmlnode *node) {
-
+	xmlnode *child = node->child;
+	
+	while(child != NULL && child->type != XMLNODE_TYPE_TAG) {
+		child = child->next;	
+	}
+	
+	if (child != NULL && child->type == XMLNODE_TYPE_TAG) {
+		JabberStream *js = conn->js;
+		if (!strcmp(child->name, "success")) {
+			jabber_bosh_connection_stream_restart(conn);
+			jabber_process_packet(js, &child);
+		} else {
+			js->state = JABBER_STREAM_AUTHENTICATING;
+			conn->receive_cb = jabber_bosh_connection_received;
+			jabber_process_packet(js, &child);
+		}
+	} else printf("\n!! no child!!\n");
 }
 
 void jabber_bosh_connection_boot_response(PurpleBOSHConnection *conn, xmlnode *node) {
@@ -83,11 +129,6 @@
 	}
 }
 
-void jabber_bosh_connection_received(PurpleBOSHConnection *conn, xmlnode *node) {
-	xmlnode_free(node);
-}
-
-
 static void jabber_bosh_connection_boot(PurpleBOSHConnection *conn) {
 	char *tmp;
 	xmlnode *init = xmlnode_new("body");