|
|
#include "convlog.h"
#include "inetcom.h"
#include "logtype.h"
#include <winnlsp.h>
//
// Current output file
//
OUTFILESTATUS WebOutFile = {0}; OUTFILESTATUS NoConvertOutFile = {0};
//
// Used for find first
//
WIN32_FIND_DATA FindData = {0};
//
// struct for holding command line args
//
BOOL DoDNSConversion = FALSE; BOOL SaveFTPEntries = FALSE; BOOL NoFormatConversion = FALSE; CHAR FTPSaveFile[MAX_PATH+1] = {0}; CHAR NCSAGMTOffset[MAX_PATH+1] = {0}; DWORD LogFileFormat = LOGFILE_INVALID; CHAR InputFileName[MAX_PATH+1] = {0}; CHAR OutputDir[MAX_PATH+1] = {0}; CHAR TempDir[MAX_PATH+1] = {0}; DWORD nWebLineCount = 0; DATEFORMAT dwDateFormat = DateFormatUsa; BOOL bOnErrorContinue = FALSE;
//
// struct that holds log line items
//
INLOGLINE InLogLine = {0};
int __cdecl main( int argc, char *argv[] ) {
FILE *fpInFile; //log File to open
HANDLE hFile; //Handle for FindFirstFile
//
// Buffer to hold log line
//
CHAR szInBuf[MAX_LOG_RECORD_LEN+1];
//
// File mask to search for
//
CHAR szFileMask[MAX_PATH+1]; CHAR szInfileName[MAX_PATH+1]; CHAR szWorkingDir[MAX_PATH+1];
int nTotalWebCount = 0;
BOOL bWebFound = FALSE; //did we find a web line?
BOOL bNoConvertFound = FALSE; //did we find any NoConvert lines?
BOOL bRet; //used for testing returns
DWORD dwErr; //used to hold error codes
int nLineCount = 0; //number of lines read from input file
int nTotalCount = 0;
//int nCount = 0; Bug # 101690
CHAR *pCh;
DWORD dwFieldMask; BOOL fGetHeader; DWORD nLinesDumped = 0; DWORD dwGetLogLineResult; BOOL bContinue; DWORD dwCurrentLine;
//
// initialize data structure
//
setlocale(LC_ALL, ".ACP" ); SetThreadUILanguage(0);
WebOutFile.fpOutFile = NULL; NoConvertOutFile.fpOutFile = NULL;
ZeroMemory(szInBuf, sizeof(szInBuf)); strcpy(OutputDir, ".\\");
switch ( ParseArgs(argc, argv) ) { case ILLEGAL_COMMAND_LINE: Usage(argv[0]); return 0;
case OUT_DIR_NOT_OK: printfids(IDS_BAD_DIR, OutputDir); return 0;
case ERROR_BAD_NONE: printfids(IDS_BAD_NONE_ERR); return 0;
case COMMAND_LINE_OK: break; }
if ( DoDNSConversion ) {
INT serr; WSADATA wsaData;
if (serr = WSAStartup(MAKEWORD(2,0), &wsaData) != 0) { printfids(IDS_WINSOCK_ERR, serr); DoDNSConversion = FALSE; } }
if ( (LogFileFormat == LOGFILE_NCSA) && !DoDNSConversion ) { printfids(IDS_NO_CONVERSION_NEEDED); return(0); }
if ( !InitDateStrings() ) { printfids(IDS_BAD_DATESTRINGS); }
if (DoDNSConversion) {
InitHashTable(2000); AddLocalMachineToCache( ); }
strcpy (szWorkingDir, InputFileName);
// Bug # 101690
//
// for (nCount = strlen(szWorkingDir) -1; nCount >= 0; nCount--) {
//
// if ('\\' == szWorkingDir[nCount]) {
// szWorkingDir[nCount+1] = '\0';
// break;
// }
//
// }
// if (nCount < 0) {
// strcpy (szWorkingDir, ".\\");
// }
//
pCh = _mbsrchr(szWorkingDir, '\\');
if (pCh != NULL) { *(pCh+1) = '\0'; } else { strcpy (szWorkingDir, ".\\"); }
strcpy(szFileMask, InputFileName); hFile = FindFirstFile (szFileMask, &FindData);
if (INVALID_HANDLE_VALUE == hFile) { printfids(IDS_FILE_NONE, szFileMask); return(0); }
do {
if (!(FILE_ATTRIBUTE_DIRECTORY & FindData.dwFileAttributes)) {
strcpy(szInfileName, szWorkingDir); strcat(szInfileName, FindData.cFileName);
fpInFile = fopen(szInfileName, "r"); printfids(IDS_FILE_OPEN, FindData.cFileName);
nLineCount = 0; dwCurrentLine = 0;
{ //
// Do file conversion
//
strcpy (WebOutFile.szLastDate, NEW_DATETIME); strcpy (WebOutFile.szLastTime, NEW_DATETIME);
bWebFound = FALSE; nWebLineCount = 0; nLinesDumped = 0;
ExtendedFieldsDefined = FALSE; szGlobalDate[0] = '\0'; }
fGetHeader = TRUE; bContinue = TRUE;
while ((bContinue) && (!feof(fpInFile))) {
dwCurrentLine++; dwGetLogLineResult = GetLogLine( fpInFile, szInBuf, sizeof(szInBuf), &InLogLine);
if (dwGetLogLineResult == GETLOG_SUCCESS) {
nLineCount++; if (DoDNSConversion) {
//
//Getting machine names could take days, so put out status messages
//
switch (nLineCount) { case 25: case 50: case 100: case 250: case 500: printfids(IDS_LINES_PROC, FindData.cFileName, nLineCount); break; default: if ((nLineCount % 1000) == 0) printfids(IDS_LINES_PROC, FindData.cFileName, nLineCount); } //end switch
}
//
// if NCSA and just DoDNS, do no convert
//
if ( NoFormatConversion ||
(_strnicmp( InLogLine.szService, "W3SVC", strlen("W3SVC")) != 0) ) {
if ( NoFormatConversion || SaveFTPEntries ) {
ProcessNoConvertLine( &InLogLine, FindData.cFileName, szInBuf, &NoConvertOutFile, &bNoConvertFound); } else { nLinesDumped++; }
} else { bWebFound = TRUE; if (ProcessWebLine( &InLogLine, FindData.cFileName, &WebOutFile)) {
nWebLineCount++; } } } //end if LogLineProcessed
else { if (dwGetLogLineResult != GETLOG_ERROR) { nLineCount++; }
switch (dwGetLogLineResult) { case GETLOG_ERROR_PARSE_NCSA: printfids(IDS_FILE_NOT_NCSA,dwCurrentLine); break; case GETLOG_ERROR_PARSE_MSINET: printfids(IDS_FILE_NOT_MSINET,dwCurrentLine); break; case GETLOG_ERROR_PARSE_EXTENDED: printfids(IDS_BAD_EXTENDED_FORMAT,dwCurrentLine); break; default: break; }
if (!bOnErrorContinue) { bContinue = FALSE; } } } //end while !eof
nTotalCount += nLineCount;
if (fpInFile) { fclose(fpInFile); }
if (bWebFound) {
if (WebOutFile.fpOutFile != NULL ) { fclose(WebOutFile.fpOutFile); WebOutFile.fpOutFile = NULL; }
bRet = MoveFileEx( WebOutFile.szTmpFileName, WebOutFile.szOutFileName, MOVEFILE_COPY_ALLOWED);
if (!bRet) { dwErr = GetLastError(); switch (dwErr) { case ERROR_FILE_EXISTS: case ERROR_ALREADY_EXISTS: CombineFiles(WebOutFile.szTmpFileName, WebOutFile.szOutFileName); break; case ERROR_PATH_NOT_FOUND: break; default: printfids(IDS_FILE_ERR, dwErr); return 1; } } }
if (bNoConvertFound) {
bNoConvertFound = FALSE;
if (NoConvertOutFile.fpOutFile != NULL) { fclose(NoConvertOutFile.fpOutFile); NoConvertOutFile.fpOutFile = NULL; }
bRet = MoveFileEx( NoConvertOutFile.szTmpFileName, NoConvertOutFile.szOutFileName, MOVEFILE_COPY_ALLOWED);
if (!bRet) { dwErr = GetLastError(); switch (dwErr) {
case ERROR_FILE_EXISTS: case ERROR_ALREADY_EXISTS: CombineFiles(NoConvertOutFile.szTmpFileName, NoConvertOutFile.szOutFileName); break; case ERROR_PATH_NOT_FOUND: break; default: printfids(IDS_FILE_ERR, dwErr); exit (1); break; } } }
nTotalWebCount += nWebLineCount; printfids( IDS_LINES, FindData.cFileName, nLineCount); printfids (IDS_WEB_LINES, nWebLineCount); if ( nLinesDumped > 0 ) { printfids( IDS_DUMP_LINES, nLinesDumped ); nLinesDumped = 0; } }
} while (FindNextFile (hFile, &FindData));
FindClose(hFile);
printfids (IDS_TOTALS); printfids (IDS_TOT_LINES, nTotalCount);
printfids (IDS_TOT_WEB_LINES, nTotalWebCount);
#if DBG
PrintCacheTotals(); #endif
return (0); }
|