305 lines
8 KiB
C
305 lines
8 KiB
C
#include "convlog.h"
|
|
|
|
INT
|
|
ParseArgs (
|
|
IN INT argc,
|
|
IN PCHAR argv[]
|
|
)
|
|
{
|
|
|
|
INT nCount;
|
|
UINT nIndex;
|
|
CHAR szTemp[MAX_PATH];
|
|
|
|
//
|
|
// Parse the command line and set flags for requested information
|
|
// elements. If parameters are incorrect or nonexistant, show usage.
|
|
//
|
|
|
|
if (argc > 1) {
|
|
|
|
//
|
|
// Get command line switches
|
|
//
|
|
|
|
for (nCount = 1; nCount < argc; nCount++) {
|
|
|
|
PCHAR p;
|
|
CHAR c;
|
|
|
|
p=argv[nCount];
|
|
if ((*p == '-') || (*p == '/')) {
|
|
|
|
p++;
|
|
c = *p;
|
|
if (c == '\0') {
|
|
continue;
|
|
}
|
|
|
|
p++;
|
|
switch (tolower(c)) { // Process switches
|
|
|
|
// They specified the -s switch, cancel default
|
|
// services to be processed.
|
|
//
|
|
|
|
case 'i':
|
|
|
|
//
|
|
// Get input logfile type
|
|
//
|
|
|
|
if ( *p != '\0' ) {
|
|
|
|
switch (tolower(*p)) {
|
|
case 'i':
|
|
LogFileFormat = LOGFILE_MSINET;
|
|
break;
|
|
|
|
case 'n':
|
|
LogFileFormat = LOGFILE_NCSA;
|
|
NoFormatConversion = TRUE;
|
|
break;
|
|
|
|
case 'e':
|
|
LogFileFormat = LOGFILE_CUSTOM;
|
|
break;
|
|
|
|
default:
|
|
LogFileFormat = LOGFILE_INVALID;
|
|
}
|
|
|
|
} else {
|
|
return (ILLEGAL_COMMAND_LINE);
|
|
}
|
|
break;
|
|
|
|
case 'l':
|
|
|
|
//
|
|
// Get date format/valid for MS INET Log only
|
|
//
|
|
|
|
if ( *p != '\0' ) {
|
|
|
|
switch (*p) {
|
|
case '0':
|
|
dwDateFormat = DateFormatUsa;
|
|
break;
|
|
|
|
case '1':
|
|
dwDateFormat = DateFormatJapan;
|
|
break;
|
|
|
|
case '2':
|
|
dwDateFormat = DateFormatGermany;
|
|
break;
|
|
|
|
default:
|
|
return (ILLEGAL_COMMAND_LINE);
|
|
}
|
|
|
|
} else {
|
|
return (ILLEGAL_COMMAND_LINE);
|
|
}
|
|
break;
|
|
|
|
case 't':
|
|
|
|
if ((nCount+1) < argc) {
|
|
|
|
if ((*argv[nCount+1] != '-') &&
|
|
(*argv[nCount+1] != '/')) {
|
|
|
|
PCHAR pTmp;
|
|
|
|
strcpy(szTemp, argv[++nCount]);
|
|
pTmp = strstr(_strlwr(szTemp), "ncsa");
|
|
|
|
if (pTmp != NULL ) {
|
|
|
|
pTmp = strstr(szTemp, ":" );
|
|
if (NULL != pTmp ) {
|
|
|
|
strncpy(NCSAGMTOffset,pTmp+1,6);
|
|
|
|
if (strlen(NCSAGMTOffset) != 5) {
|
|
return (ILLEGAL_COMMAND_LINE);
|
|
}
|
|
|
|
if (('+' != NCSAGMTOffset[0]) &&
|
|
('-' != NCSAGMTOffset[0])) {
|
|
return (ILLEGAL_COMMAND_LINE);
|
|
}
|
|
}
|
|
} else if (0 == _stricmp(szTemp, "none")) {
|
|
NoFormatConversion = TRUE;
|
|
DoDNSConversion = TRUE;
|
|
} else {
|
|
return (ILLEGAL_COMMAND_LINE);
|
|
|
|
}
|
|
|
|
} else {
|
|
return (ILLEGAL_COMMAND_LINE);
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case 's':
|
|
case 'f':
|
|
|
|
//
|
|
// Do nothing. For compatibility with old convlog versions.
|
|
//
|
|
break;
|
|
|
|
case 'n':
|
|
case 'd':
|
|
|
|
//
|
|
// doing NCSA dns convertion
|
|
//
|
|
|
|
DoDNSConversion = TRUE;
|
|
break;
|
|
|
|
case 'x':
|
|
|
|
//
|
|
// doing NCSA dns convertion
|
|
//
|
|
|
|
SaveFTPEntries = TRUE;
|
|
break;
|
|
|
|
case 'o':
|
|
|
|
//
|
|
// output directory
|
|
//
|
|
|
|
if ((nCount+1) < argc) {
|
|
if ((*argv[nCount+1] != '-') &&
|
|
(*argv[nCount+1] != '/')) {
|
|
|
|
strcpy(OutputDir, argv[++nCount]);
|
|
|
|
if (-1 == _access(OutputDir, 6)) {
|
|
return (OUT_DIR_NOT_OK);
|
|
}
|
|
|
|
if ('\\' != *CharPrev(OutputDir, &OutputDir[strlen(OutputDir)])) {
|
|
strcat(OutputDir, "\\");
|
|
}
|
|
}
|
|
} else {
|
|
return (ILLEGAL_COMMAND_LINE);
|
|
}
|
|
break;
|
|
|
|
case 'c':
|
|
|
|
//
|
|
// on error, continue processing file // WinSE 9148
|
|
//
|
|
|
|
bOnErrorContinue = TRUE;
|
|
break;
|
|
|
|
default:
|
|
return(ILLEGAL_COMMAND_LINE);
|
|
} //end switch
|
|
} else {
|
|
strcpy(InputFileName, argv[nCount]);
|
|
}
|
|
} //end for
|
|
|
|
if ('\0' == InputFileName[0]) {
|
|
return (ILLEGAL_COMMAND_LINE);
|
|
}
|
|
} else {
|
|
return (ILLEGAL_COMMAND_LINE);
|
|
}
|
|
|
|
if ( LogFileFormat == LOGFILE_INVALID ) {
|
|
return (ILLEGAL_COMMAND_LINE);
|
|
}
|
|
|
|
if ( NoFormatConversion &&
|
|
((LogFileFormat != LOGFILE_MSINET) &&
|
|
(LogFileFormat != LOGFILE_NCSA)) ) {
|
|
return (ERROR_BAD_NONE);
|
|
}
|
|
|
|
if (('\0' == NCSAGMTOffset[0])) {
|
|
|
|
DWORD dwRet;
|
|
INT nMinOffset;
|
|
TIME_ZONE_INFORMATION tzTimeZone;
|
|
DWORD minutes;
|
|
DWORD hours;
|
|
LONG bias;
|
|
|
|
dwRet = GetTimeZoneInformation (&tzTimeZone);
|
|
|
|
if ( dwRet == 0xffffffff ) {
|
|
|
|
bias = 0;
|
|
} else {
|
|
|
|
bias = tzTimeZone.Bias;
|
|
|
|
//
|
|
//!!! The old convlog always returns Bias
|
|
// Let's comment out this one for now so that
|
|
// we are compatible.
|
|
//
|
|
#if 0
|
|
switch (dwRet) {
|
|
|
|
case TIME_ZONE_ID_STANDARD:
|
|
if ( tzTimeZone.StandardDate.wMonth != 0 ) {
|
|
bias += tzTimeZone.StandardBias;
|
|
}
|
|
break;
|
|
|
|
case TIME_ZONE_ID_DAYLIGHT:
|
|
if ( tzTimeZone.DaylightDate.wMonth != 0 ) {
|
|
bias += tzTimeZone.DaylightBias;
|
|
}
|
|
break;
|
|
|
|
case TIME_ZONE_ID_UNKNOWN:
|
|
default:
|
|
break;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
if ( bias > 0 ) {
|
|
strcat(NCSAGMTOffset, "-");
|
|
} else {
|
|
strcat(NCSAGMTOffset, "+");
|
|
bias *= -1;
|
|
}
|
|
|
|
hours = bias/60;
|
|
minutes = bias % 60;
|
|
|
|
sprintf (szTemp, "%02lu", hours);
|
|
strcat (NCSAGMTOffset, szTemp);
|
|
|
|
sprintf (szTemp, "%02lu", minutes);
|
|
strcat (NCSAGMTOffset, szTemp);
|
|
|
|
if ( LogFileFormat == LOGFILE_CUSTOM ) {
|
|
strcpy(NCSAGMTOffset,"+0000");
|
|
}
|
|
}
|
|
return COMMAND_LINE_OK;
|
|
|
|
} //end of ParseArgs
|
|
|