Log monitoring subagent sends Windows event source, severity, and code to the server...
authorVictor Kirhenshtein <victor@netxms.org>
Fri, 16 May 2014 11:34:27 +0000 (14:34 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Fri, 16 May 2014 11:34:27 +0000 (14:34 +0300)
15 files changed:
ChangeLog
android/src/agent/res/values/build_number.xml
android/src/console/res/values/build_number.xml
build/build_number
include/build.h
include/nxlpapi.h
src/agent/subagents/logwatch/main.cpp
src/java/build/pack.cmd
src/java/build/set_build_number.cmd
src/java/netxms-base/src/main/java/org/netxms/base/BuildNumber.java
src/libnetxms/agent.cpp
src/libnxlp/main.cpp
src/libnxlp/parser.cpp
src/libnxlp/rule.cpp
src/server/core/syslogd.cpp

index 09e1aff..ac9929d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -20,6 +20,8 @@
 - Added driver for Mikrotik routers
 - Added driver for Cisco Wireless Controller 4400 (former Airespace)
 - Wireless controller and access point support improved
+- Log monitoring subagent sends Windows event source, severity, and code
+  to the server as part of NetXMS event
 - Management console:
    - DCI values can be shown on network map links
    - DCI value can be shown on map as immage, that checnges depending on DCI value
index a4ddb82..c418aca 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-       <string name="build_number">7872</string>
+       <string name="build_number">7873</string>
 </resources>
index a4ddb82..c418aca 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-       <string name="build_number">7872</string>
+       <string name="build_number">7873</string>
 </resources>
index d66c3d3..79c743f 100644 (file)
@@ -1 +1 @@
-7872
+7873
index 71e12f4..c65d08d 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef __build_h
 #define __build_h
-#define NETXMS_VERSION_BUILD 7872
-#define NETXMS_VERSION_BUILD_STRING _T("7872")
+#define NETXMS_VERSION_BUILD 7873
+#define NETXMS_VERSION_BUILD_STRING _T("7873")
 #endif
index 69c57cd..fe6f5f3 100644 (file)
 #define LP_FCP_UCS4     4
 #define LP_FCP_UCS4_LE  5
 
-
-//
-// Callback
-// Parameters:
-//    event id, event name, original text, number of parameters, list of parameters,
-//    object id, user arg
-//
-
-typedef void (* LogParserCallback)(DWORD, const TCHAR *, const TCHAR *, int, TCHAR **, DWORD, void *);
-
-//
-// Log parser rule
-//
+/**
+ * Log parser callback
+ * Parameters:
+ *    NetXMS event code, NetXMS event name, original text, source, 
+ *    original event ID (facility), original severity,
+ *    number of capture groups, list of capture groups,
+ *    object id, user arg
+ */
+typedef void (* LogParserCallback)(UINT32, const TCHAR *, const TCHAR *, const TCHAR *, UINT32, UINT32, int, TCHAR **, UINT32, void *);
 
 class LIBNXLP_EXPORTABLE LogParser;
 
+/**
+ * Log parser rule
+ */
 class LIBNXLP_EXPORTABLE LogParserRule
 {
+   friend class LogParser;
+
 private:
        LogParser *m_parser;
        regex_t m_preg;
-       DWORD m_eventCode;
+       UINT32 m_eventCode;
        TCHAR *m_eventName;
        bool m_isValid;
        int m_numParams;
        regmatch_t *m_pmatch;
        TCHAR *m_regexp;
        TCHAR *m_source;
-       DWORD m_level;
-       DWORD m_idStart;
-       DWORD m_idEnd;
+       UINT32 m_level;
+       UINT32 m_idStart;
+       UINT32 m_idEnd;
        TCHAR *m_context;
        int m_contextAction;
        TCHAR *m_contextToChange;
@@ -108,20 +109,22 @@ private:
        bool m_breakOnMatch;
        TCHAR *m_description;
 
-       void expandMacros(const TCHAR *regexp, String &out);
+       bool matchInternal(bool extMode, const TCHAR *source, UINT32 eventId, UINT32 level,
+                          const TCHAR *line, LogParserCallback cb, UINT32 objectId, void *userArg); 
+   void expandMacros(const TCHAR *regexp, String &out);
 
 public:
        LogParserRule(LogParser *parser,
-                     const TCHAR *regexp, DWORD eventCode = 0, const TCHAR *eventName = NULL,
-                                         int numParams = 0, const TCHAR *source = NULL, DWORD level = 0xFFFFFFFF,
-                                         DWORD idStart = 0, DWORD idEnd = 0xFFFFFFFF);
+                     const TCHAR *regexp, UINT32 eventCode = 0, const TCHAR *eventName = NULL,
+                                         int numParams = 0, const TCHAR *source = NULL, UINT32 level = 0xFFFFFFFF,
+                                         UINT32 idStart = 0, UINT32 idEnd = 0xFFFFFFFF);
        LogParserRule(LogParserRule *src, LogParser *parser);
        ~LogParserRule();
 
        bool isValid() { return m_isValid; }
-       bool match(const TCHAR *line, LogParserCallback cb, DWORD objectId, void *userArg);
-       bool matchEx(const TCHAR *source, DWORD eventId, DWORD level,
-                    const TCHAR *line, LogParserCallback cb, DWORD objectId, void *userArg); 
+       bool match(const TCHAR *line, LogParserCallback cb, UINT32 objectId, void *userArg);
+       bool matchEx(const TCHAR *source, UINT32 eventId, UINT32 level,
+                    const TCHAR *line, LogParserCallback cb, UINT32 objectId, void *userArg); 
        
        void setContext(const TCHAR *context) { safe_free(m_context); m_context = (context != NULL) ? _tcsdup(context) : NULL; }
        void setContextToChange(const TCHAR *context) { safe_free(m_contextToChange); m_contextToChange = (context != NULL) ? _tcsdup(context) : NULL; }
@@ -143,24 +146,21 @@ public:
        void setSource(const TCHAR *source) { safe_free(m_source); m_source = (source != NULL) ? _tcsdup(source) : NULL; }
        const TCHAR *getSource() { return CHECK_NULL_EX(m_source); }
 
-       void setLevel(DWORD level) { m_level = level; }
-       DWORD getLevel() { return m_level; }
+       void setLevel(UINT32 level) { m_level = level; }
+       UINT32 getLevel() { return m_level; }
 
-       void setIdRange(DWORD start, DWORD end) { m_idStart = start; m_idEnd = end; }
+       void setIdRange(UINT32 start, UINT32 end) { m_idStart = start; m_idEnd = end; }
        QWORD getIdRange() { return ((QWORD)m_idStart << 32) | (QWORD)m_idEnd; }
 
        const TCHAR *getRegexpSource() { return CHECK_NULL(m_regexp); }
 };
 
