Commit 6ea2441f authored by Misha Koshelev's avatar Misha Koshelev Committed by Alexandre Julliard

wininet: InternetQueryDataAvailable does not return ERROR_NO_MORE_FILES when no…

wininet: InternetQueryDataAvailable does not return ERROR_NO_MORE_FILES when no more HTTP data is available.
parent 662f44a6
......@@ -3314,49 +3314,39 @@ BOOL WINAPI InternetQueryDataAvailable( HINTERNET hFile,
switch (lpwhr->hdr.htype)
{
case WH_HHTTPREQ:
retval = TRUE;
if (NETCON_query_data_available(&lpwhr->netConnection,
lpdwNumberOfBytesAvailble))
lpdwNumberOfBytesAvailble) &&
!*lpdwNumberOfBytesAvailble)
{
retval = TRUE;
if (!*lpdwNumberOfBytesAvailble)
/* Even if we are in async mode, we need to determine whether
* there is actually more data available. We do this by trying
* to peek only a single byte in async mode. */
BOOL async = (lpwhr->lpHttpSession->lpAppInfo->hdr.dwFlags & INTERNET_FLAG_ASYNC);
if (NETCON_recv(&lpwhr->netConnection, buffer,
min(async ? 1 : sizeof(buffer),
lpwhr->dwContentLength - lpwhr->dwContentRead),
MSG_PEEK, (int *)lpdwNumberOfBytesAvailble) &&
async && *lpdwNumberOfBytesAvailble)
{
/* Even if we are in async mode, we need to determine whether
* there is actually more data available. We do this by trying
* to peek only a single byte in async mode. */
BOOL async = (lpwhr->lpHttpSession->lpAppInfo->hdr.dwFlags & INTERNET_FLAG_ASYNC);
if (!NETCON_recv(&lpwhr->netConnection, buffer,
min(async ? 1 : sizeof(buffer),
lpwhr->dwContentLength - lpwhr->dwContentRead),
MSG_PEEK, (int *)lpdwNumberOfBytesAvailble))
WORKREQUEST workRequest;
*lpdwNumberOfBytesAvailble = 0;
workRequest.asyncproc = AsyncInternetQueryDataAvailableProc;
workRequest.hdr = WININET_AddRef( &lpwhr->hdr );
retval = INTERNET_AsyncCall(&workRequest);
if (!retval)
{
INTERNET_SetLastError(ERROR_NO_MORE_FILES);
retval = FALSE;
WININET_Release( &lpwhr->hdr );
}
else if (async && *lpdwNumberOfBytesAvailble)
else
{
WORKREQUEST workRequest;
*lpdwNumberOfBytesAvailble = 0;
workRequest.asyncproc = AsyncInternetQueryDataAvailableProc;
workRequest.hdr = WININET_AddRef( &lpwhr->hdr );
retval = INTERNET_AsyncCall(&workRequest);
if (!retval)
{
WININET_Release( &lpwhr->hdr );
}
else
{
INTERNET_SetLastError(ERROR_IO_PENDING);
retval = FALSE;
}
INTERNET_SetLastError(ERROR_IO_PENDING);
retval = FALSE;
}
}
}
else
{
INTERNET_SetLastError(ERROR_NO_MORE_FILES);
}
break;
default:
......
......@@ -572,10 +572,10 @@ BOOL NETCON_recv(WININET_NETCONNECTION *connection, void *buf, size_t len, int f
*/
BOOL NETCON_query_data_available(WININET_NETCONNECTION *connection, DWORD *available)
{
*available = 0;
if (!NETCON_connected(connection))
return FALSE;
*available = 0;
#ifdef SONAME_LIBSSL
if (connection->peek_msg) *available = connection->peek_len;
#endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment