diff libpurple/protocols/jabber/jabber.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 907ca9a36fe0
line wrap: on
line diff
--- a/libpurple/protocols/jabber/jabber.c	Fri Aug 15 14:02:21 2008 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Fri Aug 15 16:35:32 2008 +0000
@@ -346,26 +346,35 @@
 	if (len == -1)
 		len = strlen(data);
 
-	if (js->writeh == 0)
-		ret = jabber_do_send(js, data, len);
-	else {
-		ret = -1;
-		errno = EAGAIN;
-	}
+	if (js->use_bosh) {
+		xmlnode *xnode = xmlnode_from_str(data, len);
+		if (xnode) jabber_bosh_connection_send(&(js->bosh), xnode);
+		else {
+			purple_connection_error_reason(js->gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR,
+							_("Someone tried to send non-XML in a Jabber world."));
+		}
+	} else {
+		if (js->writeh == 0)
+			ret = jabber_do_send(js, data, len);
+		else {
+			ret = -1;
+			errno = EAGAIN;
+		}
 
-	if (ret < 0 && errno != EAGAIN)
-		purple_connection_error_reason (js->gc,
-			PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
-			_("Write error"));
-	else if (ret < len) {
-		if (ret < 0)
-			ret = 0;
-		if (js->writeh == 0)
-			js->writeh = purple_input_add(
-				js->gsc ? js->gsc->fd : js->fd,
-				PURPLE_INPUT_WRITE, jabber_send_cb, js);
-		purple_circ_buffer_append(js->write_buffer,
-			data + ret, len - ret);
+		if (ret < 0 && errno != EAGAIN)
+			purple_connection_error_reason (js->gc,
+				PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
+				_("Write error"));
+		else if (ret < len) {
+			if (ret < 0)
+				ret = 0;
+			if (js->writeh == 0)
+				js->writeh = purple_input_add(
+					js->gsc ? js->gsc->fd : js->fd,
+					PURPLE_INPUT_WRITE, jabber_send_cb, js);
+			purple_circ_buffer_append(js->write_buffer,
+				data + ret, len - ret);
+		}
 	}
 	return;
 }
@@ -388,13 +397,9 @@
 	if(NULL == packet)
 		return;
 
-	if (js->use_bosh) {
-		jabber_bosh_connection_send(&(js->bosh), packet);
-	} else {
-		txt = xmlnode_to_str(packet, &len);
-		jabber_send_raw(js, txt, len);
-		g_free(txt);
-	}
+	txt = xmlnode_to_str(packet, &len);
+	jabber_send_raw(js, txt, len);
+	g_free(txt);
 }
 
 static void jabber_pong_cb(JabberStream *js, xmlnode *packet, gpointer timeout)