# HG changeset patch # User Ka-Hing Cheung # Date 1179614905 0 # Node ID 4c5d68e93ef8e02a3dc31651775b426de3fd5e1d # Parent 76e736b59aa4dd1f551f9a65c94939f541c6ec0d Handles SOAP redirects, thanks Sebasti«”n E. Peyrott diff -r 76e736b59aa4 -r 4c5d68e93ef8 COPYRIGHT --- a/COPYRIGHT Mon May 14 00:40:29 2007 +0000 +++ b/COPYRIGHT Sat May 19 22:48:25 2007 +0000 @@ -260,6 +260,7 @@ Ted Percival Eduardo PĆ©rez Matt Perry +SebastiĆ”n E. Peyrott Celso Pinto Joao LuĆ­s Marques Pinto Aleksander Piotrowski diff -r 76e736b59aa4 -r 4c5d68e93ef8 libpurple/protocols/msn/soap.c --- a/libpurple/protocols/msn/soap.c Mon May 14 00:40:29 2007 +0000 +++ b/libpurple/protocols/msn/soap.c Sat May 19 22:48:25 2007 +0000 @@ -302,6 +302,43 @@ PURPLE_SSL_DEFAULT_PORT, msn_soap_connect_cb, msn_soap_error_cb, soapconn); } + /* Another case of redirection, active on May, 2007 + See http://msnpiki.msnfanatic.com/index.php/MSNP13:SOAPTweener#Redirect + */ + else if (strstr(soapconn->read_buf, + "psf:Redirect") != NULL) + { + char *location, *c; + + location = strstr(soapconn->read_buf, ""); + /* Omit the tag preceding the URL */ + location += strlen(""); + location = strstr(location, ":/"); + if (location == NULL) + { + msn_soap_free_read_buf(soapconn); + return; + } + + location += strlen("://"); /* Skip http:// or https:// */ + + if ( (c = strstr(location, "")) != NULL ) + *c = '\0'; + + if ( (c = strstr(location, "/")) != NULL ) + { + g_free(soapconn->login_path); + soapconn->login_path = g_strdup(c); + *c = '\0'; + } + + g_free(soapconn->login_host); + soapconn->login_host = g_strdup(location); + + purple_ssl_connect(session->account, soapconn->login_host, + PURPLE_SSL_DEFAULT_PORT, msn_soap_connect_cb, + msn_soap_error_cb, soapconn); + } else if (strstr(soapconn->read_buf, "HTTP/1.1 401 Unauthorized") != NULL) { const char *error;