WININET: Clean up HttpQueryInfo.

Fixes another return FALSE without SetLastError.
oldstable
Mike McCormack 2006-03-30 18:01:48 +09:00 committed by Alexandre Julliard
parent 2571fa004a
commit ae300883fa
1 changed files with 27 additions and 49 deletions

View File

@ -1291,28 +1291,18 @@ static BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLev
LPHTTPHEADERW lphttpHdr = NULL; LPHTTPHEADERW lphttpHdr = NULL;
BOOL bSuccess = FALSE; BOOL bSuccess = FALSE;
BOOL request_only = dwInfoLevel & HTTP_QUERY_FLAG_REQUEST_HEADERS; BOOL request_only = dwInfoLevel & HTTP_QUERY_FLAG_REQUEST_HEADERS;
INT requested_index = lpdwIndex ? *lpdwIndex : 0;
INT level = (dwInfoLevel & ~HTTP_QUERY_MODIFIER_FLAGS_MASK);
INT index = -1;
/* Find requested header structure */ /* Find requested header structure */
if ((dwInfoLevel & ~HTTP_QUERY_MODIFIER_FLAGS_MASK) == HTTP_QUERY_CUSTOM) switch (level)
{ {
INT requested_index = (lpdwIndex)?(*lpdwIndex):0; case HTTP_QUERY_CUSTOM:
INT index = HTTP_GetCustomHeaderIndex(lpwhr, (LPWSTR)lpBuffer, index = HTTP_GetCustomHeaderIndex(lpwhr, lpBuffer, requested_index, request_only);
requested_index,request_only); break;
if (index < 0) case HTTP_QUERY_RAW_HEADERS_CRLF:
return bSuccess;
else
lphttpHdr = &lpwhr->pCustHeaders[index];
if (lpdwIndex)
(*lpdwIndex)++;
}
else
{
INT index = dwInfoLevel & ~HTTP_QUERY_MODIFIER_FLAGS_MASK;
if (index == HTTP_QUERY_RAW_HEADERS_CRLF)
{ {
DWORD len = strlenW(lpwhr->lpszRawHeaders); DWORD len = strlenW(lpwhr->lpszRawHeaders);
if (len + 1 > *lpdwBufferLength/sizeof(WCHAR)) if (len + 1 > *lpdwBufferLength/sizeof(WCHAR))
@ -1328,7 +1318,7 @@ static BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLev
return TRUE; return TRUE;
} }
else if (index == HTTP_QUERY_RAW_HEADERS) case HTTP_QUERY_RAW_HEADERS:
{ {
static const WCHAR szCrLf[] = {'\r','\n',0}; static const WCHAR szCrLf[] = {'\r','\n',0};
LPWSTR * ppszRawHeaderLines = HTTP_Tokenize(lpwhr->lpszRawHeaders, szCrLf); LPWSTR * ppszRawHeaderLines = HTTP_Tokenize(lpwhr->lpszRawHeaders, szCrLf);
@ -1361,7 +1351,7 @@ static BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLev
return TRUE; return TRUE;
} }
else if (index == HTTP_QUERY_STATUS_TEXT) case HTTP_QUERY_STATUS_TEXT:
{ {
DWORD len = strlenW(lpwhr->lpszStatusText); DWORD len = strlenW(lpwhr->lpszStatusText);
if (len + 1 > *lpdwBufferLength/sizeof(WCHAR)) if (len + 1 > *lpdwBufferLength/sizeof(WCHAR))
@ -1377,7 +1367,7 @@ static BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLev
return TRUE; return TRUE;
} }
else if (index == HTTP_QUERY_VERSION) case HTTP_QUERY_VERSION:
{ {
DWORD len = strlenW(lpwhr->lpszVersion); DWORD len = strlenW(lpwhr->lpszVersion);
if (len + 1 > *lpdwBufferLength/sizeof(WCHAR)) if (len + 1 > *lpdwBufferLength/sizeof(WCHAR))
@ -1393,50 +1383,38 @@ static BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLev
return TRUE; return TRUE;
} }
else if (index >= 0 && index <= HTTP_QUERY_MAX ) default:
if (level >= 0 && level <= HTTP_QUERY_MAX )
{ {
int i; int i;
for (i = 0; i < sizeof(SORTED_STANDARD_HEADERS)/sizeof(std_hdr_data) ; i++) for (i = 0; i < sizeof(SORTED_STANDARD_HEADERS)/sizeof(std_hdr_data) ; i++)
{ {
if (SORTED_STANDARD_HEADERS[i].hdrIndex == index) if (SORTED_STANDARD_HEADERS[i].hdrIndex == level)
{ {
INT requested_index = (lpdwIndex)?(*lpdwIndex):0; index = HTTP_GetCustomHeaderIndex(lpwhr,
INT index = HTTP_GetCustomHeaderIndex(lpwhr,
(LPWSTR)SORTED_STANDARD_HEADERS[i].hdrStr, (LPWSTR)SORTED_STANDARD_HEADERS[i].hdrStr,
requested_index,request_only); requested_index,request_only);
if (index < 0)
break; break;
}
}
}
}
if (index >= 0)
lphttpHdr = &lpwhr->pCustHeaders[index]; lphttpHdr = &lpwhr->pCustHeaders[index];
/* Ensure header satisifies requested attributes */
if (!lphttpHdr ||
((dwInfoLevel & HTTP_QUERY_FLAG_REQUEST_HEADERS) &&
(~lphttpHdr->wFlags & HDR_ISREQUEST)))
{
SetLastError(ERROR_HTTP_HEADER_NOT_FOUND);
return bSuccess;
}
if (lpdwIndex) if (lpdwIndex)
(*lpdwIndex)++; (*lpdwIndex)++;
break;
}
}
if (!lphttpHdr)
{
SetLastError(ERROR_HTTP_HEADER_NOT_FOUND);
return bSuccess;
}
}
else
{
SetLastError(ERROR_HTTP_HEADER_NOT_FOUND);
return bSuccess;
}
}
/* Ensure header satisifies requested attributes */
if ((dwInfoLevel & HTTP_QUERY_FLAG_REQUEST_HEADERS) &&
(~lphttpHdr->wFlags & HDR_ISREQUEST))
{
SetLastError(ERROR_HTTP_HEADER_NOT_FOUND);
return bSuccess;
}
/* coalesce value to reuqested type */ /* coalesce value to reuqested type */
if (dwInfoLevel & HTTP_QUERY_FLAG_NUMBER) if (dwInfoLevel & HTTP_QUERY_FLAG_NUMBER)
{ {