|
|
#include <stdafx.h>
#include "Errors.h"
#include "Parser.h"
#include "Registry.h"
#include "EventCmd.h"
COperation::COperation(tOperation operation) { m_Operation = operation; m_pNextOperation = NULL; }
COperation::~COperation() { if (m_pNextOperation) delete m_pNextOperation; }
COperation* COperation::Insert(COperation *pOperation) { if (pOperation->m_Operation < m_Operation) { pOperation->m_pNextOperation = this; return pOperation; }
if (m_pNextOperation == NULL) m_pNextOperation = pOperation; else m_pNextOperation = m_pNextOperation->Insert(pOperation);
return this; }
COperation* COperation::GetNextOp() { return m_pNextOperation; }
DWORD COperation::CheckedStrToDword(DWORD & dwDword, char *szDword) { dwDword = 0; while (*szDword != '\0') { if (*szDword < '0' || *szDword > '9') return ERROR_BAD_FORMAT; dwDword *= 10; dwDword += (*szDword++ - '0'); }
return ERROR_SUCCESS; }
COpEvents::COpEvents(tOperation operation) : COperation(operation) { m_szEventSource = NULL; m_dwEventID = 0; m_dwCount = 1; m_dwTime = 0; }
COpEvents::~COpEvents() { if (m_szEventSource != NULL) delete m_szEventSource; }
DWORD COpEvents::ParseCmdArgs() { DWORD retCode; char szToken[INPUT_TOKEN_SZ];
if ((retCode = gParser.GetNextToken(szToken, INPUT_TOKEN_SZ)) != ERROR_SUCCESS || (retCode = gParser.CheckUnGetToken(KEYWORD_PRAGMA, szToken)) != ERROR_SUCCESS) { _W(WARN_ALERT, IDS_ALRT_WRN16, gParser.m_nLineNo, gParser.m_nTokenNo); return retCode; }
if ((retCode = gParser.GetNextToken(szToken, INPUT_TOKEN_SZ)) != ERROR_SUCCESS || (retCode = gParser.CheckUnGetToken(KEYWORD_PRAGMA, szToken)) != ERROR_SUCCESS) { _W(WARN_ALERT, IDS_ALRT_WRN17, gParser.m_nLineNo, gParser.m_nTokenNo); return retCode; } if (m_szEventSource != NULL) delete m_szEventSource; m_szEventSource = new char[sizeof(szToken) + 1]; strcpy(m_szEventSource, szToken);
if ((retCode = gParser.GetNextToken(szToken, INPUT_TOKEN_SZ)) != ERROR_SUCCESS || (retCode = gParser.CheckUnGetToken(KEYWORD_PRAGMA, szToken)) != ERROR_SUCCESS || (retCode = CheckedStrToDword(m_dwEventID, szToken)) != ERROR_SUCCESS) { _W(WARN_ALERT, IDS_ALRT_WRN18, gParser.m_nLineNo, gParser.m_nTokenNo); return retCode; }
if ((retCode = gParser.GetNextToken(szToken, INPUT_TOKEN_SZ)) == ERROR_SUCCESS) { if (gParser.CheckUnGetToken(KEYWORD_PRAGMA, szToken) != ERROR_SUCCESS) goto done;
if ((retCode = CheckedStrToDword(m_dwCount, szToken)) != ERROR_SUCCESS) { _W(WARN_ALERT, IDS_ALRT_WRN19, gParser.m_nLineNo, gParser.m_nTokenNo); return retCode; } }
if ((retCode = gParser.GetNextToken(szToken, INPUT_TOKEN_SZ)) == ERROR_SUCCESS) { if (gParser.CheckUnGetToken(KEYWORD_PRAGMA, szToken) != ERROR_SUCCESS) goto done;
if ((retCode = CheckedStrToDword(m_dwTime, szToken)) != ERROR_SUCCESS) { _W(WARN_ALERT, IDS_ALRT_WRN20, gParser.m_nLineNo, gParser.m_nTokenNo); return retCode; } }
if (m_dwCount <= 1 && m_dwTime > 0) { _W(WARN_ALERT, IDS_ALRT_WRN21, gParser.m_nLineNo, gParser.m_nTokenNo, m_dwTime); m_dwTime = 0; }
if (m_dwCount >= 2 && m_dwTime == 0) { _W(WARN_ALERT, IDS_ALRT_WRN22, gParser.m_nLineNo, gParser.m_nTokenNo, m_dwCount, m_dwTime); }
done: retCode = ERROR_SUCCESS;
if (m_dwCount >= 2 && m_dwTime == 0) m_dwTime = 1;
_W(WARN_ATTENTION, IDS_ALRT_WRN23, m_Operation == OP_ADD_EVENT ? "ADD" : "DELETE", m_szEventSource, m_dwEventID, m_dwCount, m_dwTime);
return retCode; };
DWORD COpEvents::ProcessCommand() { DWORD retCode;
switch(m_Operation) { case OP_ADD_EVENT: retCode = gRegistry.AddEvent(m_szEventSource, m_dwEventID, m_dwCount, m_dwTime); break; case OP_DEL_EVENT: retCode = gRegistry.DelEvent(m_szEventSource, m_dwEventID); break; default: return _E(ERROR_INTERNAL_ERROR, IDS_ERR02, m_Operation); }
return retCode; }
COpTraps::COpTraps(tOperation operation) : COperation(operation) { m_szCommunity = NULL; m_szAddress = NULL; }
COpTraps::~COpTraps() { if (m_szCommunity != NULL) delete m_szCommunity; if (m_szAddress != NULL) delete m_szAddress; }
DWORD COpTraps::ParseCmdArgs() { DWORD retCode; char szToken[INPUT_TOKEN_SZ];
if ((retCode = gParser.GetNextToken(szToken, INPUT_TOKEN_SZ)) != ERROR_SUCCESS || (retCode = gParser.CheckUnGetToken(KEYWORD_PRAGMA, szToken)) != ERROR_SUCCESS) { _W(WARN_ALERT, IDS_ALRT_WRN24, gParser.m_nLineNo, gParser.m_nTokenNo); return retCode; } if (m_szCommunity != NULL) delete m_szCommunity; m_szCommunity = new char[strlen(szToken)+1]; if (m_szCommunity == NULL) return _E(ERROR_OUTOFMEMORY, IDS_ERR01); strcpy(m_szCommunity, szToken);
if ((retCode = gParser.GetNextToken(szToken, INPUT_TOKEN_SZ)) != ERROR_SUCCESS || (retCode = gParser.CheckUnGetToken(KEYWORD_PRAGMA, szToken)) != ERROR_SUCCESS) { _W(WARN_ALERT, IDS_ALRT_WRN25, gParser.m_nLineNo, gParser.m_nTokenNo); } if (m_szAddress != NULL) delete m_szAddress; m_szAddress = new char [strlen(szToken) + 1]; if (m_szAddress == NULL) return _E(ERROR_OUTOFMEMORY, IDS_ERR01); strcpy(m_szAddress, szToken);
_W(WARN_ATTENTION, IDS_ATTN_WRN26, m_Operation == OP_ADD_TRAP ? "ADD_TRAP_DEST" : "DELETE_TRAP_DEST", m_szCommunity, m_szAddress); return ERROR_SUCCESS; }
DWORD COpTraps::ProcessCommand() { DWORD retCode;
switch(m_Operation) { case OP_ADD_TRAP: retCode = gRegistry.AddTrap(m_szCommunity, m_szAddress); break; case OP_DEL_TRAP: retCode = gRegistry.DelTrap(m_szCommunity, m_szAddress); break; default: return _E(ERROR_INTERNAL_ERROR, IDS_ERR03, m_Operation); }
return retCode; }
|