636 lines
13 KiB
C++
636 lines
13 KiB
C++
/*++
|
|
|
|
Copyright (C) Microsoft Corporation, 2001
|
|
|
|
Module Name:
|
|
|
|
WHttpImp.hxx
|
|
|
|
Abstract:
|
|
|
|
HTTP2 WinHttp import functionality.
|
|
|
|
Author:
|
|
|
|
KamenM 10-30-01 Created
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
|
|
#if _MSC_VER >= 1200
|
|
#pragma once
|
|
#endif
|
|
|
|
#ifndef __WHTTPIMP_HXX__
|
|
#define __WHTTPIMP_HXX__
|
|
|
|
typedef HINTERNET
|
|
(WINAPI *WinHttpOpenFn)
|
|
(
|
|
IN LPCWSTR pwszUserAgent,
|
|
IN DWORD dwAccessType,
|
|
IN LPCWSTR pwszProxyName OPTIONAL,
|
|
IN LPCWSTR pwszProxyBypass OPTIONAL,
|
|
IN DWORD dwFlags
|
|
);
|
|
|
|
typedef WINHTTP_STATUS_CALLBACK
|
|
(WINAPI *WinHttpSetStatusCallbackFn)
|
|
(
|
|
IN HINTERNET hInternet,
|
|
IN WINHTTP_STATUS_CALLBACK lpfnInternetCallback,
|
|
IN DWORD dwNotificationFlags,
|
|
IN DWORD_PTR dwReserved
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpSetOptionFn)
|
|
(
|
|
IN HINTERNET hInternet,
|
|
IN DWORD dwOption,
|
|
IN LPVOID lpBuffer,
|
|
IN DWORD dwBufferLength
|
|
);
|
|
|
|
typedef HINTERNET
|
|
(WINAPI *WinHttpConnectFn)
|
|
(
|
|
IN HINTERNET hSession,
|
|
IN LPCWSTR pswzServerName,
|
|
IN INTERNET_PORT nServerPort,
|
|
IN DWORD dwReserved
|
|
);
|
|
|
|
typedef HINTERNET
|
|
(WINAPI *WinHttpOpenRequestFn)
|
|
(
|
|
IN HINTERNET hConnect,
|
|
IN LPCWSTR pwszVerb,
|
|
IN LPCWSTR pwszObjectName,
|
|
IN LPCWSTR pwszVersion,
|
|
IN LPCWSTR pwszReferrer OPTIONAL,
|
|
IN LPCWSTR FAR * ppwszAcceptTypes OPTIONAL,
|
|
IN DWORD dwFlags
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpQueryOptionFn)
|
|
(
|
|
IN HINTERNET hInternet,
|
|
IN DWORD dwOption,
|
|
OUT LPVOID lpBuffer OPTIONAL,
|
|
IN OUT LPDWORD lpdwBufferLength
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpSendRequestFn)
|
|
(
|
|
IN HINTERNET hRequest,
|
|
IN LPCWSTR pwszHeaders OPTIONAL,
|
|
IN DWORD dwHeadersLength,
|
|
IN LPVOID lpOptional OPTIONAL,
|
|
IN DWORD dwOptionalLength,
|
|
IN DWORD dwTotalLength,
|
|
IN DWORD_PTR dwContext
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpWriteDataFn)
|
|
(
|
|
IN HINTERNET hRequest,
|
|
IN LPCVOID lpBuffer,
|
|
IN DWORD dwNumberOfBytesToWrite,
|
|
OUT LPDWORD lpdwNumberOfBytesWritten
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpReceiveResponseFn)
|
|
(
|
|
IN HINTERNET hRequest,
|
|
IN LPVOID lpReserved
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpReadDataFn)
|
|
(
|
|
IN HINTERNET hRequest,
|
|
IN LPVOID lpBuffer,
|
|
IN DWORD dwNumberOfBytesToRead,
|
|
OUT LPDWORD lpdwNumberOfBytesRead
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpCloseHandleFn)
|
|
(
|
|
IN HINTERNET hInternet
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpQueryHeadersFn)
|
|
(
|
|
IN HINTERNET hRequest,
|
|
IN DWORD dwInfoLevel,
|
|
IN LPCWSTR pwszName OPTIONAL,
|
|
OUT LPVOID lpBuffer OPTIONAL,
|
|
IN OUT LPDWORD lpdwBufferLength,
|
|
IN OUT LPDWORD lpdwIndex OPTIONAL
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpQueryDataAvailableFn)
|
|
(
|
|
IN HINTERNET hRequest,
|
|
OUT LPDWORD lpdwNumberOfBytesAvailable OPTIONAL
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpQueryAuthSchemesFn)
|
|
(
|
|
IN HINTERNET hRequest,
|
|
OUT LPDWORD lpdwSupportedSchemes,
|
|
OUT LPDWORD lpdwPreferredScheme,
|
|
OUT LPDWORD pdwAuthTarget
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpSetCredentialsFn)
|
|
(
|
|
IN HINTERNET hRequest,
|
|
IN DWORD AuthTargets,
|
|
IN DWORD AuthScheme,
|
|
IN LPCWSTR pwszUserName,
|
|
IN LPCWSTR pwszPassword,
|
|
IN LPVOID pAuthParams
|
|
);
|
|
|
|
typedef BOOL
|
|
(WINAPI *WinHttpAddRequestHeadersFn)
|
|
(
|
|
IN HINTERNET hRequest,
|
|
IN LPCWSTR pwszHeaders,
|
|
IN DWORD dwHeadersLength,
|
|
IN DWORD dwModifiers
|
|
);
|
|
|
|
typedef struct tagRpcWinHttpImportTableType
|
|
{
|
|
WinHttpOpenFn WinHttpOpenFnPtr;
|
|
WinHttpSetStatusCallbackFn WinHttpSetStatusCallbackFnPtr;
|
|
WinHttpSetOptionFn WinHttpSetOptionFnPtr;
|
|
WinHttpConnectFn WinHttpConnectFnPtr;
|
|
WinHttpOpenRequestFn WinHttpOpenRequestFnPtr;
|
|
WinHttpQueryOptionFn WinHttpQueryOptionFnPtr;
|
|
WinHttpSendRequestFn WinHttpSendRequestFnPtr;
|
|
WinHttpWriteDataFn WinHttpWriteDataFnPtr;
|
|
WinHttpReceiveResponseFn WinHttpReceiveResponseFnPtr;
|
|
WinHttpReadDataFn WinHttpReadDataFnPtr;
|
|
WinHttpCloseHandleFn WinHttpCloseHandleFnPtr;
|
|
WinHttpQueryHeadersFn WinHttpQueryHeadersFnPtr;
|
|
WinHttpQueryDataAvailableFn WinHttpQueryDataAvailableFnPtr;
|
|
WinHttpQueryAuthSchemesFn WinHttpQueryAuthSchemesFnPtr;
|
|
WinHttpSetCredentialsFn WinHttpSetCredentialsFnPtr;
|
|
WinHttpAddRequestHeadersFn WinHttpAddRequestHeadersFnPtr;
|
|
} RpcWinHttpImportTableType;
|
|
|
|
extern RpcWinHttpImportTableType RpcWinHttpImportTable;
|
|
|
|
RPC_STATUS InitRpcWinHttpImportTable (
|
|
void
|
|
);
|
|
|
|
inline HINTERNET
|
|
WINAPI WinHttpOpenImp (
|
|
IN LPCWSTR pwszUserAgent,
|
|
IN DWORD dwAccessType,
|
|
IN LPCWSTR pwszProxyName OPTIONAL,
|
|
IN LPCWSTR pwszProxyBypass OPTIONAL,
|
|
IN DWORD dwFlags
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
return RpcWinHttpImportTable.WinHttpOpenFnPtr (
|
|
pwszUserAgent,
|
|
dwAccessType,
|
|
pwszProxyName,
|
|
pwszProxyBypass,
|
|
dwFlags
|
|
);
|
|
}
|
|
|
|
inline WINHTTP_STATUS_CALLBACK
|
|
WINAPI WinHttpSetStatusCallbackImp (
|
|
IN HINTERNET hInternet,
|
|
IN WINHTTP_STATUS_CALLBACK lpfnInternetCallback,
|
|
IN DWORD dwNotificationFlags,
|
|
IN DWORD_PTR dwReserved
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
return RpcWinHttpImportTable.WinHttpSetStatusCallbackFnPtr (
|
|
hInternet,
|
|
lpfnInternetCallback,
|
|
dwNotificationFlags,
|
|
dwReserved
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpSetOptionImp (
|
|
IN HINTERNET hInternet,
|
|
IN DWORD dwOption,
|
|
IN LPVOID lpBuffer,
|
|
IN DWORD dwBufferLength
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
return RpcWinHttpImportTable.WinHttpSetOptionFnPtr (
|
|
hInternet,
|
|
dwOption,
|
|
lpBuffer,
|
|
dwBufferLength
|
|
);
|
|
}
|
|
|
|
inline HINTERNET
|
|
WINAPI WinHttpConnectImp (
|
|
IN HINTERNET hSession,
|
|
IN LPCWSTR pswzServerName,
|
|
IN INTERNET_PORT nServerPort,
|
|
IN DWORD dwReserved
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
return RpcWinHttpImportTable.WinHttpConnectFnPtr (
|
|
hSession,
|
|
pswzServerName,
|
|
nServerPort,
|
|
dwReserved
|
|
);
|
|
}
|
|
|
|
inline HINTERNET
|
|
WINAPI WinHttpOpenRequestImp (
|
|
IN HINTERNET hConnect,
|
|
IN LPCWSTR pwszVerb,
|
|
IN LPCWSTR pwszObjectName,
|
|
IN LPCWSTR pwszVersion,
|
|
IN LPCWSTR pwszReferrer OPTIONAL,
|
|
IN LPCWSTR FAR * ppwszAcceptTypes OPTIONAL,
|
|
IN DWORD dwFlags
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
return RpcWinHttpImportTable.WinHttpOpenRequestFnPtr (
|
|
hConnect,
|
|
pwszVerb,
|
|
pwszObjectName,
|
|
pwszVersion,
|
|
pwszReferrer,
|
|
ppwszAcceptTypes,
|
|
dwFlags
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpQueryOptionImp (
|
|
IN HINTERNET hInternet,
|
|
IN DWORD dwOption,
|
|
OUT LPVOID lpBuffer OPTIONAL,
|
|
IN OUT LPDWORD lpdwBufferLength
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
return RpcWinHttpImportTable.WinHttpQueryOptionFnPtr (
|
|
hInternet,
|
|
dwOption,
|
|
lpBuffer,
|
|
lpdwBufferLength
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpSendRequestImp (
|
|
IN HINTERNET hRequest,
|
|
IN LPCWSTR pwszHeaders OPTIONAL,
|
|
IN DWORD dwHeadersLength,
|
|
IN LPVOID lpOptional OPTIONAL,
|
|
IN DWORD dwOptionalLength,
|
|
IN DWORD dwTotalLength,
|
|
IN DWORD_PTR dwContext
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
LOG_FN_OPERATION_ENTRY2(HTTP2LOG_WHTTPRAW_WinHttpSendRequest, HTTP2LOG_OT_WINHTTP_RAW,
|
|
hRequest, dwTotalLength);
|
|
|
|
return RpcWinHttpImportTable.WinHttpSendRequestFnPtr (
|
|
hRequest,
|
|
pwszHeaders,
|
|
dwHeadersLength,
|
|
lpOptional,
|
|
dwOptionalLength,
|
|
dwTotalLength,
|
|
dwContext
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpWriteDataImp (
|
|
IN HINTERNET hRequest,
|
|
IN LPCVOID lpBuffer,
|
|
IN DWORD dwNumberOfBytesToWrite,
|
|
OUT LPDWORD lpdwNumberOfBytesWritten
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
LOG_FN_OPERATION_ENTRY2(HTTP2LOG_WHTTPRAW_WinHttpWriteData, HTTP2LOG_OT_WINHTTP_RAW,
|
|
hRequest, dwNumberOfBytesToWrite);
|
|
|
|
return RpcWinHttpImportTable.WinHttpWriteDataFnPtr (
|
|
hRequest,
|
|
lpBuffer,
|
|
dwNumberOfBytesToWrite,
|
|
lpdwNumberOfBytesWritten
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpReceiveResponseImp (
|
|
IN HINTERNET hRequest,
|
|
IN LPVOID lpReserved
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
LOG_FN_OPERATION_ENTRY2(HTTP2LOG_WHTTPRAW_WinHttpReceiveResponse, HTTP2LOG_OT_WINHTTP_RAW,
|
|
hRequest, 0);
|
|
|
|
return RpcWinHttpImportTable.WinHttpReceiveResponseFnPtr (
|
|
hRequest,
|
|
lpReserved
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpReadDataImp (
|
|
IN HINTERNET hRequest,
|
|
IN LPVOID lpBuffer,
|
|
IN DWORD dwNumberOfBytesToRead,
|
|
OUT LPDWORD lpdwNumberOfBytesRead
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
LOG_FN_OPERATION_ENTRY2(HTTP2LOG_WHTTPRAW_WinHttpReadData, HTTP2LOG_OT_WINHTTP_RAW,
|
|
hRequest, dwNumberOfBytesToRead);
|
|
|
|
return RpcWinHttpImportTable.WinHttpReadDataFnPtr (
|
|
hRequest,
|
|
lpBuffer,
|
|
dwNumberOfBytesToRead,
|
|
lpdwNumberOfBytesRead
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpCloseHandleImp (
|
|
IN HINTERNET hInternet
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
return RpcWinHttpImportTable.WinHttpCloseHandleFnPtr (
|
|
hInternet
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpQueryHeadersImp (
|
|
IN HINTERNET hRequest,
|
|
IN DWORD dwInfoLevel,
|
|
IN LPCWSTR pwszName OPTIONAL,
|
|
OUT LPVOID lpBuffer OPTIONAL,
|
|
IN OUT LPDWORD lpdwBufferLength,
|
|
IN OUT LPDWORD lpdwIndex OPTIONAL
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
LOG_FN_OPERATION_ENTRY2(HTTP2LOG_WHTTPRAW_WinHttpQueryHeaders, HTTP2LOG_OT_WINHTTP_RAW,
|
|
hRequest, dwInfoLevel);
|
|
|
|
return RpcWinHttpImportTable.WinHttpQueryHeadersFnPtr (
|
|
hRequest,
|
|
dwInfoLevel,
|
|
pwszName,
|
|
lpBuffer,
|
|
lpdwBufferLength,
|
|
lpdwIndex
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpQueryDataAvailableImp (
|
|
IN HINTERNET hRequest,
|
|
OUT LPDWORD lpdwNumberOfBytesAvailable OPTIONAL
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
LOG_FN_OPERATION_ENTRY2(HTTP2LOG_WHTTPRAW_WinHttpQueryDataAvailable, HTTP2LOG_OT_WINHTTP_RAW,
|
|
hRequest, 0);
|
|
|
|
return RpcWinHttpImportTable.WinHttpQueryDataAvailableFnPtr (
|
|
hRequest,
|
|
lpdwNumberOfBytesAvailable
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpQueryAuthSchemesImp (
|
|
IN HINTERNET hRequest,
|
|
OUT LPDWORD lpdwSupportedSchemes,
|
|
OUT LPDWORD lpdwPreferredScheme,
|
|
OUT LPDWORD pdwAuthTarget
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
LOG_FN_OPERATION_ENTRY2(HTTP2LOG_WHTTPRAW_WinHttpQueryAuthSchemes, HTTP2LOG_OT_WINHTTP_RAW,
|
|
hRequest, 0);
|
|
|
|
return RpcWinHttpImportTable.WinHttpQueryAuthSchemesFnPtr (
|
|
hRequest,
|
|
lpdwSupportedSchemes,
|
|
lpdwPreferredScheme,
|
|
pdwAuthTarget
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpSetCredentialsImp (
|
|
IN HINTERNET hRequest,
|
|
IN DWORD AuthTargets,
|
|
IN DWORD AuthScheme,
|
|
IN LPCWSTR pwszUserName,
|
|
IN LPCWSTR pwszPassword,
|
|
IN LPVOID pAuthParams
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
LOG_FN_OPERATION_ENTRY2(HTTP2LOG_WHTTPRAW_WinHttpSetCredentials, HTTP2LOG_OT_WINHTTP_RAW,
|
|
hRequest, AuthScheme);
|
|
|
|
return RpcWinHttpImportTable.WinHttpSetCredentialsFnPtr (
|
|
hRequest,
|
|
AuthTargets,
|
|
AuthScheme,
|
|
pwszUserName,
|
|
pwszPassword,
|
|
pAuthParams
|
|
);
|
|
}
|
|
|
|
inline BOOL
|
|
WINAPI WinHttpAddRequestHeadersImp (
|
|
IN HINTERNET hRequest,
|
|
IN LPCWSTR pwszHeaders,
|
|
IN DWORD dwHeadersLength,
|
|
IN DWORD dwModifiers
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Stub to respective WinHttp function.
|
|
|
|
--*/
|
|
{
|
|
LOG_FN_OPERATION_ENTRY2(HTTP2LOG_WHTTPRAW_WinHttpAddRequestHeaders, HTTP2LOG_OT_WINHTTP_RAW,
|
|
hRequest, dwHeadersLength);
|
|
|
|
return RpcWinHttpImportTable.WinHttpAddRequestHeadersFnPtr (
|
|
hRequest,
|
|
pwszHeaders,
|
|
dwHeadersLength,
|
|
dwModifiers
|
|
);
|
|
}
|
|
|
|
extern HMODULE WinHttpLibrary;
|
|
|
|
inline RPC_STATUS
|
|
InitWinHttpIfNecessary (
|
|
void
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Initializes WinHttp. Must
|
|
be called before any WinHttp function.
|
|
The function must be idempotent.
|
|
|
|
Arguments:
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK or RPC_S_* for error.
|
|
|
|
--*/
|
|
{
|
|
if (WinHttpLibrary)
|
|
return RPC_S_OK;
|
|
|
|
return InitRpcWinHttpImportTable();
|
|
}
|
|
|
|
#endif // __WHTTPIMP_HXX__
|