#ifndef _COMMON_H_ #define _COMMON_H_ #define _WIN32_WINNT 0x0500 #define _UNICODE #define UNICODE // // OS includes // #if defined(__cplusplus) extern "C" { #endif #include #include #include #include #include #include #include #include #if defined(__cplusplus) } #endif // // app includes // #pragma warning( disable : 4100 ) // unreferenced formal parameter #include "registry.h" #include "mem.h" #include "dispids.h" #include "resources.h" #include "debug.h" #include "whttptst.h" // generated #include "hashtable.h" #include "utils.h" // // class declarations // typedef class CHashTable _HANDLEMAP; typedef class CHandleMap HANDLEMAP; typedef class CHandleMap* PHANDLEMAP; void ScriptCallbackKiller(LPVOID* ppv); class CHandleMap : public _HANDLEMAP { public: CHandleMap() : _HANDLEMAP(10) {} ~CHandleMap() {} void GetHashAndBucket(HINTERNET id, LPDWORD lpHash, LPDWORD lpBucket); }; typedef class ClassFactory CLSFACTORY; typedef class ClassFactory* PCLSFACTORY; class ClassFactory : public IClassFactory { public: DECLAREIUNKNOWN(); DECLAREICLASSFACTORY(); ClassFactory(); ~ClassFactory(); static HRESULT Create(REFIID clsid, REFIID riid, void** ppv); private: LONG m_cRefs; LONG m_cLocks; }; void WinHttpCallback( HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength ); typedef class WinHttpTest WHTTPTST; typedef class WinHttpTest* PWHTTPTST; class WinHttpTest : public IWinHttpTest, public IProvideClassInfo { public: DECLAREIUNKNOWN(); DECLAREIDISPATCH(); // // IWinHttpTest // HRESULT __stdcall WinHttpOpen( VARIANT UserAgent, VARIANT AccessType, VARIANT ProxyName, VARIANT ProxyBypass, VARIANT Flags, VARIANT *OpenHandle ); HRESULT __stdcall WinHttpConnect( VARIANT OpenHandle, VARIANT ServerName, VARIANT ServerPort, VARIANT Reserved, VARIANT *ConnectHandle ); HRESULT __stdcall WinHttpOpenRequest( VARIANT ConnectHandle, VARIANT Verb, VARIANT ObjectName, VARIANT Version, VARIANT Referrer, VARIANT AcceptTypes, VARIANT Flags, VARIANT *RequestHandle ); HRESULT __stdcall WinHttpSendRequest( VARIANT RequestHandle, VARIANT Headers, VARIANT HeadersLength, VARIANT OptionalData, VARIANT OptionalLength, VARIANT TotalLength, VARIANT Context, VARIANT *Success ); HRESULT __stdcall WinHttpReceiveResponse( VARIANT RequestHandle, VARIANT Reserved, VARIANT *Success ); HRESULT __stdcall WinHttpCloseHandle( VARIANT InternetHandle, VARIANT *Success ); HRESULT __stdcall WinHttpReadData( VARIANT RequestHandle, VARIANT BufferObject, VARIANT *Success ); HRESULT __stdcall WinHttpWriteData( VARIANT RequestHandle, VARIANT BufferObject, VARIANT *Success ); HRESULT __stdcall WinHttpQueryDataAvailable( VARIANT RequestHandle, VARIANT boNumberOfBytesAvailable, VARIANT *Success ); HRESULT __stdcall WinHttpQueryOption( VARIANT InternetHandle, VARIANT Option, VARIANT BufferObject, VARIANT *Success ); HRESULT __stdcall WinHttpSetOption( VARIANT InternetHandle, VARIANT Option, VARIANT BufferObject, VARIANT *Success ); HRESULT __stdcall WinHttpSetTimeouts( VARIANT InternetHandle, VARIANT ResolveTimeout, VARIANT ConnectTimeout, VARIANT SendTimeout, VARIANT ReceiveTimeout, VARIANT *Success ); HRESULT __stdcall WinHttpAddRequestHeaders( VARIANT RequestHandle, VARIANT Headers, VARIANT HeadersLength, VARIANT Modifiers, VARIANT *Success ); HRESULT __stdcall WinHttpSetCredentials( VARIANT RequestHandle, VARIANT AuthTargets, VARIANT AuthScheme, VARIANT UserName, VARIANT Password, VARIANT AuthParams, VARIANT *Success ); HRESULT __stdcall WinHttpQueryAuthSchemes( VARIANT RequestHandle, VARIANT SupportedSchemes, VARIANT PreferredSchemes, VARIANT AuthTarget, VARIANT *Success ); HRESULT __stdcall WinHttpQueryHeaders( VARIANT RequestHandle, VARIANT InfoLevel, VARIANT HeaderName, VARIANT HeaderValue, VARIANT HeaderValueLength, VARIANT *Success ); HRESULT __stdcall WinHttpTimeFromSystemTime( VARIANT SystemTime, VARIANT boHttpTime, VARIANT *Success ); HRESULT __stdcall WinHttpTimeToSystemTime( VARIANT boHttpTime, VARIANT SystemTime, VARIANT *Success ); HRESULT __stdcall WinHttpCrackUrl( VARIANT Url, VARIANT UrlLength, VARIANT Flags, VARIANT UrlComponents, VARIANT *Success ); HRESULT __stdcall WinHttpCreateUrl( VARIANT UrlComponents, VARIANT Flags, VARIANT BufferObject, VARIANT *Success ); HRESULT __stdcall WinHttpSetStatusCallback( VARIANT InternetHandle, VARIANT CallbackFunction, VARIANT NotificationFlags, VARIANT Reserved, VARIANT *RetVal ); HRESULT __stdcall HelperGetBufferObject( VARIANT Size, VARIANT Type, VARIANT Flags, VARIANT *BufferObject ); HRESULT __stdcall HelperGetUrlComponents( VARIANT Flags, VARIANT *UrlComponents ); HRESULT __stdcall HelperGetSystemTime( VARIANT Flags, VARIANT *SystemTime ); HRESULT __stdcall HelperGetLastError( VARIANT *Win32ErrorCode ); DECLAREIPROVIDECLASSINFO(); public: WinHttpTest(); ~WinHttpTest(); static HRESULT Create(REFIID riid, void** ppv); private: HRESULT _Initialize(void); HRESULT _SetErrorCode(DWORD error); HRESULT _WinHttpOpen( LPCWSTR pwszUserAgent, DWORD dwAccessType, LPCWSTR pwszProxyName, LPCWSTR pwszProxyBypass, DWORD dwFlags, VARIANT* retval ); HRESULT _WinHttpConnect( HINTERNET hSession, LPCWSTR pwszServerName, INTERNET_PORT nServerPort, DWORD dwReserved, VARIANT* retval ); HRESULT _WinHttpOpenRequest( HINTERNET hConnect, LPCWSTR pwszVerb, LPCWSTR pwszObjectName, LPCWSTR pwszVersion, LPCWSTR pwszReferrer, LPCWSTR* ppwszAcceptTypes, DWORD dwFlags, VARIANT* retval ); HRESULT _WinHttpSendRequest( HINTERNET hRequest, LPCWSTR pwszHeaders, DWORD dwHeadersLength, LPVOID lpOptional, DWORD dwOptionalLength, DWORD dwTotalLength, DWORD_PTR dwContext, VARIANT* retval ); HRESULT _WinHttpCloseHandle( HINTERNET hInternet, VARIANT* retval ); HRESULT _WinHttpSetStatusCallback( HINTERNET hInternet, WINHTTP_STATUS_CALLBACK lpfnCallback, DWORD dwNotificationFlags, DWORD_PTR dwReserved, VARIANT* retval ); private: LONG m_cRefs; ITypeInfo* m_pti; IWHTWin32ErrorCode* m_pw32ec; }; typedef class WHTUrlComponents WHTURLCMP; typedef class WHTUrlComponents* PWHTURLCMP; class WHTUrlComponents : public IWHTUrlComponents, public IProvideClassInfo { public: DECLAREIUNKNOWN(); DECLAREIDISPATCH(); // // IWHTUrlComponents // HRESULT __stdcall get_StructSize( VARIANT *Value ); HRESULT __stdcall put_StructSize( VARIANT Value ); HRESULT __stdcall get_Scheme( VARIANT *Value ); HRESULT __stdcall put_Scheme( VARIANT Value ); HRESULT __stdcall get_SchemeLength( VARIANT *Length ); HRESULT __stdcall put_SchemeLength( VARIANT Length ); HRESULT __stdcall get_SchemeId( VARIANT *Value ); HRESULT __stdcall put_SchemeId( VARIANT Value ); HRESULT __stdcall get_HostName( VARIANT *Value ); HRESULT __stdcall put_HostName( VARIANT Value ); HRESULT __stdcall get_HostNameLength( VARIANT *Length ); HRESULT __stdcall put_HostNameLength( VARIANT Length ); HRESULT __stdcall get_Port( VARIANT *Value ); HRESULT __stdcall put_Port( VARIANT Value ); HRESULT __stdcall get_UserName( VARIANT *Value ); HRESULT __stdcall put_UserName( VARIANT Value ); HRESULT __stdcall get_UserNameLength( VARIANT *Value ); HRESULT __stdcall put_UserNameLength( VARIANT Value ); HRESULT __stdcall get_Password( VARIANT *Value ); HRESULT __stdcall put_Password( VARIANT Value ); HRESULT __stdcall get_PasswordLength( VARIANT *Length ); HRESULT __stdcall put_PasswordLength( VARIANT Length ); HRESULT __stdcall get_UrlPath( VARIANT *Value ); HRESULT __stdcall put_UrlPath( VARIANT Value ); HRESULT __stdcall get_UrlPathLength( VARIANT *Length ); HRESULT __stdcall put_UrlPathLength( VARIANT Length ); HRESULT __stdcall get_ExtraInfo( VARIANT *Value ); HRESULT __stdcall put_ExtraInfo( VARIANT Value ); HRESULT __stdcall get_ExtraInfoLength( VARIANT *Length ); HRESULT __stdcall put_ExtraInfoLength( VARIANT Length ); DECLAREIPROVIDECLASSINFO(); public: WHTUrlComponents(); ~WHTUrlComponents(); static HRESULT Create(MEMSETFLAG mf, IWHTUrlComponents** ppwuc); private: HRESULT _Initialize(MEMSETFLAG mf); LONG m_cRefs; ITypeInfo* m_pti; URL_COMPONENTSW m_uc; }; typedef class WHTWin32ErrorCode WHTERROR; typedef class WHTWin32ErrorCode* PWHTERROR; class WHTWin32ErrorCode : public IWHTWin32ErrorCode, public IProvideClassInfo { public: DECLAREIUNKNOWN(); DECLAREIDISPATCH(); HRESULT __stdcall get_ErrorCode( VARIANT *ErrorCode ); HRESULT __stdcall get_ErrorString( VARIANT *ErrorString ); HRESULT __stdcall get_IsException( VARIANT *IsException ); DECLAREIPROVIDECLASSINFO(); public: WHTWin32ErrorCode(DWORD error); ~WHTWin32ErrorCode(); static HRESULT Create(DWORD error, IWHTWin32ErrorCode** ppwec); private: HRESULT _Initialize(void); BOOL _IsException(int e); LONG m_cRefs; ITypeInfo* m_pti; DWORD m_error; BOOL m_bIsException; }; #endif /* _COMMON_H_ */