/*++ Copyright (c) 1998 Microsoft Corporation Module Name : logscripting.h Abstract: LogScripting.cpp : Declaration of the CLogScripting Automation compatible logging interface Author: Saurab Nog ( saurabn ) 01-Feb-1998 Project: IIS Logging 5.0 --*/ #ifndef _LOGSCRIPTING_ #define _LOGSCRIPTING_ #include "resource.h" // main symbols #pragma warning (disable: 4786 4788) #include #include #include #include #define INVALID_PLUGIN -1 ///////////////////////////////////////////////////////////////////////////// // CLogScripting class ATL_NO_VTABLE CLogScripting : public CComObjectRootEx, public CComCoClass, public IDispatchImpl { public: CLogScripting(); HRESULT FinalConstruct(); void FinalRelease(); DECLARE_REGISTRY_RESOURCEID(IDR_LOGSCRIPTING) DECLARE_PROTECT_FINAL_CONSTRUCT() DECLARE_GET_CONTROLLING_UNKNOWN() BEGIN_COM_MAP(CLogScripting) COM_INTERFACE_ENTRY(ILogScripting) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() private: struct FileListEntry { WCHAR wcsFileName[MAX_PATH+1]; FILETIME ftCreationTime; void Copy(const WIN32_FIND_DATAW& x) { wcscpy( wcsFileName, x.cFileName); memcpy( &ftCreationTime, &x.ftCreationTime, sizeof(FILETIME)); } }; typedef struct FileListEntry *PFileListEntry; struct FileTimeCompare { // // We need ascending order. So bigger TimeStamp is smaller // bool operator()(const PFileListEntry x, const PFileListEntry y) const { return ( CompareFileTime(&(x->ftCreationTime), &(y->ftCreationTime)) != -1); } }; typedef std::priority_queue, FileTimeCompare> FileQ; private: // // Metabase pointer // IMSAdminBase* m_pMBCom; // // Plugin information // typedef struct { ILogScripting * pILogScripting; CLSID clsid; WCHAR wcsFriendlyName[256]; } PLUGIN_INFO, *PPLUGIN_INFO; int m_iNumPlugins, m_iReadPlugin, m_iWritePlugin; PPLUGIN_INFO m_pPluginInfo; // // File Path Information // bool m_fDirectory; HANDLE m_hDirSearchHandle; WCHAR m_wcsReadFileName[MAX_PATH+1], m_wcsReadDirectoryName[MAX_PATH+1]; // // Log Time Information // DATE m_StartDateTime; DATE m_EndDateTime; // // Flag to indicate end of Records // bool m_fEndOfReadRecords; // // Directory listing // FileQ m_fQueue; // // Private member functions // int ParseLogFile(); bool GetNextFileName(); int CreateAllPlugins(); bool GetListOfAvailablePlugins(); HRESULT InternalReadLogRecord(); public: // // ILogScripting: Copied from the header file generated by MIDL. // virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE OpenLogFile( /* [in] */ BSTR szLogFileName, /* [defaultvalue][optional][in] */ IOMode Mode = ForReading, /* [defaultvalue][optional][in] */ BSTR szServiceName = L"", /* [defaultvalue][optional][in] */ long iServerInstance = 0, /* [defaultvalue][optional][in] */ BSTR szOutputLogFileFormat = L""); virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CloseLogFiles( /* [defaultvalue][optional][in] */ IOMode Mode = AllOpenFiles); virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ReadFilter( /* [defaultvalue][optional][in] */ DATE startDateTime = 0, /* [defaultvalue][optional][in] */ DATE endDateTime = 1000000); virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ReadLogRecord( void); virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE AtEndOfLog( /* [retval][ref][out] */ VARIANT_BOOL __RPC_FAR *pfEndOfRead); virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE WriteLogRecord( /* [in] */ ILogScripting __RPC_FAR *pILogScripting); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_DateTime( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarDateTime); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServiceName( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarServiceName); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServerName( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarServerName); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ClientIP( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarClientIP); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UserName( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarUserName); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServerIP( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarServerIP); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Method( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarMethod); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_URIStem( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarURIStem); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_URIQuery( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarURIQuery); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_TimeTaken( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarTimeTaken); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BytesSent( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarBytesSent); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_BytesReceived( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarBytesReceived); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Win32Status( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarWin32Status); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ProtocolStatus( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarProtocolStatus); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ServerPort( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarServerPort); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ProtocolVersion( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarProtocolVersion); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_UserAgent( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarUserAgent); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Cookie( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarCookie); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Referer( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarReferer); virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_CustomFields( /* [retval][ref][out] */ VARIANT __RPC_FAR *pvarCustomFieldsArray); }; #endif //_LOGSCRIPTING_