--- a/libpurple/protocols/jabber/jabber.c Sun Aug 02 22:24:21 2009 +0000 +++ b/libpurple/protocols/jabber/jabber.c Mon Aug 03 00:46:28 2009 +0000 @@ -132,15 +132,19 @@ xmlnode *jid; char *full_jid; if((jid = xmlnode_get_child(bind, "jid")) && (full_jid = xmlnode_get_data(jid))) { - JabberBuddy *my_jb = NULL; jabber_id_free(js->user); - if(!(js->user = jabber_id_new(full_jid))) { + + js->user = jabber_id_new(full_jid); + if (js->user == NULL) { purple_connection_error_reason(js->gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Invalid response from server")); + g_free(full_jid); + return; } - if((my_jb = jabber_buddy_find(js, full_jid, TRUE))) - my_jb->subscription |= JABBER_SUB_BOTH; + + js->user_jb = jabber_buddy_find(js, full_jid, TRUE); + js->user_jb->subscription |= JABBER_SUB_BOTH; purple_connection_set_display_name(js->gc, full_jid); @@ -441,7 +445,7 @@ if (len == -1) len = strlen(data); - if (js->use_bosh) + if (js->bosh) jabber_bosh_connection_send_raw(js->bosh, data); else do_jabber_send_raw(js, data, len); @@ -465,7 +469,7 @@ return; js = purple_connection_get_protocol_data(pc); - if (js->use_bosh) + if (js->bosh) if (g_str_equal((*packet)->name, "message") || g_str_equal((*packet)->name, "iq") || g_str_equal((*packet)->name, "presence")) @@ -632,7 +636,6 @@ if (!strcmp(token[0], "_xmpp-client-xbosh")) { purple_debug_info("jabber","Found alternative connection method using %s at %s.\n", token[0], token[1]); js->bosh = jabber_bosh_connection_init(js, token[1]); - js->use_bosh = TRUE; g_strfreev(token); break; } @@ -776,7 +779,6 @@ { PurpleConnection *gc = purple_account_get_connection(account); JabberStream *js; - JabberBuddy *my_jb; PurplePresence *presence; gchar *user; gchar *slash; @@ -811,9 +813,9 @@ js->buddies = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)jabber_buddy_free); - my_jb = jabber_buddy_find(js, user, TRUE); + js->user_jb = jabber_buddy_find(js, user, TRUE); g_free(user); - if (!my_jb) { + if (!js->user_jb) { /* This basically *can't* fail, but for good measure... */ purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, @@ -822,7 +824,7 @@ g_return_val_if_reached(NULL); } - my_jb->subscription |= JABBER_SUB_BOTH; + js->user_jb->subscription |= JABBER_SUB_BOTH; js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); @@ -865,7 +867,6 @@ * attached to that choice, though. */ if (*bosh_url) { - js->use_bosh = TRUE; js->bosh = jabber_bosh_connection_init(js, bosh_url); if (js->bosh) jabber_bosh_connection_connect(js->bosh); @@ -1445,7 +1446,7 @@ * on some SSL backends. */ if (!gc->disconnect_timeout) { - if (js->use_bosh) + if (js->bosh) jabber_bosh_connection_close(js->bosh); else if ((js->gsc && js->gsc->fd > 0) || js->fd > 0) jabber_send_raw(js, "</stream:stream>", -1);