Module: wine Branch: master Commit: 6c5f759d5ac3d66203844a22ad618443b3c3d6f7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6c5f759d5ac3d66203844a22ad...
Author: Juan Lang juan.lang@gmail.com Date: Tue Oct 23 12:50:29 2007 -0700
cryptnet: Set timeout on http connections when a timeout is specified.
---
dlls/cryptnet/cryptnet_main.c | 20 ++++++++++++++++---- 1 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/dlls/cryptnet/cryptnet_main.c b/dlls/cryptnet/cryptnet_main.c index 603185d..21489ff 100644 --- a/dlls/cryptnet/cryptnet_main.c +++ b/dlls/cryptnet/cryptnet_main.c @@ -785,6 +785,14 @@ static BOOL WINAPI HTTP_RetrieveEncodedObjectW(LPCWSTR pszURL,
if (hHttp) { + if (dwTimeout) + { + InternetSetOptionW(hHttp, + INTERNET_OPTION_RECEIVE_TIMEOUT, &dwTimeout, + sizeof(dwTimeout)); + InternetSetOptionW(hHttp, INTERNET_OPTION_SEND_TIMEOUT, + &dwTimeout, sizeof(dwTimeout)); + } ret = HttpSendRequestExW(hHttp, NULL, NULL, 0, (DWORD_PTR)context); if (!ret && GetLastError() == ERROR_IO_PENDING) @@ -795,14 +803,18 @@ static BOOL WINAPI HTTP_RetrieveEncodedObjectW(LPCWSTR pszURL, else ret = TRUE; } - ret = HttpEndRequestW(hHttp, NULL, 0, (DWORD_PTR)context); - if (!ret && GetLastError() == ERROR_IO_PENDING) + /* We don't set ret to TRUE in this block to avoid masking + * an error from HttpSendRequestExW. + */ + if (!HttpEndRequestW(hHttp, NULL, 0, (DWORD_PTR)context) && + GetLastError() == ERROR_IO_PENDING) { if (WaitForSingleObject(context->event, context->timeout) == WAIT_TIMEOUT) + { SetLastError(ERROR_TIMEOUT); - else - ret = TRUE; + ret = FALSE; + } } if (ret) ret = CRYPT_DownloadObject(dwRetrievalFlags, hHttp,