188 lines
5.2 KiB
C++
188 lines
5.2 KiB
C++
/*++
|
|
|
|
Copyright (c) 1997 Microsoft Corporation
|
|
|
|
Module Name :
|
|
logobj.cxx
|
|
|
|
Abstract:
|
|
Log COM Object
|
|
|
|
Author:
|
|
|
|
Johnson Apacible (JohnsonA) 02-April-1997
|
|
|
|
|
|
--*/
|
|
|
|
#include "precomp.hxx"
|
|
#include <ilogobj.hxx>
|
|
#include <httpapi.h>
|
|
#include <multisza.hxx>
|
|
#include "logging.h"
|
|
#include "colog.hxx"
|
|
|
|
LPSTR ReturnStringInfo(LPSTR pBuf,
|
|
LPDWORD pcbBuf,
|
|
LPSTR pszInfo,
|
|
DWORD cchInfo)
|
|
/*--
|
|
Support the weird custom logging semantics. Do the copy of the
|
|
string from the value we have to the buffer provided if it is big
|
|
enough or return the value if no buffer is provided
|
|
++*/
|
|
{
|
|
if (pBuf != NULL)
|
|
{
|
|
if (*pcbBuf >= (cchInfo + 1))
|
|
{
|
|
memcpy(pBuf, pszInfo, cchInfo + 1);
|
|
}
|
|
else
|
|
{
|
|
*pcbBuf = cchInfo + 1;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
*pcbBuf = cchInfo + 1;
|
|
return pszInfo;
|
|
}
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetSiteName(IN PCHAR pszSiteName,
|
|
IN PDWORD pcbSize)
|
|
{
|
|
return ReturnStringInfo(pszSiteName,
|
|
pcbSize,
|
|
m_pLogContext->QueryUlLogData()->ServiceName,
|
|
m_pLogContext->QueryUlLogData()->ServiceNameLength);
|
|
} // GetSiteName
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetComputerName(IN PCHAR pszComputerName,
|
|
IN PDWORD pcbSize)
|
|
{
|
|
return ReturnStringInfo(pszComputerName,
|
|
pcbSize,
|
|
g_pszComputerName,
|
|
strlen(g_pszComputerName));
|
|
} // GetComputerName
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetClientHostName(IN PCHAR pszClientHostName,
|
|
IN PDWORD pcbSize)
|
|
{
|
|
return ReturnStringInfo(pszClientHostName,
|
|
pcbSize,
|
|
m_pLogContext->QueryUlLogData()->ClientIp,
|
|
m_pLogContext->QueryUlLogData()->ClientIpLength);
|
|
} // GetClientHostName
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetClientUserName(IN PCHAR pszClientUserName,
|
|
IN PDWORD pcbSize)
|
|
{
|
|
return ReturnStringInfo(pszClientUserName,
|
|
pcbSize,
|
|
m_strUserName.QueryStr(),
|
|
m_strUserName.QueryCCH());
|
|
} // GetClientUserName
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetServerAddress(IN PCHAR pszServerAddress,
|
|
IN PDWORD pcbSize)
|
|
{
|
|
return ReturnStringInfo(pszServerAddress,
|
|
pcbSize,
|
|
m_pLogContext->QueryUlLogData()->ServerIp,
|
|
m_pLogContext->QueryUlLogData()->ServerIpLength);
|
|
} // GetServerIPAddress
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetOperation(IN PCHAR pszOperation,
|
|
IN PDWORD pcbSize)
|
|
{
|
|
return ReturnStringInfo(pszOperation,
|
|
pcbSize,
|
|
m_pLogContext->QueryUlLogData()->Method,
|
|
m_pLogContext->QueryUlLogData()->MethodLength);
|
|
} // GetOperation
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetTarget(IN PCHAR pszTarget,
|
|
IN PDWORD pcbSize)
|
|
{
|
|
return ReturnStringInfo(pszTarget,
|
|
pcbSize,
|
|
m_strTarget.QueryStr(),
|
|
m_strTarget.QueryCCH());
|
|
} // GetTarget
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetParameters(IN PCHAR pszParameters,
|
|
IN PDWORD pcbSize)
|
|
{
|
|
return ReturnStringInfo(pszParameters,
|
|
pcbSize,
|
|
m_pLogContext->QueryUlLogData()->UriQuery,
|
|
m_pLogContext->QueryUlLogData()->UriQueryLength);
|
|
} // GetParameters
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetVersionString(
|
|
IN PCHAR pszVersionString,
|
|
IN PDWORD pcbSize
|
|
)
|
|
{
|
|
return ReturnStringInfo(pszVersionString,
|
|
pcbSize,
|
|
m_pLogContext->m_strVersion.QueryStr(),
|
|
m_pLogContext->m_strVersion.QueryCCH());
|
|
} //GetVersionString
|
|
|
|
|
|
LPSTR STDMETHODCALLTYPE
|
|
CInetLogInformation::GetExtraHTTPHeaders(IN PCHAR pszHTTPHeaders,
|
|
IN PDWORD pcbSize)
|
|
{
|
|
return ReturnStringInfo(pszHTTPHeaders,
|
|
pcbSize,
|
|
m_pLogContext->m_mszHTTPHeaders.QueryStr(),
|
|
m_pLogContext->m_mszHTTPHeaders.QueryCCH());
|
|
} // GetExtraHTTPHeaders
|
|
|
|
|
|
|
|
VOID
|
|
CInetLogInformation::CanonicalizeLogRecord(
|
|
IN LOG_CONTEXT *pInetLogRecord)
|
|
{
|
|
m_pLogContext = pInetLogRecord;
|
|
|
|
HTTP_LOG_FIELDS_DATA *pUlLogData = pInetLogRecord->QueryUlLogData();
|
|
|
|
if (pUlLogData->UriStem &&
|
|
FAILED(m_strTarget.CopyW(pUlLogData->UriStem)))
|
|
{
|
|
m_strTarget.Reset();
|
|
}
|
|
|
|
if (pUlLogData->UserName &&
|
|
FAILED(m_strUserName.CopyW(pUlLogData->UserName)))
|
|
{
|
|
m_strUserName.Reset();
|
|
}
|
|
|
|
} // CanonicalizeLogRecord
|
|
|