Leaked source code of windows server 2003
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.
 
 
 
 
 
 

209 lines
5.8 KiB

#include <stdafx.h>
#include "EventCmd.h"
#include "Errors.h"
#include "Parser.h"
#include "Registry.h"
#include "SNMPCtrl.h"
CString gStrMessage;
CCommandLine gCommandLine;
void PrintUsage(char *szCmdName)
{
gStrMessage.LoadString(100);
gStrMessage.AnsiToOem();
printf("%s", gStrMessage);
}
void PrintBanner()
{
gStrMessage.LoadString(101);
gStrMessage.AnsiToOem();
printf("%s", gStrMessage);
}
void InitThreadOutputCodepage()
{
setlocale (LC_COLLATE, ".OCP"); // sets the sort order
setlocale (LC_MONETARY, ".OCP"); // sets the currency formatting rules
setlocale (LC_NUMERIC, ".OCP"); // sets the formatting of numerals
setlocale (LC_TIME, ".OCP"); // defines the date/time formatting
SetThreadUILanguage(0);
}
int _cdecl main(int argc, char *argv[])
{
int retCode;
InitThreadOutputCodepage();
PrintBanner();
retCode = gCommandLine.ParseCmdLine(argc, argv);
if (retCode != ERROR_SUCCESS)
return retCode;
_W(WARN_CHECKPOINT, IDS_CHKP_WRN01);
retCode = gParser.ParseInputFile();
if (retCode != ERROR_SUCCESS)
return retCode;
_W(WARN_CHECKPOINT, IDS_CHKP_WRN02, gCommandLine.m_szFileName);
retCode = gRegistry.Connect();
if (retCode != ERROR_SUCCESS)
return retCode;
_W(WARN_CHECKPOINT, IDS_CHKP_WRN03, gCommandLine.m_szSystem == NULL ? "localhost" : gCommandLine.m_szSystem);
retCode = gParser.ProcessCommands();
if (retCode != ERROR_SUCCESS)
return retCode;
_W(WARN_CHECKPOINT, IDS_CHKP_WRN04);
if (gCommandLine.m_nFlags & CMDLINE_FLG_NORESTART)
{
if (gRegistry.m_dwFlags & REG_FLG_NEEDRESTART)
_W(WARN_ALERT, IDS_ALRT_WRN05);
}
else
{
if (gRegistry.m_dwFlags & REG_FLG_NEEDRESTART)
{
if (!gSNMPController.IsSNMPRunning())
_W(WARN_ATTENTION, IDS_ATTN_WRN06);
else
{
_W(WARN_CHECKPOINT, IDS_CHKP_WRN07);
retCode = gSNMPController.StopSNMP();
if (retCode != ERROR_SUCCESS)
return retCode;
_W(WARN_CHECKPOINT, IDS_CHKP_WRN08);
retCode = gSNMPController.StartSNMP();
if (retCode != ERROR_SUCCESS)
return retCode;
_W(WARN_CHECKPOINT, IDS_CHKP_WRN09);
}
}
else
_W(WARN_ATTENTION, IDS_ATTN_WRN10);
}
return retCode;
}
CCommandLine::CCommandLine()
{
m_szFileName = NULL;
m_szSystem = NULL;
m_nVerboseLevel = WARN_CHECKPOINT;
m_nFlags = 0;
}
CCommandLine::~CCommandLine()
{
if (m_szFileName)
delete m_szFileName;
if (m_szSystem)
delete m_szSystem;
}
DWORD CCommandLine::ParseCmdLine(int argc, char *argv[])
{
enum
{
STATE_ANY,
STATE_ARG_VERBOSE,
STATE_ARG_SYSTEM
} state = STATE_ANY;
for (int i=1; i<argc; i++)
{
switch(state)
{
case STATE_ANY:
if (strchr(CMDLINE_DELIM,argv[i][0]) != NULL)
{
if (strchr(CMDLINE_OPTION_HELP, argv[i][1]) != NULL &&
argv[i][2] == '\0')
{
PrintUsage(argv[0]);
return ERROR_NO_DATA;
}
if (strchr(CMDLINE_OPTION_VERBOSE, argv[i][1]) != NULL)
{
if (argv[i][2] != '\0')
{
m_nVerboseLevel = atoi(argv[i]+2);
_W(WARN_ATTENTION,IDS_ATTN_WRN11, m_nVerboseLevel);
}
else
state = STATE_ARG_VERBOSE;
break;
}
if (strchr(CMDLINE_OPTION_SYSTEM, argv[i][1]) != NULL &&
argv[i][2] == '\0')
{
state = STATE_ARG_SYSTEM;
break;
}
if (strchr(CMDLINE_OPTION_NORESTART, argv[i][1]) != NULL &&
argv[i][2] == '\0')
{
m_nFlags |= CMDLINE_FLG_NORESTART;
break;
}
else
_W(WARN_ALERT,IDS_ALRT_WRN12, argv[i]);
}
else
{
if (m_szFileName != NULL)
{
_W(WARN_ALERT,
IDS_ALRT_WRN13,
argv[i]);
delete m_szFileName;
}
m_szFileName = new char[strlen(argv[i])+1];
if (m_szFileName == NULL)
return _E(ERROR_OUTOFMEMORY, IDS_ERR01);
strcpy(m_szFileName, argv[i]);
}
break;
case STATE_ARG_VERBOSE:
m_nVerboseLevel = atoi(argv[i]);
_W(WARN_ATTENTION,IDS_ATTN_WRN14, m_nVerboseLevel);
state = STATE_ANY;
break;
case STATE_ARG_SYSTEM:
if (m_szSystem != NULL)
{
_W(WARN_ALERT,
IDS_ALRT_WRN15,
argv[i]);
delete m_szSystem;
}
m_szSystem = new char[strlen(argv[i])+1];
if (m_szSystem == NULL)
return _E(ERROR_OUTOFMEMORY, IDS_ERR01);
strcpy(m_szSystem, argv[i]);
state = STATE_ANY;
break;
}
}
if (m_szFileName == NULL)
{
PrintUsage(argv[0]);
return ERROR_NO_DATA;
}
return ERROR_SUCCESS;
}
DWORD CCommandLine::GetVerboseLevel()
{
return m_nVerboseLevel;
}