wininet: Implement INTERNET_OPTION_CALLBACK in InternetSetOption{A, W}.

This commit is contained in:
Hans Leidekker 2007-08-09 18:34:22 +02:00 committed by Alexandre Julliard
parent c1c6f4ad6b
commit 4332f418a5
1 changed files with 34 additions and 13 deletions

View File

@ -1556,6 +1556,19 @@ BOOL WINAPI InternetCanonicalizeUrlW(LPCWSTR lpszUrl, LPWSTR lpszBuffer,
return (hr == S_OK) ? TRUE : FALSE; return (hr == S_OK) ? TRUE : FALSE;
} }
static INTERNET_STATUS_CALLBACK set_status_callback(
LPWININETHANDLEHEADER lpwh, INTERNET_STATUS_CALLBACK callback, BOOL unicode)
{
INTERNET_STATUS_CALLBACK ret;
if (unicode) lpwh->dwInternalFlags |= INET_CALLBACKW;
else lpwh->dwInternalFlags &= ~INET_CALLBACKW;
ret = lpwh->lpfnStatusCB;
lpwh->lpfnStatusCB = callback;
return ret;
}
/*********************************************************************** /***********************************************************************
* InternetSetStatusCallbackA (WININET.@) * InternetSetStatusCallbackA (WININET.@)
@ -1576,16 +1589,12 @@ INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackA(
TRACE("0x%08x\n", (ULONG)hInternet); TRACE("0x%08x\n", (ULONG)hInternet);
lpwh = WININET_GetObject(hInternet); if (!(lpwh = WININET_GetObject(hInternet)))
if (!lpwh)
return INTERNET_INVALID_STATUS_CALLBACK; return INTERNET_INVALID_STATUS_CALLBACK;
lpwh->dwInternalFlags &= ~INET_CALLBACKW; retVal = set_status_callback(lpwh, lpfnIntCB, FALSE);
retVal = lpwh->lpfnStatusCB;
lpwh->lpfnStatusCB = lpfnIntCB;
WININET_Release( lpwh ); WININET_Release( lpwh );
return retVal; return retVal;
} }
@ -1607,17 +1616,13 @@ INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackW(
LPWININETHANDLEHEADER lpwh; LPWININETHANDLEHEADER lpwh;
TRACE("0x%08x\n", (ULONG)hInternet); TRACE("0x%08x\n", (ULONG)hInternet);
lpwh = WININET_GetObject(hInternet); if (!(lpwh = WININET_GetObject(hInternet)))
if (!lpwh)
return INTERNET_INVALID_STATUS_CALLBACK; return INTERNET_INVALID_STATUS_CALLBACK;
lpwh->dwInternalFlags |= INET_CALLBACKW; retVal = set_status_callback(lpwh, lpfnIntCB, TRUE);
retVal = lpwh->lpfnStatusCB;
lpwh->lpfnStatusCB = lpfnIntCB;
WININET_Release( lpwh ); WININET_Release( lpwh );
return retVal; return retVal;
} }
@ -2344,6 +2349,12 @@ BOOL WINAPI InternetSetOptionW(HINTERNET hInternet, DWORD dwOption,
switch (dwOption) switch (dwOption)
{ {
case INTERNET_OPTION_CALLBACK:
{
INTERNET_STATUS_CALLBACK callback = *(INTERNET_STATUS_CALLBACK *)lpBuffer;
ret = (set_status_callback(lpwhh, callback, TRUE) != INTERNET_INVALID_STATUS_CALLBACK);
break;
}
case INTERNET_OPTION_HTTP_VERSION: case INTERNET_OPTION_HTTP_VERSION:
{ {
HTTP_VERSION_INFO* pVersion=(HTTP_VERSION_INFO*)lpBuffer; HTTP_VERSION_INFO* pVersion=(HTTP_VERSION_INFO*)lpBuffer;
@ -2466,6 +2477,16 @@ BOOL WINAPI InternetSetOptionA(HINTERNET hInternet, DWORD dwOption,
switch( dwOption ) switch( dwOption )
{ {
case INTERNET_OPTION_CALLBACK:
{
LPWININETHANDLEHEADER lpwh;
INTERNET_STATUS_CALLBACK callback = *(INTERNET_STATUS_CALLBACK *)lpBuffer;
if (!(lpwh = (LPWININETHANDLEHEADER)WININET_GetObject(hInternet))) return FALSE;
r = (set_status_callback(lpwh, callback, FALSE) != INTERNET_INVALID_STATUS_CALLBACK);
WININET_Release(lpwh);
return r;
}
case INTERNET_OPTION_PROXY: case INTERNET_OPTION_PROXY:
{ {
LPINTERNET_PROXY_INFOA pi = (LPINTERNET_PROXY_INFOA) lpBuffer; LPINTERNET_PROXY_INFOA pi = (LPINTERNET_PROXY_INFOA) lpBuffer;