Mercurial > pidgin.yaz
changeset 20416:4c5d68e93ef8
Handles SOAP redirects, thanks Sebasti«”n E. Peyrott
author | Ka-Hing Cheung <khc@hxbc.us> |
---|---|
date | Sat, 19 May 2007 22:48:25 +0000 |
parents | 76e736b59aa4 |
children | dc042f70bd8c |
files | COPYRIGHT libpurple/protocols/msn/soap.c |
diffstat | 2 files changed, 38 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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, + "<faultcode>psf:Redirect</faultcode>") != NULL) + { + char *location, *c; + + location = strstr(soapconn->read_buf, "<psf:redirectUrl>"); + /* Omit the tag preceding the URL */ + location += strlen("<psf:redirectUrl>"); + location = strstr(location, ":/"); + if (location == NULL) + { + msn_soap_free_read_buf(soapconn); + return; + } + + location += strlen("://"); /* Skip http:// or https:// */ + + if ( (c = strstr(location, "</psf:redirectUrl>")) != 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;