pidgin: ebacad33: Refactor jabber_login and jabber_registe...
darkrain42 at pidgin.im
darkrain42 at pidgin.im
Fri Jul 17 20:45:39 EDT 2009
-----------------------------------------------------------------
Revision: ebacad33e72745d3734a3d870fee301705c7282c
Ancestor: 0cb1c07a5cb654fea3ad0754b34631b4eb22760f
Author: darkrain42 at pidgin.im
Date: 2009-07-17T23:49:51
Branch: im.pidgin.pidgin
URL: http://d.pidgin.im/viewmtn/revision/info/ebacad33e72745d3734a3d870fee301705c7282c
Modified files:
libpurple/protocols/jabber/jabber.c
ChangeLog:
Refactor jabber_login and jabber_register_account
Now they both call jabber_stream_new and jabber_stream_connect
and do the separate stuff between those two calls.
-------------- next part --------------
============================================================
--- libpurple/protocols/jabber/jabber.c bf95c3fd7b6addd2ee82277b91391d9a052e4036
+++ libpurple/protocols/jabber/jabber.c 9dc6682725d9897784fa9b30707585eba4906ee5
@@ -759,31 +759,54 @@ static void srv_resolved_cb(PurpleSrvRes
}
}
-void
-jabber_login(PurpleAccount *account)
+static JabberStream *
+jabber_stream_new(PurpleAccount *account)
{
PurpleConnection *gc = purple_account_get_connection(account);
- const char *connect_server = purple_account_get_string(account,
- "connect_server", "");
- const char *bosh_url = purple_account_get_string(account,
- "bosh_url", "");
JabberStream *js;
+ JabberBuddy *my_jb;
PurplePresence *presence;
- PurpleStoredImage *image;
- JabberBuddy *my_jb = NULL;
- gc->flags |= PURPLE_CONNECTION_HTML |
- PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY;
js = gc->proto_data = g_new0(JabberStream, 1);
js->gc = gc;
js->fd = -1;
- js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,
- g_free, g_free);
+ js->user = jabber_id_new(purple_account_get_username(account));
+
+ if (!js->user) {
+ purple_connection_error_reason(gc,
+ PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
+ _("Invalid XMPP ID"));
+ /* Destroying the connection will free the JabberStream */
+ return NULL;
+ }
+
+ if (!js->user->domain || *(js->user->domain) == '\0') {
+ purple_connection_error_reason(gc,
+ PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
+ _("Invalid XMPP ID. Domain must be set."));
+ /* Destroying the connection will free the JabberStream */
+ return NULL;
+ }
+
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, purple_account_get_username(account), TRUE);
+ if (!my_jb) {
+ /* This basically *can't* fail, but for good measure... */
+ purple_connection_error_reason(gc,
+ PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
+ _("Invalid XMPP ID"));
+ /* Destroying the connection will free the JabberStream */
+ g_return_val_if_reached(NULL);
+ }
+
+ my_jb->subscription |= JABBER_SUB_BOTH;
+
+ js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,
+ g_free, g_free);
js->chats = g_hash_table_new_full(g_str_hash, g_str_equal,
g_free, (GDestroyNotify)jabber_chat_free);
- js->user = jabber_id_new(purple_account_get_username(account));
js->next_id = g_random_int();
js->write_buffer = purple_circ_buffer_new(512);
js->old_length = 0;
@@ -802,37 +825,21 @@ jabber_login(PurpleAccount *account)
if (purple_presence_is_idle(presence))
js->idle = purple_presence_get_idle_time(presence);
- if(!js->user) {
- purple_connection_error_reason(gc,
- PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
- _("Invalid XMPP ID"));
- return;
- }
+ return js;
+}
- if (!js->user->domain || *(js->user->domain) == '\0') {
- purple_connection_error_reason(gc,
- PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
- _("Invalid XMPP ID. Domain must be set."));
- return;
- }
+static void
+jabber_stream_connect(JabberStream *js)
+{
+ PurpleConnection *gc = js->gc;
+ PurpleAccount *account = purple_connection_get_account(gc);
+ const char *connect_server = purple_account_get_string(account,
+ "connect_server", "");
+ const char *bosh_url = purple_account_get_string(account,
+ "bosh_url", "");
- /*
- * Calculate the avatar hash for our current image so we know (when we
- * fetch our vCard and PEP avatar) if we should send our avatar to the
- * server.
- */
- if ((image = purple_buddy_icons_find_account_icon(account))) {
- js->initial_avatar_hash = jabber_calculate_data_sha1sum(purple_imgstore_get_data(image),
- purple_imgstore_get_size(image));
- purple_imgstore_unref(image);
- }
-
- if((my_jb = jabber_buddy_find(js, purple_account_get_username(account), TRUE)))
- my_jb->subscription |= JABBER_SUB_BOTH;
-
jabber_stream_set_state(js, JABBER_STREAM_CONNECTING);
- /* TODO: Just use purple_url_parse? */
/* If both BOSH and a Connect Server are specified, we prefer BOSH. I'm not
* attached to that choice, though.
*/
@@ -842,7 +849,7 @@ jabber_login(PurpleAccount *account)
if (js->bosh)
jabber_bosh_connection_connect(js->bosh);
else {
- purple_connection_error_reason(js->gc,
+ purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
_("Malformed BOSH URL"));
}
@@ -853,19 +860,18 @@ jabber_login(PurpleAccount *account)
js->certificate_CN = g_strdup(connect_server[0] ? connect_server : js->user->domain);
/* if they've got old-ssl mode going, we probably want to ignore SRV lookups */
- if(purple_account_get_bool(js->gc->account, "old_ssl", FALSE)) {
+ if(purple_account_get_bool(account, "old_ssl", FALSE)) {
if(purple_ssl_is_supported()) {
- js->gsc = purple_ssl_connect(js->gc->account,
- js->certificate_CN,
- purple_account_get_int(account, "port", 5223), jabber_login_callback_ssl,
- jabber_ssl_connect_failure, js->gc);
+ js->gsc = purple_ssl_connect(account, js->certificate_CN,
+ purple_account_get_int(account, "port", 5223),
+ jabber_login_callback_ssl, jabber_ssl_connect_failure, gc);
if (!js->gsc) {
- purple_connection_error_reason(js->gc,
+ purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
_("Unable to establish SSL connection"));
}
} else {
- purple_connection_error_reason(js->gc,
+ purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
_("SSL support unavailable"));
}
@@ -883,7 +889,36 @@ jabber_login(PurpleAccount *account)
}
}
+void
+jabber_login(PurpleAccount *account)
+{
+ PurpleConnection *gc = purple_account_get_connection(account);
+ JabberStream *js;
+ PurpleStoredImage *image;
+ gc->flags |= PURPLE_CONNECTION_HTML |
+ PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY;
+ js = jabber_stream_new(account);
+ if (js == NULL)
+ return;
+
+ /*
+ * Calculate the avatar hash for our current image so we know (when we
+ * fetch our vCard and PEP avatar) if we should send our avatar to the
+ * server.
+ */
+ image = purple_buddy_icons_find_account_icon(account);
+ if (image != NULL) {
+ js->initial_avatar_hash =
+ jabber_calculate_data_sha1sum(purple_imgstore_get_data(image),
+ purple_imgstore_get_size(image));
+ purple_imgstore_unref(image);
+ }
+
+ jabber_stream_connect(js);
+}
+
+
static gboolean
conn_close_cb(gpointer data)
{
@@ -1293,90 +1328,14 @@ void jabber_register_account(PurpleAccou
void jabber_register_account(PurpleAccount *account)
{
- PurpleConnection *gc = purple_account_get_connection(account);
JabberStream *js;
- JabberBuddy *my_jb = NULL;
- const char *connect_server = purple_account_get_string(account,
- "connect_server", "");
- const char *server;
- js = gc->proto_data = g_new0(JabberStream, 1);
- js->gc = gc;
- js->registration = TRUE;
- js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,
- g_free, g_free);
- js->user = jabber_id_new(purple_account_get_username(account));
- js->next_id = g_random_int();
- js->old_length = 0;
- js->keepalive_timeout = 0;
-
- if(!js->user) {
- purple_connection_error_reason(gc,
- PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
- _("Invalid XMPP ID"));
+ js = jabber_stream_new(account);
+ if (js == NULL)
return;
- }
- js->write_buffer = purple_circ_buffer_new(512);
-
- if((my_jb = jabber_buddy_find(js, purple_account_get_username(account), TRUE)))
- my_jb->subscription |= JABBER_SUB_BOTH;
-
- server = connect_server[0] ? connect_server : js->user->domain;
- js->certificate_CN = g_strdup(server);
-
- js->stun_ip = NULL;
- js->stun_port = 0;
- js->stun_query = NULL;
-
- jabber_stream_set_state(js, JABBER_STREAM_CONNECTING);
-
- /* TODO: Just use purple_url_parse? */
- if (!g_ascii_strncasecmp(connect_server, "http://", 7) || !g_ascii_strncasecmp(connect_server, "https://", 8)) {
- js->use_bosh = TRUE;
- js->bosh = jabber_bosh_connection_init(js, connect_server);
- if (!js->bosh) {
- purple_connection_error_reason(js->gc,
- PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
- _("Malformed BOSH Connect Server"));
- return;
- }
- jabber_bosh_connection_connect(js->bosh);
- return;
- } else {
- js->certificate_CN = g_strdup(connect_server[0] ? connect_server : js->user->domain);
- }
-
- if(purple_account_get_bool(account, "old_ssl", FALSE)) {
- if(purple_ssl_is_supported()) {
- js->gsc = purple_ssl_connect(account, server,
- purple_account_get_int(account, "port", 5222),
- jabber_login_callback_ssl, jabber_ssl_connect_failure, gc);
- if (!js->gsc) {
- purple_connection_error_reason(js->gc,
- PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
- _("Unable to establish SSL connection"));
- }
- } else {
- purple_connection_error_reason(gc,
- PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
- _("SSL support unavailable"));
- }
-
- return;
- }
-
- if (connect_server[0]) {
- jabber_login_connect(js, js->user->domain, server,
- purple_account_get_int(account,
- "port", 5222), TRUE);
- } else {
- js->srv_query_data = purple_srv_resolve("xmpp-client",
- "tcp",
- js->user->domain,
- srv_resolved_cb,
- js);
- }
+ js->registration = TRUE;
+ jabber_stream_connect(js);
}
static void
More information about the Commits
mailing list