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.
435 lines
9.9 KiB
435 lines
9.9 KiB
/*++
|
|
|
|
Copyright (c) 1997 Microsoft Corporation
|
|
|
|
Module Name :
|
|
logobj.cxx
|
|
|
|
Abstract:
|
|
Log COM Object
|
|
|
|
Author:
|
|
|
|
Johnson Apacible (JohnsonA) 02-April-1997
|
|
|
|
|
|
--*/
|
|
|
|
#include "precomp.hxx"
|
|
#include "comlog.hxx"
|
|
|
|
CInetLogInformation::CInetLogInformation(
|
|
VOID
|
|
):
|
|
m_refCount ( 0),
|
|
m_szClientAddress ( NULL),
|
|
m_szServerAddress ( NULL),
|
|
m_szUserName ( NULL),
|
|
m_szOperation ( NULL),
|
|
m_szTarget ( NULL),
|
|
m_szParameters ( NULL),
|
|
m_szHTTPHeaders ( NULL),
|
|
m_szVersion ( NULL),
|
|
m_cbSiteName ( 0),
|
|
m_cbComputerName ( 0),
|
|
m_cbServerAddress ( 0),
|
|
m_cbClientAddress ( 0),
|
|
m_cbUserName ( 0),
|
|
m_cbOperation ( 0),
|
|
m_cbTarget ( 0),
|
|
m_cbParameters ( 0),
|
|
m_cbHTTPHeaders ( 0),
|
|
m_cbVersion ( 0),
|
|
m_dwPort ( 0),
|
|
m_msProcessingTime ( 0),
|
|
m_dwWin32Status ( 0),
|
|
m_dwProtocolStatus ( 0),
|
|
m_bytesSent ( 0),
|
|
m_bytesRecv ( 0)
|
|
|
|
{
|
|
m_szSiteName[0] = '\0';
|
|
m_szComputerName[0] = '\0';
|
|
|
|
} // CInetLogInformation::CInetLogInformation
|
|
|
|
|
|
CInetLogInformation::~CInetLogInformation(
|
|
VOID
|
|
)
|
|
{
|
|
|
|
} // CInetLogInformation::~CInetLogInformation
|
|
|
|
|
|
|
|
ULONG
|
|
CInetLogInformation::AddRef(
|
|
VOID
|
|
)
|
|
{
|
|
InterlockedIncrement( &m_refCount );
|
|
return(m_refCount);
|
|
} // CInetLogInformation::AddRef
|
|
|
|
|
|
ULONG
|
|
CInetLogInformation::Release(
|
|
VOID
|
|
)
|
|
{
|
|
InterlockedDecrement( &m_refCount );
|
|
return(m_refCount);
|
|
} // CInetLogInformation::Release
|
|
|
|
|
|
HRESULT
|
|
CInetLogInformation::QueryInterface(
|
|
REFIID riid,
|
|
VOID **ppObj
|
|
)
|
|
{
|
|
if ( riid == IID_IUnknown ||
|
|
riid == IID_IINETLOG_INFORMATION ) {
|
|
|
|
*ppObj = (CInetLogInformation *)this;
|
|
AddRef();
|
|
return(NO_ERROR);
|
|
} else {
|
|
|
|
return(E_NOINTERFACE);
|
|
}
|
|
} // CInetLogInformation::QueryInterface
|
|
|
|
|
|
#define RETURN_STRING_INFO( _pBuf, _pcbBuf, _pInfo, _cbInfo ) { \
|
|
if ( (_pBuf) != NULL ) { \
|
|
\
|
|
if ( *(_pcbBuf) >= (_cbInfo) ) { \
|
|
CopyMemory( _pBuf, _pInfo, _cbInfo ); \
|
|
} else { \
|
|
*(_pcbBuf) = (_cbInfo); \
|
|
return(NULL); \
|
|
} \
|
|
} \
|
|
*(_pcbBuf) = (_cbInfo); \
|
|
return(_pInfo); \
|
|
}
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetSiteName(
|
|
IN PCHAR pszSiteName,
|
|
IN PDWORD pcbSize
|
|
)
|
|
{
|
|
RETURN_STRING_INFO(
|
|
pszSiteName,
|
|
pcbSize,
|
|
m_szSiteName,
|
|
m_cbSiteName);
|
|
|
|
} // GetSiteName
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetComputerName(
|
|
IN PCHAR pszComputerName,
|
|
IN PDWORD pcbSize
|
|
)
|
|
{
|
|
RETURN_STRING_INFO(
|
|
pszComputerName,
|
|
pcbSize,
|
|
m_szComputerName,
|
|
m_cbComputerName);
|
|
|
|
} // GetComputerName
|
|
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetClientHostName(
|
|
IN PCHAR pszClientHostName,
|
|
IN PDWORD pcbSize
|
|
)
|
|
{
|
|
RETURN_STRING_INFO(
|
|
pszClientHostName,
|
|
pcbSize,
|
|
m_szClientAddress,
|
|
m_cbClientAddress);
|
|
|
|
} // GetClientHostName
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetClientUserName(
|
|
IN PCHAR pszClientUserName,
|
|
IN PDWORD pcbSize
|
|
)
|
|
{
|
|
RETURN_STRING_INFO(
|
|
pszClientUserName,
|
|
pcbSize,
|
|
m_szUserName,
|
|
m_cbUserName);
|
|
|
|
} // GetClientUserName
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetServerAddress(
|
|
IN PCHAR pszServerAddress,
|
|
IN PDWORD pcbSize
|
|
)
|
|
{
|
|
RETURN_STRING_INFO(
|
|
pszServerAddress,
|
|
pcbSize,
|
|
m_szServerAddress,
|
|
m_cbServerAddress);
|
|
|
|
} // GetServerIPAddress
|
|
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetOperation(
|
|
IN PCHAR pszOperation,
|
|
IN PDWORD pcbSize
|
|
)
|
|
{
|
|
RETURN_STRING_INFO(
|
|
pszOperation,
|
|
pcbSize,
|
|
m_szOperation,
|
|
m_cbOperation);
|
|
} // GetOperation
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetTarget(
|
|
IN PCHAR pszTarget,
|
|
IN PDWORD pcbSize
|
|
)
|
|
{
|
|
RETURN_STRING_INFO(
|
|
pszTarget,
|
|
pcbSize,
|
|
m_szTarget,
|
|
m_cbTarget);
|
|
|
|
} // GetTarget
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetParameters(
|
|
IN PCHAR pszParameters,
|
|
IN PDWORD pcbSize
|
|
)
|
|
{
|
|
RETURN_STRING_INFO(
|
|
pszParameters,
|
|
pcbSize,
|
|
m_szParameters,
|
|
m_cbParameters);
|
|
|
|
} // GetParameters
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetExtraHTTPHeaders(
|
|
IN PCHAR pszHTTPHeaders,
|
|
IN PDWORD pcbSize
|
|
)
|
|
{
|
|
RETURN_STRING_INFO(
|
|
pszHTTPHeaders,
|
|
pcbSize,
|
|
m_szHTTPHeaders,
|
|
m_cbHTTPHeaders);
|
|
} // GetExtraHTTPHeaders
|
|
|
|
|
|
DWORD STDMETHODCALLTYPE
|
|
CInetLogInformation::GetTimeForProcessing(
|
|
VOID
|
|
)
|
|
{
|
|
return(m_msProcessingTime);
|
|
} // GetTimeForProcessing
|
|
|
|
|
|
DWORD STDMETHODCALLTYPE
|
|
CInetLogInformation::GetPortNumber(
|
|
VOID
|
|
)
|
|
{
|
|
return(m_dwPort);
|
|
} // GetPortNumber
|
|
|
|
DWORD STDMETHODCALLTYPE
|
|
CInetLogInformation::GetBytesSent(
|
|
VOID
|
|
)
|
|
{
|
|
return(m_bytesSent);
|
|
} // GetBytesSent
|
|
|
|
|
|
DWORD STDMETHODCALLTYPE
|
|
CInetLogInformation::GetBytesRecvd(
|
|
VOID
|
|
)
|
|
{
|
|
return(m_bytesRecv);
|
|
} // GetBytesRecvd
|
|
|
|
|
|
DWORD STDMETHODCALLTYPE
|
|
CInetLogInformation::GetWin32Status(
|
|
VOID
|
|
)
|
|
{
|
|
return(m_dwWin32Status);
|
|
} // GetWin32Status
|
|
|
|
DWORD STDMETHODCALLTYPE
|
|
CInetLogInformation::GetProtocolStatus(
|
|
VOID
|
|
)
|
|
{
|
|
return(m_dwProtocolStatus);
|
|
} // GetProtocolStatus
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetVersionString(
|
|
IN PCHAR pszVersionString,
|
|
IN PDWORD pcbSize
|
|
)
|
|
{
|
|
RETURN_STRING_INFO(
|
|
pszVersionString,
|
|
pcbSize,
|
|
m_szVersion,
|
|
m_cbVersion);
|
|
|
|
} //GetVersionString
|
|
|
|
|
|
|
|
CHAR szNULL[] = "";
|
|
CHAR szDotDot[] = "...";
|
|
|
|
VOID
|
|
CInetLogInformation::CanonicalizeLogRecord(
|
|
IN INETLOG_INFORMATION * pInetLogRecord,
|
|
IN LPCSTR pszSiteName,
|
|
IN LPCSTR pszComputerName,
|
|
IN BOOL fDefault
|
|
)
|
|
{
|
|
m_szClientAddress = pInetLogRecord->pszClientHostName;
|
|
if ( m_szClientAddress == NULL ) {
|
|
m_szClientAddress = szNULL;
|
|
m_cbClientAddress = 0;
|
|
} else {
|
|
m_cbClientAddress = pInetLogRecord->cbClientHostName;
|
|
}
|
|
|
|
m_szOperation = pInetLogRecord->pszOperation;
|
|
if ( m_szOperation == NULL ) {
|
|
m_szOperation = szNULL;
|
|
m_cbOperation = 0;
|
|
} else {
|
|
m_cbOperation = pInetLogRecord->cbOperation;
|
|
if ( m_cbOperation > MAX_LOG_OPERATION_FIELD_LEN ) {
|
|
m_cbOperation = MAX_LOG_OPERATION_FIELD_LEN;
|
|
}
|
|
}
|
|
|
|
m_szTarget = pInetLogRecord->pszTarget;
|
|
if ( m_szTarget == NULL ) {
|
|
m_szTarget = szNULL;
|
|
m_cbTarget = 0;
|
|
} else {
|
|
m_cbTarget = pInetLogRecord->cbTarget;
|
|
if ( m_cbTarget > MAX_LOG_TARGET_FIELD_LEN ) {
|
|
m_cbTarget = MAX_LOG_TARGET_FIELD_LEN;
|
|
}
|
|
}
|
|
|
|
m_dwProtocolStatus = pInetLogRecord->dwProtocolStatus;
|
|
m_bytesSent = pInetLogRecord->dwBytesSent;
|
|
m_bytesRecv = pInetLogRecord->dwBytesRecvd;
|
|
|
|
if ( fDefault ) {
|
|
return;
|
|
}
|
|
|
|
strcpy( m_szSiteName, pszSiteName );
|
|
strcpy( m_szComputerName, pszComputerName );
|
|
|
|
m_cbSiteName = (DWORD)strlen(m_szSiteName);
|
|
m_cbComputerName = (DWORD)strlen(m_szComputerName);
|
|
|
|
m_szUserName = pInetLogRecord->pszClientUserName;
|
|
if ( m_szUserName == NULL ) {
|
|
m_szUserName = szNULL;
|
|
m_cbUserName = 0;
|
|
} else {
|
|
m_cbUserName = (DWORD)strlen(m_szUserName);
|
|
if ( m_cbUserName > MAX_LOG_USER_FIELD_LEN ) {
|
|
m_cbUserName = MAX_LOG_USER_FIELD_LEN;
|
|
}
|
|
}
|
|
|
|
//
|
|
// If server IP is empty, then set it the first time
|
|
//
|
|
|
|
m_szServerAddress = pInetLogRecord->pszServerAddress;
|
|
if ( m_szServerAddress == NULL ) {
|
|
m_szServerAddress = szNULL;
|
|
m_cbServerAddress = 0;
|
|
} else {
|
|
m_cbServerAddress = (DWORD)strlen(m_szServerAddress);
|
|
}
|
|
|
|
if ( pInetLogRecord->pszParameters == NULL ) {
|
|
m_szParameters = szNULL;
|
|
m_cbParameters = 0;
|
|
} else {
|
|
m_szParameters = pInetLogRecord->pszParameters;
|
|
m_cbParameters = (DWORD)strlen(m_szParameters);
|
|
if ( m_cbParameters > MAX_LOG_PARAMETER_FIELD_LEN ) {
|
|
m_szParameters = szDotDot;
|
|
m_cbParameters = 3;
|
|
}
|
|
}
|
|
|
|
if ( pInetLogRecord->pszHTTPHeader == NULL ) {
|
|
m_szHTTPHeaders = szNULL;
|
|
m_cbHTTPHeaders = 0;
|
|
} else {
|
|
m_szHTTPHeaders = pInetLogRecord->pszHTTPHeader;
|
|
m_cbHTTPHeaders = pInetLogRecord->cbHTTPHeaderSize;
|
|
}
|
|
|
|
if ( pInetLogRecord->pszVersion == NULL ) {
|
|
m_szVersion = szNULL;
|
|
m_cbVersion = 0;
|
|
} else {
|
|
m_szVersion = pInetLogRecord->pszVersion;
|
|
m_cbVersion = (DWORD)strlen(m_szVersion);
|
|
}
|
|
|
|
m_msProcessingTime = pInetLogRecord->msTimeForProcessing;
|
|
m_dwWin32Status = pInetLogRecord->dwWin32Status;
|
|
m_dwPort = pInetLogRecord->dwPort;
|
|
return;
|
|
|
|
} // CanonicalizeLogRecord
|
|
|