windows-nt/Source/XPSP1/NT/com/rpc/runtime/trans/common/whttpimp.hxx
2020-09-26 16:20:57 +08:00

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__