/*++ 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__