First version of event sender
authorVictor Kirhenshtein <victor@netxms.org>
Fri, 8 Oct 2004 15:37:42 +0000 (15:37 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Fri, 8 Oct 2004 15:37:42 +0000 (15:37 +0000)
include/nms_cscp.h
include/nxclapi.h
src/libnxcl/events.cpp
src/nxevent/nxevent.cpp
src/nxevent/nxevent.dsp
src/nxevent/nxevent.h

index ee42913..ed553d2 100644 (file)
@@ -394,6 +394,10 @@ typedef struct
 #define VID_MIB_HASH_BASE           ((DWORD)0x00007000)
 #define VID_MIB_HASH_LAST           ((DWORD)0x00007FFF)
 
+// Variable range for event argument list
+#define VID_EVENT_ARG_BASE          ((DWORD)0x00008000)
+#define VID_EVENT_ARG_LAST          ((DWORD)0x00008FFF)
+
 // Object information can contain variable number of parent and child objects' ids.
 // Because each variable in message have to have unique identifier,
 // we reserver a two range ids for this variables.
index a8773dc..c40487e 100644 (file)
@@ -847,6 +847,7 @@ DWORD LIBNXCL_EXPORTABLE NXCLoadEventNames(void);
 NXC_EVENT_NAME LIBNXCL_EXPORTABLE *NXCGetEventNamesList(DWORD *pdwNumEvents);
 const TCHAR LIBNXCL_EXPORTABLE *NXCGetEventName(DWORD dwId);
 int LIBNXCL_EXPORTABLE NXCGetEventSeverity(DWORD dwId);
+DWORD LIBNXCL_EXPORTABLE NXCSendEvent(DWORD dwEventCode, int iNumArgs, TCHAR **pArgList);
 
 DWORD LIBNXCL_EXPORTABLE NXCLoadUserDB(void);
 NXC_USER LIBNXCL_EXPORTABLE *NXCFindUserById(DWORD dwId);
index bb2696a..abf9142 100644 (file)
@@ -85,3 +85,27 @@ DWORD LIBNXCL_EXPORTABLE NXCSyncEvents(void)
 
    return dwRetCode;
 }
+
+
+//
+// Send event to server
+//
+
+DWORD LIBNXCL_EXPORTABLE NXCSendEvent(DWORD dwEventCode, int iNumArgs, TCHAR **pArgList)
+{
+   CSCPMessage msg;
+   DWORD dwRqId;
+   int i;
+
+   dwRqId = g_dwMsgId++;
+
+   msg.SetCode(CMD_TRAP);
+   msg.SetId(dwRqId);
+   msg.SetVariable(VID_EVENT_ID, dwEventCode);
+   msg.SetVariable(VID_NUM_ARGS, (WORD)iNumArgs);
+   for(i = 0; i < iNumArgs; i++)
+      msg.SetVariable(VID_EVENT_ARG_BASE + i, pArgList[i]);
+   SendMsg(&msg);
+
+   return WaitForRCC(dwRqId);
+}
index 2b08d9d..2c3539c 100644 (file)
 //
 
 static WORD m_wServerPort = 4701;
+static BOOL m_bDebug = FALSE;
+static TCHAR m_szServer[256] = _T("127.0.0.1");
+static TCHAR m_szLogin[256] = _T("guest");
+static TCHAR m_szPassword[256] = _T("");
+static DWORD m_dwEventCode = 0;
+
+
+//
+// Callback function for debug printing
+//
+
+static void DebugCallback(char *pMsg)
+{
+   printf("*debug* %s\n", pMsg);
+}
+
+
+//
+// Send event to server
+//
+
+static void SendEvent(int iNumArgs, TCHAR **pArgList)
+{
+   DWORD dwResult;
+
+   if (!NXCInitialize())
+   {
+      _tprintf(_T("Failed to initialize NetXMS client library\n"));
+   }
+   else
+   {
+      if (m_bDebug)
+         NXCSetDebugCallback(DebugCallback);
+
+      dwResult = NXCConnect(m_szServer, m_szLogin, m_szPassword);
+      if (dwResult != RCC_SUCCESS)
+      {
+         _tprintf(_T("Unable to connect to server: %s\n"), NXCGetErrorText(dwResult));
+      }
+      else
+      {
+         dwResult = NXCSendEvent(m_dwEventCode, iNumArgs, pArgList);
+         if (dwResult != RCC_SUCCESS)
+            _tprintf(_T("Unable to send event: %s\n"), NXCGetErrorText(dwResult));
+         NXCDisconnect();
+      }
+   }
+}
 
 
 //
