You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
241 lines
8.0 KiB
241 lines
8.0 KiB
/*++
|
|
|
|
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 <algorithm>
|
|
#include <queue>
|
|
#include <deque>
|
|
#include <functional>
|
|
|
|
#define INVALID_PLUGIN -1
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLogScripting
|
|
class ATL_NO_VTABLE CLogScripting :
|
|
public CComObjectRootEx<CComSingleThreadModel>,
|
|
public CComCoClass<CLogScripting, &CLSID_LogScripting>,
|
|
public IDispatchImpl<ILogScripting, &IID_ILogScripting, &LIBID_IISLog>
|
|
{
|
|
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<PFileListEntry, std::vector<PFileListEntry>, 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_
|