Jacek Caban : wininet: Correctly detect https connections and custom port numbers in HTTP_HandleRedirect .

Alexandre Julliard julliard at winehq.org
Tue Jan 24 14:25:34 CST 2012


Module: wine
Branch: master
Commit: ac26517ac96f9e6fc725bc52724ed814c0bd9de9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ac26517ac96f9e6fc725bc52724ed814c0bd9de9

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jan 24 17:31:17 2012 +0100

wininet: Correctly detect https connections and custom port numbers in HTTP_HandleRedirect.

---

 dlls/wininet/http.c |   67 +++++++++++++++++++-------------------------------
 1 files changed, 26 insertions(+), 41 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 3439924..24e55b3 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -3788,8 +3788,10 @@ static DWORD HTTP_HandleRedirect(http_request_t *request, LPCWSTR lpszUrl)
         WCHAR protocol[INTERNET_MAX_SCHEME_LENGTH];
         WCHAR hostName[INTERNET_MAX_HOST_NAME_LENGTH];
         WCHAR userName[INTERNET_MAX_USER_NAME_LENGTH];
-        static WCHAR szHttp[] = {'h','t','t','p',0};
-        static WCHAR szHttps[] = {'h','t','t','p','s',0};
+        BOOL custom_port = FALSE;
+
+        static WCHAR httpW[] = {'h','t','t','p',0};
+        static WCHAR httpsW[] = {'h','t','t','p','s',0};
 
         userName[0] = 0;
         hostName[0] = 0;
@@ -3811,50 +3813,33 @@ static DWORD HTTP_HandleRedirect(http_request_t *request, LPCWSTR lpszUrl)
         if(!InternetCrackUrlW(lpszUrl, strlenW(lpszUrl), 0, &urlComponents))
             return INTERNET_GetLastError();
 
-        if (!strncmpW(szHttp, urlComponents.lpszScheme, strlenW(szHttp)) &&
-            (request->hdr.dwFlags & INTERNET_FLAG_SECURE))
-        {
-            TRACE("redirect from secure page to non-secure page\n");
-            /* FIXME: warn about from secure redirect to non-secure page */
-            request->hdr.dwFlags &= ~INTERNET_FLAG_SECURE;
-        }
-        if (!strncmpW(szHttps, urlComponents.lpszScheme, strlenW(szHttps)) &&
-            !(request->hdr.dwFlags & INTERNET_FLAG_SECURE))
-        {
-            TRACE("redirect from non-secure page to secure page\n");
-            /* FIXME: notify about redirect to secure page */
-            request->hdr.dwFlags |= INTERNET_FLAG_SECURE;
-        }
+        if(!strcmpiW(protocol, httpW)) {
+            if(request->hdr.dwFlags & INTERNET_FLAG_SECURE) {
+                TRACE("redirect from secure page to non-secure page\n");
+                /* FIXME: warn about from secure redirect to non-secure page */
+                request->hdr.dwFlags &= ~INTERNET_FLAG_SECURE;
+            }
 
-        if (urlComponents.nPort == INTERNET_INVALID_PORT_NUMBER)
-        {
-            if (lstrlenW(protocol)>4) /*https*/
-                urlComponents.nPort = INTERNET_DEFAULT_HTTPS_PORT;
-            else /*http*/
+            if(urlComponents.nPort == INTERNET_INVALID_PORT_NUMBER)
                 urlComponents.nPort = INTERNET_DEFAULT_HTTP_PORT;
-        }
+            else if(urlComponents.nPort != INTERNET_DEFAULT_HTTP_PORT)
+                custom_port = TRUE;
+        }else if(!strcmpiW(protocol, httpsW)) {
+            if(!(request->hdr.dwFlags & INTERNET_FLAG_SECURE)) {
+                TRACE("redirect from non-secure page to secure page\n");
+                /* FIXME: notify about redirect to secure page */
+                request->hdr.dwFlags |= INTERNET_FLAG_SECURE;
+            }
 
-#if 0
-        /*
-         * This upsets redirects to binary files on sourceforge.net 
-         * and gives an html page instead of the target file
-         * Examination of the HTTP request sent by native wininet.dll
-         * reveals that it doesn't send a referrer in that case.
-         * Maybe there's a flag that enables this, or maybe a referrer
-         * shouldn't be added in case of a redirect.
-         */
+            if(urlComponents.nPort == INTERNET_INVALID_PORT_NUMBER)
+                urlComponents.nPort = INTERNET_DEFAULT_HTTPS_PORT;
+            else if(urlComponents.nPort != INTERNET_DEFAULT_HTTPS_PORT)
+                custom_port = TRUE;
+        }
 
-        /* consider the current host as the referrer */
-        if (session->lpszServerName && *session->lpszServerName)
-            HTTP_ProcessHeader(request, HTTP_REFERER, session->lpszServerName,
-                           HTTP_ADDHDR_FLAG_REQ|HTTP_ADDREQ_FLAG_REPLACE|
-                           HTTP_ADDHDR_FLAG_ADD_IF_NEW);
-#endif
-        
         heap_free(session->hostName);
-        if (urlComponents.nPort != INTERNET_DEFAULT_HTTP_PORT &&
-            urlComponents.nPort != INTERNET_DEFAULT_HTTPS_PORT)
-        {
+
+        if(custom_port) {
             int len;
             static const WCHAR fmt[] = {'%','s',':','%','u',0};
             len = lstrlenW(hostName);




More information about the wine-cvs mailing list