-
-//
-// Log parser class
-//
-
+/**
+ * Log parser class
+ */
 class LIBNXLP_EXPORTABLE LogParser
 {
-       friend bool LogParserRule::match(const TCHAR *, LogParserCallback, DWORD, void *);
-       friend bool LogParserRule::matchEx(const TCHAR *, DWORD, DWORD, const TCHAR *, LogParserCallback, DWORD, void *);
+       friend bool LogParserRule::matchInternal(bool, const TCHAR *, UINT32, UINT32, const TCHAR *, LogParserCallback, UINT32, void *);
 
 private:
        int m_numRules;
@@ -173,7 +173,7 @@ private:
        int m_fileEncoding;
        TCHAR *m_name;
        CODE_TO_TEXT *m_eventNameList;
-       bool (*m_eventResolver)(const TCHAR *, DWORD *);
+       bool (*m_eventResolver)(const TCHAR *, UINT32 *);
        THREAD m_thread;        // Associated thread
        int m_recordsProcessed;
        int m_recordsMatched;
@@ -184,7 +184,7 @@ private:
        
        const TCHAR *checkContext(LogParserRule *rule);
        void trace(int level, const TCHAR *format, ...);
-       bool matchLogRecord(bool hasAttributes, const TCHAR *source, DWORD eventId, DWORD level, const TCHAR *line, DWORD objectId);
+       bool matchLogRecord(bool hasAttributes, const TCHAR *source, UINT32 eventId, UINT32 level, const TCHAR *line, UINT32 objectId);
 
 public:
        LogParser();
@@ -192,7 +192,7 @@ public:
        ~LogParser();
        
        static ObjectArray<LogParser> *createFromXml(const char *xml, int xmlLen = -1, 
-               TCHAR *errorText = NULL, int errBufSize = 0, bool (*eventResolver)(const TCHAR *, DWORD *) = NULL);
+               TCHAR *errorText = NULL, int errBufSize = 0, bool (*eventResolver)(const TCHAR *, UINT32 *) = NULL);
 
        void setFileName(const TCHAR *name);
        const TCHAR *getFileName() { return m_fileName; }
