/*++=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Copyright (c) 1999 Microsoft Corporation Module Name: w3srt.h Abstract: Object declarations for the W3Spoof runtime environment. Author: Paul M Midgen (pmidge) 03-November-2000 Revision History: 03-November-2000 pmidge Created =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--*/ #ifndef __W3SRT_H__ #define __W3SRT_H__ #include "common.h" typedef class CW3SRuntime RUNTIME; typedef class CW3SRuntime* PRUNTIME; typedef class CW3SPropertyBag PROPERTYBAG; typedef class CW3SPropertyBag* PPROPERTYBAG; typedef class CW3SFile FILEOBJ; typedef class CW3SFile* PFILEOBJ; #define DISPID_RUNTIME_BASE 0x10000000 #define DISPID_PROPERTYBAG_BASE 0x20000000 #define DISPID_FILE_BASE 0x30000000 #define DISPID_RUNTIME_GETFILE (DISPID_RUNTIME_BASE + 1) #define DISPID_PROPERTYBAG_GET (DISPID_PROPERTYBAG_BASE + 1) #define DISPID_PROPERTYBAG_SET (DISPID_PROPERTYBAG_BASE + 2) #define DISPID_PROPERTYBAG_EXPIRES (DISPID_PROPERTYBAG_BASE + 3) #define DISPID_PROPERTYBAG_FLUSH (DISPID_PROPERTYBAG_BASE + 4) #define DISPID_FILE_OPEN (DISPID_FILE_BASE + 1) #define DISPID_FILE_CLOSE (DISPID_FILE_BASE + 2) #define DISPID_FILE_WRITE (DISPID_FILE_BASE + 3) #define DISPID_FILE_WRITELINE (DISPID_FILE_BASE + 4) #define DISPID_FILE_WRITEBLANKLINE (DISPID_FILE_BASE + 5) #define DISPID_FILE_READ (DISPID_FILE_BASE + 6) #define DISPID_FILE_READALL (DISPID_FILE_BASE + 7) #define DISPID_FILE_ATTRIBUTES (DISPID_FILE_BASE + 8) #define DISPID_FILE_SIZE (DISPID_FILE_BASE + 9) #define DISPID_FILE_TYPE (DISPID_FILE_BASE + 10) #define DISPID_FILE_DATELASTMODIFIED (DISPID_FILE_BASE + 11) #ifdef __cplusplus extern "C" { #endif extern const IID IID_IW3SpoofRuntime; extern const IID IID_IW3SpoofPropertyBag; extern const IID IID_IW3SpoofFile; //----------------------------------------------------------------------------- // W3Spoof Runtime Interface Declarations //----------------------------------------------------------------------------- interface IW3SpoofPropertyBag : public IDispatch { virtual HRESULT __stdcall Get( /*[in]*/ BSTR Name, /*[out, retval]*/ VARIANT* Value ) PURE; virtual HRESULT __stdcall Set( /*[in]*/ BSTR Name, /*[in, optional]*/ VARIANT Value ) PURE; virtual HRESULT __stdcall get_Expires( /*[propget]*/ /*[out, retval]*/ VARIANT* Expiry ) PURE; virtual HRESULT __stdcall put_Expires( /*[propput]*/ /*[in, optional]*/ VARIANT Expiry ) PURE; virtual HRESULT __stdcall Flush(void) PURE; }; interface IW3SpoofFile : public IDispatch { virtual HRESULT __stdcall Open( /*[in]*/ BSTR Filename, /*[in, optional]*/ VARIANT Mode, /*[out, retval]*/ VARIANT* Success ) PURE; virtual HRESULT __stdcall Close(void) PURE; virtual HRESULT __stdcall Write( /*[in]*/ VARIANT Data, /*[out, retval]*/ VARIANT* Success ) PURE; virtual HRESULT __stdcall WriteLine( /*[in]*/ BSTR Line, /*[out, retval]*/ VARIANT* Success ) PURE; virtual HRESULT __stdcall WriteBlankLine( /*[out, retval]*/ VARIANT* Success ) PURE; virtual HRESULT __stdcall Read( /*[in]*/ VARIANT Bytes, /*[out, retval]*/ VARIANT* Data ) PURE; virtual HRESULT __stdcall ReadAll( /*[out, retval]*/ VARIANT* Data ) PURE; virtual HRESULT __stdcall Attributes( /*[out, retval]*/ VARIANT* Attributes ) PURE; virtual HRESULT __stdcall Size( /*[out, retval]*/ VARIANT* Size ) PURE; virtual HRESULT __stdcall Type( /*[out, retval]*/ VARIANT* Type ) PURE; virtual HRESULT __stdcall DateLastModified( /*[out, retval]*/ VARIANT* Date ) PURE; }; interface IW3SpoofRuntime : public IUnknown { virtual HRESULT __stdcall GetFile(IDispatch** ppdisp) PURE; virtual HRESULT __stdcall GetPropertyBag(BSTR Name, IW3SpoofPropertyBag** ppbag) PURE; }; #ifdef __cplusplus } #endif //----------------------------------------------------------------------------- // W3Spoof Runtime Object Declarations //----------------------------------------------------------------------------- class CW3SRuntime : public IW3SpoofRuntime, public IDispatch { public: DECLAREIUNKNOWN(); DECLAREIDISPATCH(); public: // IW3SpoofRuntime HRESULT __stdcall GetFile(IDispatch** ppdisp); HRESULT __stdcall GetPropertyBag(BSTR Name, IW3SpoofPropertyBag** ppbag); CW3SRuntime(); ~CW3SRuntime(); HRESULT Terminate(void); static HRESULT Create(PRUNTIME* pprt); private: HRESULT _Initialize(void); LONG m_cRefs; PSTRINGMAP m_propertybags; }; class CW3SPropertyBag : public IW3SpoofPropertyBag { public : DECLAREIUNKNOWN(); DECLAREIDISPATCH(); public: HRESULT __stdcall Get(BSTR Name, VARIANT* Value); HRESULT __stdcall Set(BSTR Name, VARIANT Value); HRESULT __stdcall get_Expires(VARIANT* Expiry); HRESULT __stdcall put_Expires(VARIANT Expiry); HRESULT __stdcall Flush(void); CW3SPropertyBag(); ~CW3SPropertyBag(); HRESULT GetBagName(LPWSTR* ppwsz); HRESULT Terminate(void); static HRESULT Create(LPWSTR name, PPROPERTYBAG* ppbag); private: HRESULT _Initialize(LPWSTR name); void _Reset(void); BOOL _IsStale(void); LONG m_cRefs; LPWSTR m_name; BOOL m_stale; DWORD m_expiry; DWORD m_created; PSTRINGMAP m_propertybag; }; class CW3SFile : public IW3SpoofFile { public: DECLAREIUNKNOWN(); DECLAREIDISPATCH(); public: HRESULT __stdcall Open(BSTR Filename, VARIANT Mode, VARIANT* Success); HRESULT __stdcall Close(void); HRESULT __stdcall Write(VARIANT Data, VARIANT* Success); HRESULT __stdcall WriteLine(BSTR Line, VARIANT* Success); HRESULT __stdcall WriteBlankLine(VARIANT* Success); HRESULT __stdcall Read(VARIANT Bytes, VARIANT* Data); HRESULT __stdcall ReadAll(VARIANT* Data); HRESULT __stdcall Attributes(VARIANT* Attributes); HRESULT __stdcall Size(VARIANT* Size); HRESULT __stdcall Type(VARIANT* Type); HRESULT __stdcall DateLastModified(VARIANT* Date); CW3SFile(); ~CW3SFile(); static HRESULT Create(IW3SpoofFile** ppw3sf); private: void _Cleanup(void); BOOL _CacheHttpResponse(void); LONG m_cRefs; BOOL m_bFileOpened; BOOL m_bReadOnly; BOOL m_bAsciiData; BOOL m_bHttpResponseCached; HANDLE m_hFile; IWinHttpRequest* m_pWHR; VARIANT m_vHttpResponse; DWORD m_cHttpBytesRead; BHFI m_bhfi; }; #endif /* __W3SRT_H__ */