diff options
Diffstat (limited to 'libpurple/protocols/msn/session.c')
-rw-r--r-- | libpurple/protocols/msn/session.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/libpurple/protocols/msn/session.c b/libpurple/protocols/msn/session.c index 1517717fdd..0b763caa1c 100644 --- a/libpurple/protocols/msn/session.c +++ b/libpurple/protocols/msn/session.c @@ -57,6 +57,11 @@ msn_session_destroy(MsnSession *session) session->destroying = TRUE; + while (session->url_datas) { + purple_util_fetch_url_cancel(session->url_datas->data); + session->url_datas = g_slist_delete_link(session->url_datas, session->url_datas); + } + if (session->connected) msn_session_disconnect(session); @@ -131,6 +136,11 @@ msn_session_disconnect(MsnSession *session) if (!session->connected) return; + if (session->login_timeout) { + purple_timeout_remove(session->login_timeout); + session->login_timeout = 0; + } + session->connected = FALSE; while (session->switches != NULL) @@ -258,6 +268,28 @@ msn_session_get_swboard(MsnSession *session, const char *username, return swboard; } +static gboolean +msn_login_timeout_cb(gpointer data) +{ + MsnSession *session = data; + /* This forces the login process to finish, even though we haven't heard + a response for our FQY requests yet. We'll at least end up online to the + people we've already added. The rest will follow later. */ + msn_session_finish_login(session); + session->login_timeout = 0; + return FALSE; +} + +void +msn_session_activate_login_timeout(MsnSession *session) +{ + if (!session->logged_in && session->connected) { + session->login_timeout = + purple_timeout_add_seconds(MSN_LOGIN_FQY_TIMEOUT, + msn_login_timeout_cb, session); + } +} + static void msn_session_sync_users(MsnSession *session) { @@ -362,6 +394,9 @@ msn_session_set_error(MsnSession *session, MsnErrorType error, msg = g_strdup_printf(_("Unable to authenticate: %s"), (info == NULL ) ? _("Unknown error") : info); + /* Clear the password if it isn't being saved */ + if (!purple_account_get_remember_password(session->account)) + purple_account_set_password(session->account, NULL); break; case MSN_ERROR_BAD_BLIST: reason = PURPLE_CONNECTION_ERROR_NETWORK_ERROR; @@ -407,7 +442,7 @@ msn_session_set_login_step(MsnSession *session, MsnLoginStep step) /* Prevent the connection progress going backwards, eg. if we get * transferred several times during login */ - if (session->login_step > step) + if (session->login_step >= step) return; /* If we're already logged in, we're probably here because of a |