@@ -212,19 +212,19 @@ public:
        void setProcessAllFlag(bool flag) { m_processAllRules = flag; }
        bool getProcessAllFlag() { return m_processAllRules; }
 
-       bool addRule(const TCHAR *regexp, DWORD eventCode = 0, const TCHAR *eventName = NULL, int numParams = 0);
+       bool addRule(const TCHAR *regexp, UINT32 eventCode = 0, const TCHAR *eventName = NULL, int numParams = 0);
        bool addRule(LogParserRule *rule);
        void setCallback(LogParserCallback cb) { m_cb = cb; }
        void setUserArg(void *arg) { m_userArg = arg; }
        void setEventNameList(CODE_TO_TEXT *ctt) { m_eventNameList = ctt; }
-       void setEventNameResolver(bool (*cb)(const TCHAR *, DWORD *)) { m_eventResolver = cb; }
-       DWORD resolveEventName(const TCHAR *name, DWORD defVal = 0);
+       void setEventNameResolver(bool (*cb)(const TCHAR *, UINT32 *)) { m_eventResolver = cb; }
+       UINT32 resolveEventName(const TCHAR *name, UINT32 defVal = 0);
 
        void addMacro(const TCHAR *name, const TCHAR *value);
        const TCHAR *getMacro(const TCHAR *name);
 
-       bool matchLine(const TCHAR *line, DWORD objectId = 0);
-       bool matchEvent(const TCHAR *source, DWORD eventId, DWORD level, const TCHAR *line, DWORD objectId = 0);
+       bool matchLine(const TCHAR *line, UINT32 objectId = 0);
+       bool matchEvent(const TCHAR *source, UINT32 eventId, UINT32 level, const TCHAR *line, UINT32 objectId = 0);
 
        int getProcessedRecordsCount() { return m_recordsProcessed; }
        int getMatchedRecordsCount() { return m_recordsMatched; }
index b10c472..0eef306 100644 (file)
@@ -62,11 +62,9 @@ THREAD_RESULT THREAD_CALL ParserThreadFile(void *arg)
        return THREAD_OK;
 }
 
-
-//
-// Get parser statistics
-//
-
+/**
+ * Get parser statistics
+ */
 static LONG H_ParserStats(const TCHAR *cmd, const TCHAR *arg, TCHAR *value)
 {
        TCHAR name[256];
@@ -105,11 +103,9 @@ static LONG H_ParserStats(const TCHAR *cmd, const TCHAR *arg, TCHAR *value)
        return SYSINFO_RC_SUCCESS;
 }
 
-
-//
-// Get list of configured parsers
-//
-
+/**
+ * Get list of configured parsers
+ */
 static LONG H_ParserList(const TCHAR *cmd, const TCHAR *arg, StringList *value)
 {
        for(DWORD i = 0; i < m_numParsers; i++)
@@ -117,11 +113,9 @@ static LONG H_ParserList(const TCHAR *cmd, const TCHAR *arg, StringList *value)
        return SYSINFO_RC_SUCCESS;
 }
 
