# HG changeset patch # User Elliott Sales de Andrade # Date 1214028689 0 # Node ID 8fd6a97b9c676ef3c8aa646d4b403ef5dc5f6590 # Parent f3922a72eb02100fef98a8fb58dfb9d2e3f0ee7e Apparently, when the token expires, OIM requests get a detail/RequiredAuthPolicy element instead of a q0:BadContextToken faultcode. References #4875. diff -r f3922a72eb02 -r 8fd6a97b9c67 libpurple/protocols/msn/oim.c --- a/libpurple/protocols/msn/oim.c Fri Jun 20 05:41:39 2008 +0000 +++ b/libpurple/protocols/msn/oim.c Sat Jun 21 06:11:29 2008 +0000 @@ -135,15 +135,15 @@ gpointer req_data) { MsnOimRequestData *data = (MsnOimRequestData *)req_data; - xmlnode *xml; - xmlnode *faultcode; - gchar *faultcode_str; + xmlnode *fault = NULL; + xmlnode *faultcode = NULL; - xml = response->xml; - faultcode = xmlnode_get_child(xml, "Body/Fault/faultcode"); + fault = xmlnode_get_child(response->xml, "Body/Fault"); + if (fault) + faultcode = xmlnode_get_child(fault, "faultcode"); - if (faultcode != NULL) { - faultcode_str = xmlnode_get_data(faultcode); + if (faultcode) { + gchar *faultcode_str = xmlnode_get_data(faultcode); if (faultcode_str && g_str_equal(faultcode_str, "q0:BadContextToken")) { purple_debug_error("msnp15", "OIM Request Error, Updating token now."); @@ -152,6 +152,16 @@ (GSourceFunc)msn_oim_request_helper, data); g_free(faultcode_str); return; + + } else if (faultcode_str && g_str_equal(faultcode_str, "q0:AuthenticationFailed")) { + if (xmlnode_get_child(fault, "detail/RequiredAuthPolicy") != NULL) { + purple_debug_error("msnp15", "OIM Request Error, Updating token now."); + msn_nexus_update_token(data->oim->session->nexus, + data->send ? MSN_AUTH_LIVE_SECURE : MSN_AUTH_MESSENGER_WEB, + (GSourceFunc)msn_oim_request_helper, data); + g_free(faultcode_str); + return; + } } g_free(faultcode_str); }