wininet: Port resolution doesn't depend on the secure flag.

Hans Leidekker hans at codeweavers.com
Wed Mar 6 06:30:49 CST 2013


---
 dlls/wininet/http.c       |   19 +++++++++++--------
 dlls/wininet/tests/http.c |   29 +++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 468fee6..8fec2a4 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -283,7 +283,7 @@ server_t *get_server(const WCHAR *name, INTERNET_PORT port, BOOL is_https, BOOL
     server_t *iter, *server = NULL;
 
     if(port == INTERNET_INVALID_PORT_NUMBER)
-        port = is_https ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT;
+        port = INTERNET_DEFAULT_HTTP_PORT;
 
     EnterCriticalSection(&connection_pool_cs);
 
@@ -1706,6 +1706,9 @@ static WCHAR *build_proxy_path_url(http_request_t *req)
  */
 static BOOL HTTP_DealWithProxy(appinfo_t *hIC, http_session_t *session, http_request_t *request)
 {
+    static const WCHAR protoHttp[] = { 'h','t','t','p',0 };
+    static const WCHAR szHttp[] = { 'h','t','t','p',':','/','/',0 };
+    static const WCHAR szFormat[] = { 'h','t','t','p',':','/','/','%','s',0 };
     WCHAR buf[INTERNET_MAX_HOST_NAME_LENGTH];
     WCHAR protoProxy[INTERNET_MAX_URL_LENGTH];
     DWORD protoProxyLen = INTERNET_MAX_URL_LENGTH;
@@ -1713,9 +1716,7 @@ static BOOL HTTP_DealWithProxy(appinfo_t *hIC, http_session_t *session, http_req
     static WCHAR szNul[] = { 0 };
     URL_COMPONENTSW UrlComponents;
     server_t *new_server;
-    static const WCHAR protoHttp[] = { 'h','t','t','p',0 };
-    static const WCHAR szHttp[] = { 'h','t','t','p',':','/','/',0 };
-    static const WCHAR szFormat[] = { 'h','t','t','p',':','/','/','%','s',0 };
+    BOOL is_https;
 
     memset( &UrlComponents, 0, sizeof UrlComponents );
     UrlComponents.dwStructSize = sizeof UrlComponents;
@@ -1737,7 +1738,11 @@ static BOOL HTTP_DealWithProxy(appinfo_t *hIC, http_session_t *session, http_req
     if( !request->path )
         request->path = szNul;
 
-    new_server = get_server(UrlComponents.lpszHostName, UrlComponents.nPort, UrlComponents.nScheme == INTERNET_SCHEME_HTTPS, TRUE);
+    is_https = (UrlComponents.nScheme == INTERNET_SCHEME_HTTPS);
+    if (is_https && UrlComponents.nPort == INTERNET_INVALID_PORT_NUMBER)
+        UrlComponents.nPort = INTERNET_DEFAULT_HTTPS_PORT;
+
+    new_server = get_server(UrlComponents.lpszHostName, UrlComponents.nPort, is_https, TRUE);
     if(!new_server)
         return FALSE;
 
@@ -3160,9 +3165,7 @@ static DWORD HTTP_HttpOpenRequestW(http_session_t *session,
     HTTP_ProcessHeader(request, hostW, request->server->canon_host_port, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDHDR_FLAG_REQ);
 
     if (session->hostPort == INTERNET_INVALID_PORT_NUMBER)
-        session->hostPort = (dwFlags & INTERNET_FLAG_SECURE ?
-                        INTERNET_DEFAULT_HTTPS_PORT :
-                        INTERNET_DEFAULT_HTTP_PORT);
+        session->hostPort = INTERNET_DEFAULT_HTTP_PORT;
 
     if (hIC->proxy && hIC->proxy[0])
         HTTP_DealWithProxy( hIC, session, request );
diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c
index 5f7a961..c682930 100644
--- a/dlls/wininet/tests/http.c
+++ b/dlls/wininet/tests/http.c
@@ -4013,6 +4013,34 @@ static void test_connection_failure(void)
     InternetCloseHandle(session);
 }
 
+static void test_default_service_port(void)
+{
+    HINTERNET session, connect, request;
+    DWORD error;
+    BOOL ret;
+
+    session = InternetOpen("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
+    ok(session != NULL, "InternetOpen failed\n");
+
+    connect = InternetConnect(session, "test.winehq.org", INTERNET_INVALID_PORT_NUMBER, NULL, NULL,
+                              INTERNET_SERVICE_HTTP, 0, 0);
+    ok(connect != NULL, "InternetConnect failed\n");
+
+    request = HttpOpenRequest(connect, NULL, "/", NULL, NULL, NULL, INTERNET_FLAG_SECURE, 0);
+    ok(request != NULL, "HttpOpenRequest failed\n");
+
+    SetLastError(0xdeadbeef);
+    ret = HttpSendRequest(request, NULL, 0, NULL, 0);
+    error = GetLastError();
+    ok(!ret, "HttpSendRequest succeeded\n");
+    ok(error == ERROR_INTERNET_SECURITY_CHANNEL_ERROR || error == ERROR_INTERNET_CANNOT_CONNECT,
+       "got %u\n", error);
+
+    InternetCloseHandle(request);
+    InternetCloseHandle(connect);
+    InternetCloseHandle(session);
+}
+
 static void init_status_tests(void)
 {
     memset(expect, 0, sizeof(expect));
@@ -4091,4 +4119,5 @@ START_TEST(http)
     HttpSendRequestEx_test();
     InternetReadFile_test(INTERNET_FLAG_ASYNC, &test_data[3]);
     test_connection_failure();
+    test_default_service_port();
 }
-- 
1.7.10.4






More information about the wine-patches mailing list