-
-//
-// Called by master agent at unload
-//
-
+/**
+ * Called by master agent at unload
+ */
 static void SubagentShutdown()
 {
        DWORD i;
@@ -149,10 +143,31 @@ static void SubagentShutdown()
 /**
  * Callback for matched log records
  */
-static void LogParserMatch(DWORD eventCode, const TCHAR *eventName, const TCHAR *text, int paramCount,
-                           TCHAR **paramList, DWORD objectId, void *userArg)
+static void LogParserMatch(UINT32 eventCode, const TCHAR *eventName, const TCHAR *text,
+                           const TCHAR *source, UINT32 eventId, UINT32 severity,
+                           int cgCount, TCHAR **cgList, UINT32 objectId, void *userArg)
 {
-       AgentSendTrap2(eventCode, eventName, paramCount, paramList);
+   if (source != NULL)
+   {
+      TCHAR eventIdText[16], severityText[16];
+      _sntprintf(eventIdText, 16, _T("%u"), eventId);
+      _sntprintf(severityText, 16, _T("%u"), severity);
+
+      int count = cgCount + 3;
+      TCHAR **list = (TCHAR **)malloc(sizeof(TCHAR *) * count);
+      int i;
+      for(i = 0; i < cgCount; i++)
+         list[i] = cgList[i];
+      list[i++] = (TCHAR *)source;
+      list[i++] = eventIdText;
+      list[i++] = severityText;
+          AgentSendTrap2(eventCode, eventName, count, list);
+      free(list);
+   }
+   else
+   {
+          AgentSendTrap2(eventCode, eventName, cgCount, cgList);
+   }
 }
 
 /**
index aa3cd67..023d447 100644 (file)
@@ -1,6 +1,6 @@
 @echo off
 call set_build_number.cmd
-set version=1.2.14-RC6-%build_number%
+set version=1.2.14
 rem set version=1.2.14
 
 cd win32.win32.x86
index 343de4d..2a80eab 100644 (file)
@@ -1,5 +1,5 @@
 package org.netxms.base;
 public final class BuildNumber {
-   public static final String TEXT = "7872";
-   public static final int NUMBER = 7872;
+   public static final String TEXT = "7873";
+   public static final int NUMBER = 7873;
 }
index 0869482..c9f1961 100644 (file)
@@ -101,11 +101,9 @@ void LIBNETXMS_EXPORTABLE AgentWriteDebugLog2(int level, const TCHAR *format, va
    }
 }
 
-
-//
-// Send trap from agent to server
-//
-
+/**
+ * Send trap from agent to server
+ */
 void LIBNETXMS_EXPORTABLE AgentSendTrap(UINT32 dwEvent, const TCHAR *eventName, const char *pszFormat, ...)
 {
    va_list args;
@@ -118,6 +116,9 @@ void LIBNETXMS_EXPORTABLE AgentSendTrap(UINT32 dwEvent, const TCHAR *eventName,
    }
 }
 
+/**
+ * Send trap from agent to server
+ */
 void LIBNETXMS_EXPORTABLE AgentSendTrap2(UINT32 dwEvent, const TCHAR *eventName, int nCount, TCHAR **ppszArgList)
 {
    if (s_fpSendTrap2 != NULL)
index efda027..fbcbfc3 100644 (file)
@@ -1,7 +1,7 @@
 /* 
 ** NetXMS - Network Management System
 ** Log Parsing Library
-** Copyright (C) 2003-2012 Victor Kirhenshtein
+** Copyright (C) 2003-2014 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU Lesser General Public License as published by
 
 #include "libnxlp.h"
 
-
-//
-// DLL entry point
-//
-
 #ifdef _WIN32
 
+/**
+ * DLL entry point
+ */
 BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 {
    if (dwReason == DLL_PROCESS_ATTACH)
@@ -38,22 +36,3 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 }
 
 #endif   /* _WIN32 */
-
-
-//
-// NetWare library entry point
-//
-
-#ifdef _NETWARE
-
-int _init(void)
-{
-   return 0;
-}
-
-int _fini(void)
-{
-   return 0;
-}
-
-#endif
index 08e144c..40d0b34 100644 (file)
@@ -186,7 +186,7 @@ bool LogParser::addRule(LogParserRule *rule)
 /**
  * Create and add rule
  */
-bool LogParser::addRule(const TCHAR *regexp, DWORD eventCode, const TCHAR *eventName, int numParams)
+bool LogParser::addRule(const TCHAR *regexp, UINT32 eventCode, const TCHAR *eventName, int numParams)
 {
        return addRule(new LogParserRule(this, regexp, eventCode, eventName, numParams));
 }
@@ -226,8 +226,8 @@ const TCHAR *LogParser::checkContext(LogParserRule *rule)
 /**
  * Match log record
  */
-bool LogParser::matchLogRecord(bool hasAttributes, const TCHAR *source, DWORD eventId,
-                                                                                DWORD level, const TCHAR *line, DWORD objectId)
+bool LogParser::matchLogRecord(bool hasAttributes, const TCHAR *source, UINT32 eventId,
+                                                                                UINT32 level, const TCHAR *line, UINT32 objectId)
 {
        int i;
        const TCHAR *state;
@@ -284,7 +284,7 @@ bool LogParser::matchLogRecord(bool hasAttributes, const TCHAR *source, DWORD ev
 /**
  * Match simple log line
  */
-bool LogParser::matchLine(const TCHAR *line, DWORD objectId)
+bool LogParser::matchLine(const TCHAR *line, UINT32 objectId)
 {
        return matchLogRecord(false, NULL, 0, 0, line, objectId);
 }
@@ -292,7 +292,7 @@ bool LogParser::matchLine(const TCHAR *line, DWORD objectId)
 /**
  * Match log event (text with additional attributes - source, severity, event id)
  */
-bool LogParser::matchEvent(const TCHAR *source, DWORD eventId, DWORD level, const TCHAR *line, DWORD objectId)
+bool LogParser::matchEvent(const TCHAR *source, UINT32 eventId, UINT32 level, const TCHAR *line, UINT32 objectId)
 {
        return matchLogRecord(true, source, eventId, level, line, objectId);
 }
@@ -405,7 +405,7 @@ static void StartElement(void *userData, const char *name, const char **attrs)
                name = XMLGetAttr(attrs, "name");
 #ifdef UNICODE
                ps->macroName = L"";
-               ps->macroName.addMultiByteString(name, (DWORD)strlen(name), CP_UTF8);
+               ps->macroName.addMultiByteString(name, (UINT32)strlen(name), CP_UTF8);
 #else
                ps->macroName = CHECK_NULL_A(name);
 #endif
@@ -430,7 +430,7 @@ static void StartElement(void *userData, const char *name, const char **attrs)
                ps->ruleContext = L"";
                const char *context = XMLGetAttr(attrs, "context");
                if (context != NULL)
-                       ps->ruleContext.addMultiByteString(context, (DWORD)strlen(context), CP_UTF8);
+                       ps->ruleContext.addMultiByteString(context, (UINT32)strlen(context), CP_UTF8);
 #else
                ps->ruleContext = XMLGetAttr(attrs, "context");
 #endif
@@ -544,7 +544,7 @@ static void EndElement(void *userData, const char *name)
        }
        else if (!strcmp(name, "rule"))
        {
-               DWORD eventCode;
+               UINT32 eventCode;
                const TCHAR *eventName = NULL;
                TCHAR *eptr;
                LogParserRule *rule;
@@ -581,7 +581,7 @@ static void EndElement(void *userData, const char *name)
 
                if (!ps->id.isEmpty())
                {
-                       DWORD start, end;
+                       UINT32 start, end;
                        TCHAR *eptr;
 
                        start = _tcstoul(ps->id, &eptr, 0);
@@ -679,7 +679,7 @@ static void CharData(void *userData, const XML_Char *s, int len)
  * Create parser configuration from XML. Returns array of identical parsers,
  * one for each <file> tag in source XML. Resulting parsers only differs with file names.
  */
-ObjectArray<LogParser> *LogParser::createFromXml(const char *xml, int xmlLen, TCHAR *errorText, int errBufSize, bool (*eventResolver)(const TCHAR *, DWORD *))
+ObjectArray<LogParser> *LogParser::createFromXml(const char *xml, int xmlLen, TCHAR *errorText, int errBufSize, bool (*eventResolver)(const TCHAR *, UINT32 *))
 {
        ObjectArray<LogParser> *parsers = NULL;
        bool success;
@@ -732,7 +732,7 @@ ObjectArray<LogParser> *LogParser::createFromXml(const char *xml, int xmlLen, TC
 /**
  * Resolve event name
  */
-DWORD LogParser::resolveEventName(const TCHAR *name, DWORD defVal)
+UINT32 LogParser::resolveEventName(const TCHAR *name, UINT32 defVal)
 {
        if (m_eventNameList != NULL)
        {
@@ -745,7 +745,7 @@ DWORD LogParser::resolveEventName(const TCHAR *name, DWORD defVal)
 
        if (m_eventResolver != NULL)
        {
-               DWORD val;
+               UINT32 val;
 
                if (m_eventResolver(name, &val))
                        return val;
index 489b6bd..5264285 100644 (file)
@@ -30,8 +30,8 @@
 /**
  * Constructor
  */
-LogParserRule::LogParserRule(LogParser *parser, const TCHAR *regexp, DWORD eventCode, const TCHAR *eventName,
-                                                                         int numParams, const TCHAR *source, DWORD level, DWORD idStart, DWORD idEnd)
+LogParserRule::LogParserRule(LogParser *parser, const TCHAR *regexp, UINT32 eventCode, const TCHAR *eventName,
+                                                                         int numParams, const TCHAR *source, UINT32 level, UINT32 idStart, UINT32 idEnd)
 {
        String expandedRegexp;
 
@@ -98,8 +98,34 @@ LogParserRule::~LogParserRule()
 /**
  * Match line
  */
-bool LogParserRule::match(const TCHAR *line, LogParserCallback cb, DWORD objectId, void *userArg)
+bool LogParserRule::matchInternal(bool extMode, const TCHAR *source, UINT32 eventId, UINT32 level,
+                                                                         const TCHAR *line, LogParserCallback cb, UINT32 objectId, void *userArg)
 {
+   if (extMode)
+   {
+          if (m_source != NULL)
+          {
+                  m_parser->trace(6, _T("  matching source \"%s\" against pattern \"%s\""), source, m_source);
+                  if (!MatchString(m_source, source, FALSE))
+                  {
+                          m_parser->trace(6, _T("  source: no match"));
+                          return false;
+                  }
+          }
+
+          if ((eventId < m_idStart) || (eventId > m_idEnd))
+          {
+                  m_parser->trace(6, _T("  event id 0x%08x not in range 0x%08x - 0x%08x"), eventId, m_idStart, m_idEnd);
+                  return false;
+          }
+
+          if (!(m_level & level))
+          {
+                  m_parser->trace(6, _T("  severity level 0x%04x not match mask 0x%04x"), level, m_level);
+                  return false;
+          }
+   }
+
        if (!m_isValid)
        {
                m_parser->trace(6, _T("  regexp is invalid: %s"), m_regexp);
@@ -113,7 +139,7 @@ bool LogParserRule::match(const TCHAR *line, LogParserCallback cb, DWORD objectI
                {
                        m_parser->trace(6, _T("  matched"));
                        if ((cb != NULL) && ((m_eventCode != 0) || (m_eventName != NULL)))
-                               cb(m_eventCode, m_eventName, line, 0, NULL, objectId, userArg);
+                               cb(m_eventCode, m_eventName, line, source, eventId, level, 0, NULL, objectId, userArg);
                        return true;
                }
        }
@@ -147,7 +173,7 @@ bool LogParserRule::match(const TCHAR *line, LogParserCallback cb, DWORD objectI
                                        }
                                }
 
-                               cb(m_eventCode, m_eventName, line, m_numParams, params, objectId, userArg);
+                               cb(m_eventCode, m_eventName, line, source, eventId, level, m_numParams, params, objectId, userArg);
                                
                                for(i = 0; i < m_numParams; i++)
                                        safe_free(params[i]);
@@ -161,34 +187,20 @@ bool LogParserRule::match(const TCHAR *line, LogParserCallback cb, DWORD objectI
 }
 
 /**
- * Match event
+ * Match line
  */
-bool LogParserRule::matchEx(const TCHAR *source, DWORD eventId, DWORD level,
-                                                                 const TCHAR *line, LogParserCallback cb, DWORD objectId, void *userArg)
+bool LogParserRule::match(const TCHAR *line, LogParserCallback cb, UINT32 objectId, void *userArg)
 {
-       if (m_source != NULL)
-       {
-               m_parser->trace(6, _T("  matching source \"%s\" against pattern \"%s\""), source, m_source);
-               if (!MatchString(m_source, source, FALSE))
-               {
-                       m_parser->trace(6, _T("  source: no match"));
-                       return false;
-               }
-       }
-
-       if ((eventId < m_idStart) || (eventId > m_idEnd))
-       {
-               m_parser->trace(6, _T("  event id 0x%08x not in range 0x%08x - 0x%08x"), eventId, m_idStart, m_idEnd);
-               return false;
-       }
-
-       if (!(m_level & level))
-       {
-               m_parser->trace(6, _T("  severity level 0x%04x not match mask 0x%04x"), level, m_level);
-               return false;
-       }
+   return matchInternal(false, NULL, 0, 0, line, cb, objectId, userArg);
+}
 
-       return match(line, cb, objectId, userArg);
+/**
+ * Match event
+ */
+bool LogParserRule::matchEx(const TCHAR *source, UINT32 eventId, UINT32 level,
+                                                                   const TCHAR *line, LogParserCallback cb, UINT32 objectId, void *userArg)
+{
+   return matchInternal(true, source, eventId, level, line, cb, objectId, userArg);
 }
 
 /**
@@ -206,7 +218,7 @@ void LogParserRule::expandMacros(const TCHAR *regexp, String &out)
                        // Check for escape
                        if ((curr != regexp) && (*(curr - 1) == _T('\\')))
                        {
-                               out.addString(prev, (DWORD)(curr - prev - 1));
+                               out.addString(prev, (UINT32)(curr - prev - 1));
                                out += _T("@");
                        }
                        else
@@ -216,7 +228,7 @@ void LogParserRule::expandMacros(const TCHAR *regexp, String &out)
                                {
                                        int i;
 
-                                       out.addString(prev, (DWORD)(curr - prev));
+                                       out.addString(prev, (UINT32)(curr - prev));
                                        curr += 2;
                                        for(i = 0; (*curr != 0) && (*curr != '}'); i++)
                                                name[i] = *curr++;
@@ -225,11 +237,11 @@ void LogParserRule::expandMacros(const TCHAR *regexp, String &out)
                                }
                                else
                                {
-                                       out.addString(prev, (DWORD)(curr - prev + 1));
+                                       out.addString(prev, (UINT32)(curr - prev + 1));
                                }
                        }
                        prev = curr + 1;
                }
        }
-       out.addString(prev, (DWORD)(curr - prev));
+       out.addString(prev, (UINT32)(curr - prev));
 }
index 69aded1..1990d20 100644 (file)
@@ -427,8 +427,9 @@ static void QueueSyslogMessage(char *psMsg, int nMsgLen, UINT32 dwSourceIP)
 /**
  * Callback for syslog parser
  */
-static void SyslogParserCallback(DWORD eventCode, const TCHAR *eventName, const TCHAR *line, int paramCount,
-                                                                                  TCHAR **params, DWORD objectId, void *userArg)
+static void SyslogParserCallback(UINT32 eventCode, const TCHAR *eventName, const TCHAR *line, 
+                                 const TCHAR *source, UINT32 facility, UINT32 severity,
+                                 int paramCount, TCHAR **params, UINT32 objectId, void *userArg)
 {
        char format[] = "ssssssssssssssssssssssssssssssss";
        TCHAR *plist[32];
@@ -452,7 +453,7 @@ static void SyslogParserCallback(DWORD eventCode, const TCHAR *eventName, const
 /**
  * Event name resolver
  */
-static bool EventNameResolver(const TCHAR *name, DWORD *code)
+static bool EventNameResolver(const TCHAR *name, UINT32 *code)
 {
        EVENT_TEMPLATE *event;
        bool success = false;