Piotr Caban : wininet: Store connect timeout in all layers.
Alexandre Julliard
julliard at winehq.org
Mon May 14 14:26:05 CDT 2012
Module: wine
Branch: master
Commit: 0b421006158baa5d539f021e70d89a7cb3e8212c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0b421006158baa5d539f021e70d89a7cb3e8212c
Author: Piotr Caban <piotr at codeweavers.com>
Date: Mon May 14 13:49:29 2012 +0200
wininet: Store connect timeout in all layers.
---
dlls/wininet/http.c | 2 +-
dlls/wininet/internet.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++-
dlls/wininet/internet.h | 1 +
3 files changed, 57 insertions(+), 2 deletions(-)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index a0b4a62..01f0f95 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -5606,7 +5606,7 @@ DWORD HTTP_Connect(appinfo_t *hIC, LPCWSTR lpszServerName,
session->password = heap_strdupW(lpszPassword);
session->serverPort = serverPort;
session->hostPort = serverPort;
- session->connect_timeout = INFINITE;
+ session->connect_timeout = hIC->connect_timeout;
session->send_timeout = INFINITE;
session->receive_timeout = INFINITE;
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index f631469..ba4794c 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -109,6 +109,7 @@ typedef struct
} proxyinfo_t;
static ULONG max_conns = 2, max_1_0_conns = 4;
+static ULONG connect_timeout = 60000;
static const WCHAR szInternetSettings[] =
{ 'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
@@ -874,16 +875,47 @@ static DWORD APPINFO_QueryOption(object_header_t *hdr, DWORD option, void *buffe
*size = sizeof(INTERNET_PROXY_INFOA) + proxyBytesRequired + proxyBypassBytesRequired;
return ERROR_SUCCESS;
}
+
+ case INTERNET_OPTION_CONNECT_TIMEOUT:
+ TRACE("INTERNET_OPTION_CONNECT_TIMEOUT\n");
+
+ if (*size < sizeof(ULONG))
+ return ERROR_INSUFFICIENT_BUFFER;
+
+ *(ULONG*)buffer = ai->connect_timeout;
+ *size = sizeof(ULONG);
+
+ return ERROR_SUCCESS;
}
return INET_QueryOption(hdr, option, buffer, size, unicode);
}
+static DWORD APPINFO_SetOption(object_header_t *hdr, DWORD option, void *buf, DWORD size)
+{
+ appinfo_t *ai = (appinfo_t*)hdr;
+
+ switch(option) {
+ case INTERNET_OPTION_CONNECT_TIMEOUT:
+ TRACE("INTERNET_OPTION_CONNECT_TIMEOUT\n");
+
+ if(size != sizeof(connect_timeout))
+ return ERROR_INTERNET_BAD_OPTION_LENGTH;
+ if(!*(ULONG*)buf)
+ return ERROR_BAD_ARGUMENTS;
+
+ ai->connect_timeout = *(ULONG*)buf;
+ return ERROR_SUCCESS;
+ }
+
+ return INET_SetOption(hdr, option, buf, size);
+}
+
static const object_vtbl_t APPINFOVtbl = {
APPINFO_Destroy,
NULL,
APPINFO_QueryOption,
- INET_SetOption,
+ APPINFO_SetOption,
NULL,
NULL,
NULL,
@@ -946,6 +978,7 @@ HINTERNET WINAPI InternetOpenW(LPCWSTR lpszAgent, DWORD dwAccessType,
lpwai->accessType = dwAccessType;
lpwai->proxyUsername = NULL;
lpwai->proxyPassword = NULL;
+ lpwai->connect_timeout = connect_timeout;
lpwai->agent = heap_strdupW(lpszAgent);
if(dwAccessType == INTERNET_OPEN_TYPE_PRECONFIG)
@@ -2438,6 +2471,16 @@ static DWORD query_global_option(DWORD option, void *buffer, DWORD *size, BOOL u
return ERROR_INTERNET_INCORRECT_HANDLE_TYPE;
case INTERNET_OPTION_POLICY:
return ERROR_INVALID_PARAMETER;
+ case INTERNET_OPTION_CONNECT_TIMEOUT:
+ TRACE("INTERNET_OPTION_CONNECT_TIMEOUT\n");
+
+ if (*size < sizeof(ULONG))
+ return ERROR_INSUFFICIENT_BUFFER;
+
+ *(ULONG*)buffer = connect_timeout;
+ *size = sizeof(ULONG);
+
+ return ERROR_SUCCESS;
}
FIXME("Stub for %d\n", option);
@@ -2581,6 +2624,17 @@ static DWORD set_global_option(DWORD option, void *buf, DWORD size)
max_1_0_conns = *(ULONG*)buf;
return ERROR_SUCCESS;
+
+ case INTERNET_OPTION_CONNECT_TIMEOUT:
+ TRACE("INTERNET_OPTION_CONNECT_TIMEOUT\n");
+
+ if(size != sizeof(connect_timeout))
+ return ERROR_INTERNET_BAD_OPTION_LENGTH;
+ if(!*(ULONG*)buf)
+ return ERROR_BAD_ARGUMENTS;
+
+ connect_timeout = *(ULONG*)buf;
+ return ERROR_SUCCESS;
}
return ERROR_INTERNET_INVALID_OPTION;
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index b515a71..1956e07 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
@@ -253,6 +253,7 @@ typedef struct
LPWSTR proxyUsername;
LPWSTR proxyPassword;
DWORD accessType;
+ DWORD connect_timeout;
} appinfo_t;
typedef struct
More information about the wine-cvs
mailing list