@@ -42,19 +90,23 @@ int main(int argc, char *argv[])
 
    // Parse command line
    opterr = 1;
-   while((ch = getopt(argc, argv, "a:bi:hlnp:qs:vw:")) != -1)
+   while((ch = getopt(argc, argv, "dhp:w:")) != -1)
    {
       switch(ch)
       {
          case 'h':   // Display help and exit
             printf("Usage: nxevent [<options>] <server> <event_id> [<param_1> [... <param_N>]]\n"
                    "Valid options are:\n"
+                   "   -d           : Turn on debug mode.\n"
                    "   -h           : Display help and exit.\n"
                    "   -p <port>    : Specify server's port number. Default is %d.\n"
-                   "   -w <seconds> : Specify command timeout (default is 3 seconds)\n"
+                   "   -w <seconds> : Specify command timeout (default is 3 seconds).\n"
                    "\n", m_wServerPort);
             bStart = FALSE;
             break;
+         case 'd':
+            m_bDebug = TRUE;
+            break;
          case '?':
             bStart = FALSE;
             break;
@@ -66,6 +118,25 @@ int main(int argc, char *argv[])
    // Do requested action if everything is OK
    if (bStart)
    {
+      if (argc - optind < 2)
+      {
+         _tprintf(_T("Required arguments missing. Use nxevent -h for help.\n"));
+      }
+      else
+      {
+#ifdef _WIN32
+         WSADATA wsaData;
+
+         if (WSAStartup(2, &wsaData) != 0)
+         {
+            _tprintf(_T("Unable to initialize Windows sockets\n"));
+            return 4;
+         }
+#endif
+         strncpy(m_szServer, argv[optind], 256);
+         m_dwEventCode = _tcstoul(argv[optind + 1], NULL, 0);
+         SendEvent(argc - optind - 2, &argv[optind + 2]);
+      }
    }
 
    return 0;
index e6ff902..7ad6567 100644 (file)
@@ -49,8 +49,8 @@ BSC32=bscmake.exe
 # ADD BASE BSC32 /nologo
 # ADD BSC32 /nologo
 LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libnetxms.lib libnxcscp.lib libnxcl.lib /nologo /subsystem:console /machine:I386 /libpath:"..\libnetxms\Release" /libpath:"..\libnxcscp\Release" /libpath:"..\libnxcl\Release"
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libnetxms.lib libnxcscp.lib libnxcl.lib ws2_32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\libnetxms\Release" /libpath:"..\libnxcscp\Release" /libpath:"..\libnxcl\Release"
 # Begin Special Build Tool
 SOURCE="$(InputPath)"
 PostBuild_Desc=Copy files
@@ -70,16 +70,16 @@ PostBuild_Cmds=copy Release\nxevent.exe C:\NetXMS\bin
 # PROP Intermediate_Dir "Debug"
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ  /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ  /c
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
 # ADD BASE RSC /l 0x409 /d "_DEBUG"
 # ADD RSC /l 0x409 /d "_DEBUG"
 BSC32=bscmake.exe
 # ADD BASE BSC32 /nologo
 # ADD BSC32 /nologo
 LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libnetxms.lib libnxcscp.lib libnxcl.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\libnetxms\Debug" /libpath:"..\libnxcscp\Debug" /libpath:"..\libnxcl\Debug"
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libnetxms.lib libnxcscp.lib libnxcl.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\libnetxms\Debug" /libpath:"..\libnxcscp\Debug" /libpath:"..\libnxcl\Debug"
 # Begin Special Build Tool
 SOURCE="$(InputPath)"
 PostBuild_Desc=Copy files
index 4f72a86..8415421 100644 (file)
@@ -26,5 +26,6 @@
 
 #include <nms_common.h>
 #include <getopt.h>
+#include <nxclapi.h>
 
 #endif