Further non-Unicode fixes; LoraWAN subagent refactoring
[public/netxms.git] / include / nms_agent.h
CommitLineData
cc022855 1/*
7ac71e60 2** NetXMS - Network Management System
d02f6b92 3** Copyright (C) 2003-2013 Victor Kirhenshtein
cbcaf8c8
VK
4**
5** This program is free software; you can redistribute it and/or modify
68f384ea
VK
6** it under the terms of the GNU Lesser General Public License as published by
7** the Free Software Foundation; either version 3 of the License, or
cbcaf8c8
VK
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
68f384ea 15** You should have received a copy of the GNU Lesser General Public License
cbcaf8c8
VK
16** along with this program; if not, write to the Free Software
17** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18**
456d5d1c 19** File: nms_agent.h
cbcaf8c8
VK
20**
21**/
22
23#ifndef _nms_agent_h_
24#define _nms_agent_h_
25
359784de
VK
26#ifdef _WIN32
27#ifdef LIBNXAGENT_EXPORTS
28#define LIBNXAGENT_EXPORTABLE __declspec(dllexport)
29#else
30#define LIBNXAGENT_EXPORTABLE __declspec(dllimport)
31#endif
32#else /* _WIN32 */
33#define LIBNXAGENT_EXPORTABLE
34#endif
35
36
adc00755 37#include <nms_common.h>
64584976 38#include <nms_util.h>
e6c91aac 39#include <nxconfig.h>
bb48198e 40#include <nxdbapi.h>
b8b6cd2f 41#include <nxcpapi.h>
6827d635 42
acc04d96
VK
43/**
44 * Initialization function declaration macro
45 */
a0a945fb 46#if defined(_STATIC_AGENT) || defined(_NETWARE)
e6c91aac 47#define DECLARE_SUBAGENT_ENTRY_POINT(name) extern "C" BOOL NxSubAgentRegister_##name(NETXMS_SUBAGENT_INFO **ppInfo, Config *config)
a0a945fb 48#else
b5138dfb 49#ifdef _WIN32
a0a945fb 50#define DECLSPEC_EXPORT __declspec(dllexport) __cdecl
b5138dfb
VK
51#else
52#define DECLSPEC_EXPORT
53#endif
e6c91aac 54#define DECLARE_SUBAGENT_ENTRY_POINT(name) extern "C" BOOL DECLSPEC_EXPORT NxSubAgentRegister(NETXMS_SUBAGENT_INFO **ppInfo, Config *config)
b5138dfb
VK
55#endif
56
86c126f5
VK
57/**
58 * Constants
59 */
cbcaf8c8 60#define AGENT_LISTEN_PORT 4700
842378a4 61#define AGENT_TUNNEL_PORT 4703
deaa4491 62#define AGENT_PROTOCOL_VERSION 2
cbcaf8c8 63#define MAX_RESULT_LENGTH 256
e22f1644
VK
64#define MAX_CMD_LEN 256
65#define COMMAND_TIMEOUT 60
47e0446b 66#define MAX_SUBAGENT_NAME 64
86c126f5 67#define MAX_INSTANCE_COLUMNS 8
cbcaf8c8 68
d02f6b92
VK
69/**
70 * Agent policy types
71 */
6ca3b41c 72#define AGENT_POLICY_CONFIG 1
f47c176c 73#define AGENT_POLICY_LOG_PARSER 2
6ca3b41c 74
d02f6b92 75/**
169fa953
TD
76 * Agent log parser policy folder
77 */
78#define LOGPARSER_AP_FOLDER _T("logparser_ap")
b123ecb3 79#define CONFIG_AP_FOLDER _T("config_ap")
169fa953
TD
80
81/**
d02f6b92
VK
82 * Error codes
83 */
967893bb
VK
84#define ERR_SUCCESS ((UINT32)0)
85#define ERR_UNKNOWN_COMMAND ((UINT32)400)
86#define ERR_AUTH_REQUIRED ((UINT32)401)
87#define ERR_ACCESS_DENIED ((UINT32)403)
88#define ERR_UNKNOWN_PARAMETER ((UINT32)404)
89#define ERR_REQUEST_TIMEOUT ((UINT32)408)
90#define ERR_AUTH_FAILED ((UINT32)440)
91#define ERR_ALREADY_AUTHENTICATED ((UINT32)441)
92#define ERR_AUTH_NOT_REQUIRED ((UINT32)442)
93#define ERR_INTERNAL_ERROR ((UINT32)500)
94#define ERR_NOT_IMPLEMENTED ((UINT32)501)
95#define ERR_OUT_OF_RESOURCES ((UINT32)503)
96#define ERR_NOT_CONNECTED ((UINT32)900)
97#define ERR_CONNECTION_BROKEN ((UINT32)901)
98#define ERR_BAD_RESPONSE ((UINT32)902)
99#define ERR_IO_FAILURE ((UINT32)903)
100#define ERR_RESOURCE_BUSY ((UINT32)904)
101#define ERR_EXEC_FAILED ((UINT32)905)
102#define ERR_ENCRYPTION_REQUIRED ((UINT32)906)
103#define ERR_NO_CIPHERS ((UINT32)907)
104#define ERR_INVALID_PUBLIC_KEY ((UINT32)908)
105#define ERR_INVALID_SESSION_KEY ((UINT32)909)
106#define ERR_CONNECT_FAILED ((UINT32)910)
107#define ERR_MALFORMED_COMMAND ((UINT32)911)
108#define ERR_SOCKET_ERROR ((UINT32)912)
109#define ERR_BAD_ARGUMENTS ((UINT32)913)
110#define ERR_SUBAGENT_LOAD_FAILED ((UINT32)914)
111#define ERR_FILE_OPEN_ERROR ((UINT32)915)
112#define ERR_FILE_STAT_FAILED ((UINT32)916)
113#define ERR_MEM_ALLOC_FAILED ((UINT32)917)
114#define ERR_FILE_DELETE_FAILED ((UINT32)918)
9c786c0f 115#define ERR_NO_SESSION_AGENT ((UINT32)919)
87fff547 116#define ERR_SERVER_ID_UNSET ((UINT32)920)
82493366 117#define ERR_NO_SUCH_INSTANCE ((UINT32)921)
cce82c3a 118#define ERR_OUT_OF_STATE_REQUEST ((UINT32)922)
3b89a4c1 119#define ERR_ENCRYPTION_ERROR ((UINT32)923)
c2b7d357 120#define ERR_MALFORMED_RESPONSE ((UINT32)924)
ce9e00cc 121#define ERR_INVALID_OBJECT ((UINT32)925)
cbcaf8c8 122
d02f6b92 123/**
a1273b42
VK
124 * Bulk data reconciliation DCI processing status codes
125 */
126#define BULK_DATA_REC_RETRY 0
127#define BULK_DATA_REC_SUCCESS 1
128#define BULK_DATA_REC_FAILURE 2
129
130/**
f7319eac
VK
131 * Max bulk data block size
132 */
9cf1b53c 133#define MAX_BULK_DATA_BLOCK_SIZE 8192
f7319eac
VK
134
135/**
d02f6b92
VK
136 * Parameter handler return codes
137 */
82493366
VK
138#define SYSINFO_RC_SUCCESS 0
139#define SYSINFO_RC_UNSUPPORTED 1
140#define SYSINFO_RC_ERROR 2
141#define SYSINFO_RC_NO_SUCH_INSTANCE 3
cbcaf8c8 142
d02f6b92
VK
143/**
144 * WinPerf features
145 */
967893bb
VK
146#define WINPERF_AUTOMATIC_SAMPLE_COUNT ((UINT32)0x00000001)
147#define WINPERF_REMOTE_COUNTER_CONFIG ((UINT32)0x00000002)
cbcaf8c8 148
d02f6b92 149/**
74540dab
VK
150 * User session states (used by session agents)
151 */
152#define USER_SESSION_ACTIVE 0
153#define USER_SESSION_CONNECTED 1
154#define USER_SESSION_DISCONNECTED 2
155#define USER_SESSION_IDLE 3
156#define USER_SESSION_OTHER 4
157
158/**
d02f6b92
VK
159 * Descriptions for common parameters
160 */
bf3b7f79
VK
161#define DCIDESC_FS_AVAIL _T("Available space on file system {instance}")
162#define DCIDESC_FS_AVAILPERC _T("Percentage of available space on file system {instance}")
163#define DCIDESC_FS_FREE _T("Free space on file system {instance}")
164#define DCIDESC_FS_FREEPERC _T("Percentage of free space on file system {instance}")
165#define DCIDESC_FS_TOTAL _T("Total space on file system {instance}")
4a675f94 166#define DCIDESC_FS_TYPE _T("Type of file system {instance}")
bf3b7f79
VK
167#define DCIDESC_FS_USED _T("Used space on file system {instance}")
168#define DCIDESC_FS_USEDPERC _T("Percentage of used space on file system {instance}")
f86273c9
VK
169#define DCIDESC_LVM_LV_SIZE _T("Size of logical volume {instance}")
170#define DCIDESC_LVM_LV_STATUS _T("Status of logical volume {instance}")
171#define DCIDESC_LVM_PV_FREE _T("Free space on physical volume {instance}")
172#define DCIDESC_LVM_PV_FREEPERC _T("Percentage of free space on physical volume {instance}")
173#define DCIDESC_LVM_PV_RESYNC_PART _T("Number of resynchronizing partitions on physical volume {instance}")
174#define DCIDESC_LVM_PV_STALE_PART _T("Number of stale partitions on physical volume {instance}")
175#define DCIDESC_LVM_PV_STATUS _T("Status of physical volume {instance}")
176#define DCIDESC_LVM_PV_TOTAL _T("Total size of physical volume {instance}")
177#define DCIDESC_LVM_PV_USED _T("Used space on physical volume {instance}")
178#define DCIDESC_LVM_PV_USEDPERC _T("Percentage of used space on physical volume {instance}")
179#define DCIDESC_LVM_VG_FREE _T("Free space in volume group {instance}")
180#define DCIDESC_LVM_VG_FREEPERC _T("Percentage of free space in volume group {instance}")
181#define DCIDESC_LVM_VG_LVOL_TOTAL _T("Number of logical volumes in volume group {instance}")
182#define DCIDESC_LVM_VG_PVOL_ACTIVE _T("Number of active physical volumes in volume group {instance}")
183#define DCIDESC_LVM_VG_PVOL_TOTAL _T("Number of physical volumes in volume group {instance}")
184#define DCIDESC_LVM_VG_RESYNC_PART _T("Number of resynchronizing partitions in volume group {instance}")
185#define DCIDESC_LVM_VG_STALE_PART _T("Number of stale partitions in volume group {instance}")
186#define DCIDESC_LVM_VG_STATUS _T("Status of volume group {instance}")
187#define DCIDESC_LVM_VG_TOTAL _T("Total size of volume group {instance}")
188#define DCIDESC_LVM_VG_USED _T("Used space in volume group {instance}")
189#define DCIDESC_LVM_VG_USEDPERC _T("Percentage of used space in volume group {instance}")
11b75b2e 190#define DCIDESC_NET_INTERFACE_64BITCOUNTERS _T("Is 64bit interface counters supported")
bf3b7f79
VK
191#define DCIDESC_NET_INTERFACE_ADMINSTATUS _T("Administrative status of interface {instance}")
192#define DCIDESC_NET_INTERFACE_BYTESIN _T("Number of input bytes on interface {instance}")
193#define DCIDESC_NET_INTERFACE_BYTESOUT _T("Number of output bytes on interface {instance}")
194#define DCIDESC_NET_INTERFACE_DESCRIPTION _T("Description of interface {instance}")
195#define DCIDESC_NET_INTERFACE_INERRORS _T("Number of input errors on interface {instance}")
196#define DCIDESC_NET_INTERFACE_LINK _T("Link status for interface {instance}")
197#define DCIDESC_NET_INTERFACE_MTU _T("MTU for interface {instance}")
198#define DCIDESC_NET_INTERFACE_OPERSTATUS _T("Operational status of interface {instance}")
199#define DCIDESC_NET_INTERFACE_OUTERRORS _T("Number of output errors on interface {instance}")
200#define DCIDESC_NET_INTERFACE_PACKETSIN _T("Number of input packets on interface {instance}")
201#define DCIDESC_NET_INTERFACE_PACKETSOUT _T("Number of output packets on interface {instance}")
202#define DCIDESC_NET_INTERFACE_SPEED _T("Speed of interface {instance}")
203#define DCIDESC_NET_IP_FORWARDING _T("IP forwarding status")
204#define DCIDESC_NET_IP6_FORWARDING _T("IPv6 forwarding status")
ecdf8898
VK
205#define DCIDESC_NET_RESOLVER_ADDRBYNAME _T("Resolver: address for name {instance}")
206#define DCIDESC_NET_RESOLVER_NAMEBYADDR _T("Resolver: name for address {instance}")
bf3b7f79
VK
207#define DCIDESC_PHYSICALDISK_FIRMWARE _T("Firmware version of hard disk {instance}")
208#define DCIDESC_PHYSICALDISK_MODEL _T("Model of hard disk {instance}")
209#define DCIDESC_PHYSICALDISK_SERIALNUMBER _T("Serial number of hard disk {instance}")
210#define DCIDESC_PHYSICALDISK_SMARTATTR _T("")
211#define DCIDESC_PHYSICALDISK_SMARTSTATUS _T("Status of hard disk {instance} reported by SMART")
212#define DCIDESC_PHYSICALDISK_TEMPERATURE _T("Temperature of hard disk {instance}")
41580924
VK
213#define DCIDESC_SYSTEM_CPU_CACHE_SIZE _T("CPU {instance}: cache size (KB)")
214#define DCIDESC_SYSTEM_CPU_CORE_ID _T("CPU {instance}: core ID")
bf3b7f79 215#define DCIDESC_SYSTEM_CPU_COUNT _T("Number of CPU in the system")
41580924
VK
216#define DCIDESC_SYSTEM_CPU_FREQUENCY _T("CPU {instance}: frequency")
217#define DCIDESC_SYSTEM_CPU_MODEL _T("CPU {instance}: model")
218#define DCIDESC_SYSTEM_CPU_PHYSICAL_ID _T("CPU {instance}: physical ID")
bf3b7f79 219#define DCIDESC_SYSTEM_HOSTNAME _T("Host name")
1217cb75 220#define DCIDESC_SYSTEM_IS_VIRTUAL _T("Virtual system indicator")
5741ae09
VK
221#define DCIDESC_SYSTEM_MEMORY_PHYSICAL_AVAILABLE _T("Available physical memory")
222#define DCIDESC_SYSTEM_MEMORY_PHYSICAL_AVAILABLE_PCT _T("Percentage of available physical memory")
223#define DCIDESC_SYSTEM_MEMORY_PHYSICAL_BUFFERS _T("Physical memory used for buffers")
224#define DCIDESC_SYSTEM_MEMORY_PHYSICAL_BUFFERS_PCT _T("Percentage of physical memory used for buffers")
225#define DCIDESC_SYSTEM_MEMORY_PHYSICAL_CACHED _T("Physical memory used for cache")
226#define DCIDESC_SYSTEM_MEMORY_PHYSICAL_CACHED_PCT _T("Percentage of physical memory used for cache")
bf3b7f79
VK
227#define DCIDESC_SYSTEM_MEMORY_PHYSICAL_FREE _T("Free physical memory")
228#define DCIDESC_SYSTEM_MEMORY_PHYSICAL_FREE_PCT _T("Percentage of free physical memory")
229#define DCIDESC_SYSTEM_MEMORY_PHYSICAL_TOTAL _T("Total amount of physical memory")
230#define DCIDESC_SYSTEM_MEMORY_PHYSICAL_USED _T("Used physical memory")
231#define DCIDESC_SYSTEM_MEMORY_PHYSICAL_USED_PCT _T("Percentage of used physical memory")
03a48429
VK
232#define DCIDESC_SYSTEM_MEMORY_VIRTUAL_ACTIVE _T("Active virtual memory")
233#define DCIDESC_SYSTEM_MEMORY_VIRTUAL_ACTIVE_PCT _T("Percentage of active virtual memory")
bf3b7f79
VK
234#define DCIDESC_SYSTEM_MEMORY_VIRTUAL_FREE _T("Free virtual memory")
235#define DCIDESC_SYSTEM_MEMORY_VIRTUAL_FREE_PCT _T("Percentage of free virtual memory")
236#define DCIDESC_SYSTEM_MEMORY_VIRTUAL_TOTAL _T("Total amount of virtual memory")
237#define DCIDESC_SYSTEM_MEMORY_VIRTUAL_USED _T("Used virtual memory")
238#define DCIDESC_SYSTEM_MEMORY_VIRTUAL_USED_PCT _T("Percentage of used virtual memory")
239#define DCIDESC_SYSTEM_MEMORY_VIRTUAL_AVAILABLE _T("Available virtual memory")
240#define DCIDESC_SYSTEM_MEMORY_VIRTUAL_AVAILABLE_PCT _T("Percentage of available virtual memory")
241#define DCIDESC_SYSTEM_MEMORY_SWAP_FREE _T("Free swap space")
242#define DCIDESC_SYSTEM_MEMORY_SWAP_FREE_PCT _T("Percentage of free swap space")
243#define DCIDESC_SYSTEM_MEMORY_SWAP_TOTAL _T("Total amount of swap space")
244#define DCIDESC_SYSTEM_MEMORY_SWAP_USED _T("Used swap space")
245#define DCIDESC_SYSTEM_MEMORY_SWAP_USED_PCT _T("Percentage of used swap space")
cd30e53b
VK
246#define DCIDESC_SYSTEM_MSGQUEUE_BYTES _T("Message queue {instance}: bytes in queue")
247#define DCIDESC_SYSTEM_MSGQUEUE_BYTES_MAX _T("Message queue {instance}: maximum allowed bytes in queue")
248#define DCIDESC_SYSTEM_MSGQUEUE_CHANGE_TIME _T("Message queue {instance}: last change time")
249#define DCIDESC_SYSTEM_MSGQUEUE_MESSAGES _T("Message queue {instance}: number of messages")
250#define DCIDESC_SYSTEM_MSGQUEUE_RECV_TIME _T("Message queue {instance}: last receive time")
251#define DCIDESC_SYSTEM_MSGQUEUE_SEND_TIME _T("Message queue {instance}: last send time")
bf3b7f79
VK
252#define DCIDESC_SYSTEM_UNAME _T("System uname")
253#define DCIDESC_AGENT_ACCEPTEDCONNECTIONS _T("Number of connections accepted by agent")
254#define DCIDESC_AGENT_ACCEPTERRORS _T("Number of accept() call errors")
255#define DCIDESC_AGENT_ACTIVECONNECTIONS _T("Number of active connections to agent")
256#define DCIDESC_AGENT_AUTHENTICATIONFAILURES _T("Number of authentication failures")
257#define DCIDESC_AGENT_CONFIG_SERVER _T("Configuration server address set on agent startup")
df26f039 258#define DCIDESC_AGENT_DATACOLLQUEUESIZE _T("Agent data collector queue size")
bf3b7f79
VK
259#define DCIDESC_AGENT_FAILEDREQUESTS _T("Number of failed requests to agent")
260#define DCIDESC_AGENT_GENERATED_TRAPS _T("Number of traps generated by agent")
ec4679d1
VK
261#define DCIDESC_AGENT_IS_EXT_SUBAGENT_CONNECTED _T("Check if external subagent {instance} is connected")
262#define DCIDESC_AGENT_IS_SUBAGENT_LOADED _T("Check if subagent {instance} is loaded")
bf3b7f79 263#define DCIDESC_AGENT_LAST_TRAP_TIME _T("Timestamp of last generated trap")
7b30e5ae
VK
264#define DCIDESC_AGENT_LOCALDB_FAILED_QUERIES _T("Agent local database: failed queries")
265#define DCIDESC_AGENT_LOCALDB_SLOW_QUERIES _T("Agent local database: long running queries")
266#define DCIDESC_AGENT_LOCALDB_STATUS _T("Agent local database: status")
267#define DCIDESC_AGENT_LOCALDB_TOTAL_QUERIES _T("Agent local database: total queries executed")
268#define DCIDESC_AGENT_LOG_STATUS _T("Agent log status")
bf3b7f79 269#define DCIDESC_AGENT_PROCESSEDREQUESTS _T("Number of requests processed by agent")
e1d760ac
VK
270#define DCIDESC_AGENT_PROXY_ACTIVESESSIONS _T("Number of active proxy sessions")
271#define DCIDESC_AGENT_PROXY_CONNECTIONREQUESTS _T("Number of proxy connection requests")
272#define DCIDESC_AGENT_PROXY_ISENABLED _T("Check if agent proxy is enabled")
bf3b7f79
VK
273#define DCIDESC_AGENT_REGISTRAR _T("Registrar server address set on agent startup")
274#define DCIDESC_AGENT_REJECTEDCONNECTIONS _T("Number of connections rejected by agent")
275#define DCIDESC_AGENT_SENT_TRAPS _T("Number of traps successfully sent to server")
786773f7
VK
276#define DCIDESC_AGENT_SNMP_ISPROXYENABLED _T("Check if SNMP proxy is enabled")
277#define DCIDESC_AGENT_SNMP_REQUESTS _T("Number of SNMP requests sent")
278#define DCIDESC_AGENT_SNMP_RESPONSES _T("Number of SNMP responses received")
279#define DCIDESC_AGENT_SNMP_SERVERREQUESTS _T("Number of SNMP proxy requests received from server")
05db3127 280#define DCIDESC_AGENT_SOURCEPACKAGESUPPORT _T("Check if source packages are supported")
bf3b7f79 281#define DCIDESC_AGENT_SUPPORTEDCIPHERS _T("List of ciphers supported by agent")
786773f7
VK
282#define DCIDESC_AGENT_SYSLOGPROXY_ISENABLED _T("Check if syslog proxy is enabled")
283#define DCIDESC_AGENT_SYSLOGPROXY_RECEIVEDMSGS _T("Number of syslog messages received by agent")
284#define DCIDESC_AGENT_SYSLOGPROXY_QUEUESIZE _T("Agent syslog proxy queue size")
374afd7b
VK
285#define DCIDESC_AGENT_THREADPOOL_ACTIVEREQUESTS _T("Agent thread pool {instance}: active requests")
286#define DCIDESC_AGENT_THREADPOOL_CURRSIZE _T("Agent thread pool {instance}: current size")
287#define DCIDESC_AGENT_THREADPOOL_LOAD _T("Agent thread pool {instance}: current load")
288#define DCIDESC_AGENT_THREADPOOL_LOADAVG _T("Agent thread pool {instance}: load average (1 minute)")
289#define DCIDESC_AGENT_THREADPOOL_LOADAVG_5 _T("Agent thread pool {instance}: load average (5 minutes)")
290#define DCIDESC_AGENT_THREADPOOL_LOADAVG_15 _T("Agent thread pool {instance}: load average (15 minutes)")
291#define DCIDESC_AGENT_THREADPOOL_MAXSIZE _T("Agent thread pool {instance}: max size")
292#define DCIDESC_AGENT_THREADPOOL_MINSIZE _T("Agent thread pool {instance}: min size")
293#define DCIDESC_AGENT_THREADPOOL_USAGE _T("Agent thread pool {instance}: usage")
bf3b7f79
VK
294#define DCIDESC_AGENT_TIMEDOUTREQUESTS _T("Number of timed out requests to agent")
295#define DCIDESC_AGENT_UNSUPPORTEDREQUESTS _T("Number of requests for unsupported parameters")
296#define DCIDESC_AGENT_UPTIME _T("Agent's uptime")
297#define DCIDESC_AGENT_VERSION _T("Agent's version")
298#define DCIDESC_FILE_COUNT _T("Number of files {instance}")
5ad4ed06 299#define DCIDESC_FILE_FOLDERCOUNT _T("Number of folders {instance}")
bf3b7f79
VK
300#define DCIDESC_FILE_HASH_CRC32 _T("CRC32 checksum of {instance}")
301#define DCIDESC_FILE_HASH_MD5 _T("MD5 hash of {instance}")
302#define DCIDESC_FILE_HASH_SHA1 _T("SHA1 hash of {instance}")
303#define DCIDESC_FILE_SIZE _T("Size of file {instance}")
304#define DCIDESC_FILE_TIME_ACCESS _T("Time of last access to file {instance}")
305#define DCIDESC_FILE_TIME_CHANGE _T("Time of last status change of file {instance}")
306#define DCIDESC_FILE_TIME_MODIFY _T("Time of last modification of file {instance}")
8ce7501b 307#define DCIDESC_SYSTEM_CURRENTTIME _T("Current system time")
bf3b7f79
VK
308#define DCIDESC_SYSTEM_PLATFORMNAME _T("Platform name")
309#define DCIDESC_PROCESS_COUNT _T("Number of {instance} processes")
310#define DCIDESC_PROCESS_COUNTEX _T("Number of {instance} processes (extended)")
311#define DCIDESC_PROCESS_CPUTIME _T("Total execution time for process {instance}")
312#define DCIDESC_PROCESS_GDIOBJ _T("GDI objects used by process {instance}")
92b25da9 313#define DCIDESC_PROCESS_HANDLES _T("Number of handles in process {instance}")
bf3b7f79
VK
314#define DCIDESC_PROCESS_IO_OTHERB _T("")
315#define DCIDESC_PROCESS_IO_OTHEROP _T("")
316#define DCIDESC_PROCESS_IO_READB _T("")
317#define DCIDESC_PROCESS_IO_READOP _T("")
318#define DCIDESC_PROCESS_IO_WRITEB _T("")
319#define DCIDESC_PROCESS_IO_WRITEOP _T("")
320#define DCIDESC_PROCESS_KERNELTIME _T("Total execution time in kernel mode for process {instance}")
321#define DCIDESC_PROCESS_PAGEFAULTS _T("Page faults for process {instance}")
322#define DCIDESC_PROCESS_SYSCALLS _T("Number of system calls made by process {instance}")
323#define DCIDESC_PROCESS_THREADS _T("Number of threads in process {instance}")
324#define DCIDESC_PROCESS_USEROBJ _T("USER objects used by process {instance}")
325#define DCIDESC_PROCESS_USERTIME _T("Total execution time in user mode for process {instance}")
326#define DCIDESC_PROCESS_VMSIZE _T("Virtual memory used by process {instance}")
327#define DCIDESC_PROCESS_WKSET _T("Physical memory used by process {instance}")
92b25da9 328#define DCIDESC_PROCESS_ZOMBIE_COUNT _T("Number of {instance} zombie processes")
bf3b7f79
VK
329#define DCIDESC_SYSTEM_APPADDRESSSPACE _T("Address space available to applications (MB)")
330#define DCIDESC_SYSTEM_CONNECTEDUSERS _T("Number of logged in users")
92b25da9 331#define DCIDESC_SYSTEM_HANDLECOUNT _T("Total number of handles")
bf3b7f79
VK
332#define DCIDESC_SYSTEM_PROCESSCOUNT _T("Total number of processes")
333#define DCIDESC_SYSTEM_SERVICESTATE _T("State of {instance} service")
bf3b7f79
VK
334#define DCIDESC_SYSTEM_THREADCOUNT _T("Total number of threads")
335#define DCIDESC_PDH_COUNTERVALUE _T("Value of PDH counter {instance}")
336#define DCIDESC_PDH_VERSION _T("Version of PDH.DLL")
337#define DCIDESC_SYSTEM_UPTIME _T("System uptime")
8c6b83ac 338
bf3b7f79
VK
339#define DCIDESC_SYSTEM_CPU_LOADAVG _T("Average CPU load for last minute")
340#define DCIDESC_SYSTEM_CPU_LOADAVG5 _T("Average CPU load for last 5 minutes")
341#define DCIDESC_SYSTEM_CPU_LOADAVG15 _T("Average CPU load for last 15 minutes")
8c6b83ac
VK
342
343#define DCIDESC_SYSTEM_CPU_INTERRUPTS _T("CPU interrupt count")
344#define DCIDESC_SYSTEM_CPU_INTERRUPTS_EX _T("CPU {instance} interrupt count")
345#define DCIDESC_SYSTEM_CPU_CONTEXT_SWITCHES _T("CPU context switch count")
bf3b7f79 346
bf3b7f79
VK
347#define DCIDESC_SYSTEM_CPU_USAGE_EX _T("Average CPU {instance} utilization for last minute")
348#define DCIDESC_SYSTEM_CPU_USAGE5_EX _T("Average CPU {instance} utilization for last 5 minutes")
349#define DCIDESC_SYSTEM_CPU_USAGE15_EX _T("Average CPU {instance} utilization for last 15 minutes")
350#define DCIDESC_SYSTEM_CPU_USAGE _T("Average CPU utilization for last minute")
351#define DCIDESC_SYSTEM_CPU_USAGE5 _T("Average CPU utilization for last 5 minutes")
352#define DCIDESC_SYSTEM_CPU_USAGE15 _T("Average CPU utilization for last 15 minutes")
efc43892 353#define DCIDESC_SYSTEM_CPU_USAGECURR _T("Current CPU utilization")
6cbf26de 354#define DCIDESC_SYSTEM_CPU_USAGECURR_EX _T("Current CPU {instance} utilization")
bf3b7f79
VK
355
356#define DCIDESC_SYSTEM_CPU_USAGE_USER_EX _T("Average CPU {instance} utilization (user) for last minute")
357#define DCIDESC_SYSTEM_CPU_USAGE5_USER_EX _T("Average CPU {instance} utilization (user) for last 5 minutes")
358#define DCIDESC_SYSTEM_CPU_USAGE15_USER_EX _T("Average CPU {instance} utilization (user) for last 15 minutes")
359#define DCIDESC_SYSTEM_CPU_USAGE_USER _T("Average CPU utilization (user) for last minute")
360#define DCIDESC_SYSTEM_CPU_USAGE5_USER _T("Average CPU utilization (user) for last 5 minutes")
361#define DCIDESC_SYSTEM_CPU_USAGE15_USER _T("Average CPU utilization (user) for last 15 minutes")
6cbf26de
VK
362#define DCIDESC_SYSTEM_CPU_USAGECURR_USER _T("Current CPU utilization (user)")
363#define DCIDESC_SYSTEM_CPU_USAGECURR_USER_EX _T("Current CPU {instance} utilization (user)")
bf3b7f79
VK
364
365#define DCIDESC_SYSTEM_CPU_USAGE_NICE_EX _T("Average CPU {instance} utilization (nice) for last minute")
366#define DCIDESC_SYSTEM_CPU_USAGE5_NICE_EX _T("Average CPU {instance} utilization (nice) for last 5 minutes")
367#define DCIDESC_SYSTEM_CPU_USAGE15_NICE_EX _T("Average CPU {instance} utilization (nice) for last 15 minutes")
368#define DCIDESC_SYSTEM_CPU_USAGE_NICE _T("Average CPU utilization (nice) for last minute")
369#define DCIDESC_SYSTEM_CPU_USAGE5_NICE _T("Average CPU utilization (nice) for last 5 minutes")
370#define DCIDESC_SYSTEM_CPU_USAGE15_NICE _T("Average CPU utilization (nice) for last 15 minutes")
6cbf26de
VK
371#define DCIDESC_SYSTEM_CPU_USAGECURR_NICE _T("Current CPU utilization (nice)")
372#define DCIDESC_SYSTEM_CPU_USAGECURR_NICE_EX _T("Current CPU {instance} utilization (nice)")
bf3b7f79
VK
373
374#define DCIDESC_SYSTEM_CPU_USAGE_SYSTEM_EX _T("Average CPU {instance} utilization (system) for last minute")
375#define DCIDESC_SYSTEM_CPU_USAGE5_SYSTEM_EX _T("Average CPU {instance} utilization (system) for last 5 minutes")
376#define DCIDESC_SYSTEM_CPU_USAGE15_SYSTEM_EX _T("Average CPU {instance} utilization (system) for last 15 minutes")
377#define DCIDESC_SYSTEM_CPU_USAGE_SYSTEM _T("Average CPU utilization (system) for last minute")
378#define DCIDESC_SYSTEM_CPU_USAGE5_SYSTEM _T("Average CPU utilization (system) for last 5 minutes")
379#define DCIDESC_SYSTEM_CPU_USAGE15_SYSTEM _T("Average CPU utilization (system) for last 15 minutes")
6cbf26de
VK
380#define DCIDESC_SYSTEM_CPU_USAGECURR_SYSTEM _T("Current CPU utilization (system)")
381#define DCIDESC_SYSTEM_CPU_USAGECURR_SYSTEM_EX _T("Current CPU {instance} utilization (system)")
bf3b7f79 382
6cbf26de
VK
383#define DCIDESC_SYSTEM_CPU_USAGE_IDLE_EX _T("Average CPU {instance} utilization (idle) for last minute")
384#define DCIDESC_SYSTEM_CPU_USAGE5_IDLE_EX _T("Average CPU {instance} utilization (idle) for last 5 minutes")
385#define DCIDESC_SYSTEM_CPU_USAGE15_IDLE_EX _T("Average CPU {instance} utilization (idle) for last 15 minutes")
386#define DCIDESC_SYSTEM_CPU_USAGE_IDLE _T("Average CPU utilization (idle) for last minute")
387#define DCIDESC_SYSTEM_CPU_USAGE5_IDLE _T("Average CPU utilization (idle) for last 5 minutes")
388#define DCIDESC_SYSTEM_CPU_USAGE15_IDLE _T("Average CPU utilization (idle) for last 15 minutes")
389#define DCIDESC_SYSTEM_CPU_USAGECURR_IDLE _T("Current CPU utilization (idle)")
390#define DCIDESC_SYSTEM_CPU_USAGECURR_IDLE_EX _T("Current CPU {instance} utilization (idle)")
bf3b7f79 391
6cbf26de
VK
392#define DCIDESC_SYSTEM_CPU_USAGE_IOWAIT_EX _T("Average CPU {instance} utilization (iowait) for last minute")
393#define DCIDESC_SYSTEM_CPU_USAGE5_IOWAIT_EX _T("Average CPU {instance} utilization (iowait) for last 5 minutes")
394#define DCIDESC_SYSTEM_CPU_USAGE15_IOWAIT_EX _T("Average CPU {instance} utilization (iowait) for last 15 minutes")
395#define DCIDESC_SYSTEM_CPU_USAGE_IOWAIT _T("Average CPU utilization (iowait) for last minute")
396#define DCIDESC_SYSTEM_CPU_USAGE5_IOWAIT _T("Average CPU utilization (iowait) for last 5 minutes")
397#define DCIDESC_SYSTEM_CPU_USAGE15_IOWAIT _T("Average CPU utilization (iowait) for last 15 minutes")
398#define DCIDESC_SYSTEM_CPU_USAGECURR_IOWAIT _T("Current CPU utilization (iowait)")
399#define DCIDESC_SYSTEM_CPU_USAGECURR_IOWAIT_EX _T("Current CPU {instance} utilization (iowait)")
bf3b7f79 400
6cbf26de
VK
401#define DCIDESC_SYSTEM_CPU_USAGE_IRQ_EX _T("Average CPU {instance} utilization (irq) for last minute")
402#define DCIDESC_SYSTEM_CPU_USAGE5_IRQ_EX _T("Average CPU {instance} utilization (irq) for last 5 minutes")
403#define DCIDESC_SYSTEM_CPU_USAGE15_IRQ_EX _T("Average CPU {instance} utilization (irq) for last 15 minutes")
404#define DCIDESC_SYSTEM_CPU_USAGE_IRQ _T("Average CPU utilization (irq) for last minute")
405#define DCIDESC_SYSTEM_CPU_USAGE5_IRQ _T("Average CPU utilization (irq) for last 5 minutes")
406#define DCIDESC_SYSTEM_CPU_USAGE15_IRQ _T("Average CPU utilization (irq) for last 15 minutes")
407#define DCIDESC_SYSTEM_CPU_USAGECURR_IRQ _T("Current CPU utilization (irq)")
408#define DCIDESC_SYSTEM_CPU_USAGECURR_IRQ_EX _T("Current CPU {instance} utilization (irq)")
bf3b7f79 409
6cbf26de
VK
410#define DCIDESC_SYSTEM_CPU_USAGE_SOFTIRQ_EX _T("Average CPU {instance} utilization (softirq) for last minute")
411#define DCIDESC_SYSTEM_CPU_USAGE5_SOFTIRQ_EX _T("Average CPU {instance} utilization (softirq) for last 5 minutes")
412#define DCIDESC_SYSTEM_CPU_USAGE15_SOFTIRQ_EX _T("Average CPU {instance} utilization (softirq) for last 15 minutes")
413#define DCIDESC_SYSTEM_CPU_USAGE_SOFTIRQ _T("Average CPU utilization (softirq) for last minute")
414#define DCIDESC_SYSTEM_CPU_USAGE5_SOFTIRQ _T("Average CPU utilization (softirq) for last 5 minutes")
415#define DCIDESC_SYSTEM_CPU_USAGE15_SOFTIRQ _T("Average CPU utilization (softirq) for last 15 minutes")
416#define DCIDESC_SYSTEM_CPU_USAGECURR_SOFTIRQ _T("Current CPU utilization (softirq)")
417#define DCIDESC_SYSTEM_CPU_USAGECURR_SOFTIRQ_EX _T("Current CPU {instance} utilization (softirq)")
bf3b7f79
VK
418
419#define DCIDESC_SYSTEM_CPU_USAGE_STEAL_EX _T("Average CPU {instance} utilization (steal) for last minute")
420#define DCIDESC_SYSTEM_CPU_USAGE5_STEAL_EX _T("Average CPU {instance} utilization (steal) for last 5 minutes")
421#define DCIDESC_SYSTEM_CPU_USAGE15_STEAL_EX _T("Average CPU {instance} utilization (steal) for last 15 minutes")
422#define DCIDESC_SYSTEM_CPU_USAGE_STEAL _T("Average CPU utilization (steal) for last minute")
423#define DCIDESC_SYSTEM_CPU_USAGE5_STEAL _T("Average CPU utilization (steal) for last 5 minutes")
424#define DCIDESC_SYSTEM_CPU_USAGE15_STEAL _T("Average CPU utilization (steal) for last 15 minutes")
6cbf26de
VK
425#define DCIDESC_SYSTEM_CPU_USAGECURR_STEAL _T("Current CPU utilization (steal)")
426#define DCIDESC_SYSTEM_CPU_USAGECURR_STEAL_EX _T("Current CPU {instance} utilization (steal)")
bf3b7f79
VK
427
428#define DCIDESC_SYSTEM_CPU_USAGE_GUEST_EX _T("Average CPU {instance} utilization (guest) for last minute")
429#define DCIDESC_SYSTEM_CPU_USAGE5_GUEST_EX _T("Average CPU {instance} utilization (guest) for last 5 minutes")
430#define DCIDESC_SYSTEM_CPU_USAGE15_GUEST_EX _T("Average CPU {instance} utilization (guest) for last 15 minutes")
431#define DCIDESC_SYSTEM_CPU_USAGE_GUEST _T("Average CPU utilization (guest) for last minute")
432#define DCIDESC_SYSTEM_CPU_USAGE5_GUEST _T("Average CPU utilization (guest) for last 5 minutes")
433#define DCIDESC_SYSTEM_CPU_USAGE15_GUEST _T("Average CPU utilization (guest) for last 15 minutes")
6cbf26de
VK
434#define DCIDESC_SYSTEM_CPU_USAGECURR_GUEST _T("Current CPU utilization (guest)")
435#define DCIDESC_SYSTEM_CPU_USAGECURR_GUEST_EX _T("Current CPU {instance} utilization (guest)")
bf3b7f79
VK
436
437#define DCIDESC_SYSTEM_IO_DISKQUEUE _T("Average disk queue length for last minute")
3e00a175
VK
438#define DCIDESC_SYSTEM_IO_DISKQUEUE_MIN _T("Minimum disk queue length for last minute")
439#define DCIDESC_SYSTEM_IO_DISKQUEUE_MAX _T("Maximum disk queue length for last minute")
bf3b7f79 440#define DCIDESC_SYSTEM_IO_DISKQUEUE_EX _T("Average disk queue length of device {instance} for last minute")
3e00a175
VK
441#define DCIDESC_SYSTEM_IO_DISKQUEUE_EX_MIN _T("Minimum disk queue length of device {instance} for last minute")
442#define DCIDESC_SYSTEM_IO_DISKQUEUE_EX_MAX _T("Maximum disk queue length of device {instance} for last minute")
bf3b7f79
VK
443#define DCIDESC_SYSTEM_IO_DISKTIME _T("Percent of CPU time spent on I/O for last minute")
444#define DCIDESC_SYSTEM_IO_DISKTIME_EX _T("Percent of CPU time spent on I/O on device {instance} for last minute")
445#define DCIDESC_SYSTEM_IO_WAITTIME _T("Average I/O request wait time")
446#define DCIDESC_SYSTEM_IO_WAITTIME_EX _T("Average I/O request wait time for device {instance}")
447#define DCIDESC_SYSTEM_IO_READS _T("Average number of read operations for last minute")
3e00a175
VK
448#define DCIDESC_SYSTEM_IO_READS_MIN _T("Minimum number of read operations for last minute")
449#define DCIDESC_SYSTEM_IO_READS_MAX _T("Maximum number of read operations for last minute")
bf3b7f79 450#define DCIDESC_SYSTEM_IO_READS_EX _T("Average number of read operations on device {instance} for last minute")
3e00a175
VK
451#define DCIDESC_SYSTEM_IO_READS_EX_MIN _T("Minimum number of read operations on device {instance} for last minute")
452#define DCIDESC_SYSTEM_IO_READS_EX_MAX _T("Maximum number of read operations on device {instance} for last minute")
bf3b7f79 453#define DCIDESC_SYSTEM_IO_WRITES _T("Average number of write operations for last minute")
3e00a175
VK
454#define DCIDESC_SYSTEM_IO_WRITES_MIN _T("Minimum number of write operations for last minute")
455#define DCIDESC_SYSTEM_IO_WRITES_MAX _T("Maximum number of write operations for last minute")
bf3b7f79 456#define DCIDESC_SYSTEM_IO_WRITES_EX _T("Average number of write operations on device {instance} for last minute")
3e00a175
VK
457#define DCIDESC_SYSTEM_IO_WRITES_EX_MIN _T("Minimum number of write operations on device {instance} for last minute")
458#define DCIDESC_SYSTEM_IO_WRITES_EX_MAX _T("Maximum number of write operations on device {instance} for last minute")
bf3b7f79 459#define DCIDESC_SYSTEM_IO_XFERS _T("Average number of I/O transfers for last minute")
3e00a175
VK
460#define DCIDESC_SYSTEM_IO_XFERS_MIN _T("Minimum number of I/O transfers for last minute")
461#define DCIDESC_SYSTEM_IO_XFERS_MAX _T("Maximum number of I/O transfers for last minute")
bf3b7f79 462#define DCIDESC_SYSTEM_IO_XFERS_EX _T("Average number of I/O transfers on device {instance} for last minute")
3e00a175
VK
463#define DCIDESC_SYSTEM_IO_XFERS_EX_MIN _T("Minimum number of I/O transfers on device {instance} for last minute")
464#define DCIDESC_SYSTEM_IO_XFERS_EX_MAX _T("Maximum number of I/O transfers on device {instance} for last minute")
bf3b7f79 465#define DCIDESC_SYSTEM_IO_BYTEREADS _T("Average number of bytes read for last minute")
3e00a175
VK
466#define DCIDESC_SYSTEM_IO_BYTEREADS_MIN _T("Minimum number of bytes read for last minute")
467#define DCIDESC_SYSTEM_IO_BYTEREADS_MAX _T("Maximum number of bytes read for last minute")
bf3b7f79 468#define DCIDESC_SYSTEM_IO_BYTEREADS_EX _T("Average number of bytes read on device {instance} for last minute")
3e00a175
VK
469#define DCIDESC_SYSTEM_IO_BYTEREADS_EX_MIN _T("Minimum number of bytes read on device {instance} for last minute")
470#define DCIDESC_SYSTEM_IO_BYTEREADS_EX_MAX _T("Maximum number of bytes read on device {instance} for last minute")
bf3b7f79 471#define DCIDESC_SYSTEM_IO_BYTEWRITES _T("Average number of bytes written for last minute")
3e00a175
VK
472#define DCIDESC_SYSTEM_IO_BYTEWRITES_MIN _T("Minimum number of bytes written for last minute")
473#define DCIDESC_SYSTEM_IO_BYTEWRITES_MAX _T("Maximum number of bytes written for last minute")
bf3b7f79 474#define DCIDESC_SYSTEM_IO_BYTEWRITES_EX _T("Average number of bytes written on device {instance} for last minute")
3e00a175
VK
475#define DCIDESC_SYSTEM_IO_BYTEWRITES_EX_MIN _T("Minimum number of bytes written on device {instance} for last minute")
476#define DCIDESC_SYSTEM_IO_BYTEWRITES_EX_MAX _T("Maximum number of bytes written on device {instance} for last minute")
bf3b7f79
VK
477#define DCIDESC_SYSTEM_IO_OPENFILES _T("Number of open files")
478
479
480#define DCIDESC_DEPRECATED _T("<deprecated>")
30c68fa1
AK
481
482
74540dab 483#define DCTDESC_AGENT_SESSION_AGENTS _T("Registered session agents")
ad12a86f 484#define DCTDESC_AGENT_SUBAGENTS _T("Loaded subagents")
a8799146 485#define DCTDESC_FILESYSTEM_VOLUMES _T("File system volumes")
f86273c9
VK
486#define DCTDESC_LVM_VOLUME_GROUPS _T("LVM volume groups")
487#define DCTDESC_LVM_LOGICAL_VOLUMES _T("Logical volumes in volume group {instance}")
488#define DCTDESC_LVM_PHYSICAL_VOLUMES _T("Physical volumes in volume group {instance}")
ac60d715 489#define DCTDESC_SYSTEM_INSTALLED_PRODUCTS _T("Installed products")
92b25da9 490#define DCTDESC_SYSTEM_OPEN_FILES _T("Open files")
ad12a86f 491#define DCTDESC_SYSTEM_PROCESSES _T("Processes")
cc8ce218 492
0f506caa 493/**
b8b6cd2f
VK
494 * Class that stores information about file that will be received
495 */
496class LIBNXAGENT_EXPORTABLE DownloadFileInfo
497{
498protected:
499 TCHAR *m_fileName;
500 time_t m_lastModTime;
501 int m_file;
502 StreamCompressor *m_compressor; // stream compressor for file transfer
503
504public:
505 DownloadFileInfo(const TCHAR *name, time_t lastModTime = 0);
506 virtual ~DownloadFileInfo();
507
508 virtual bool open();
509 virtual bool write(const BYTE *data, size_t dataSize, bool compressedStream);
510 virtual void close(bool success);
511};
512
513/**
5944946e
VK
514 * API for CommSession
515 */
6fbaa926 516class AbstractCommSession : public RefCountObject
5944946e
VK
517{
518public:
da8453a5
VK
519 virtual UINT32 getId() = 0;
520
521 virtual UINT64 getServerId() = 0;
522 virtual const InetAddress& getServerAddress() = 0;
523
9319c166
VK
524 virtual bool isMasterServer() = 0;
525 virtual bool isControlServer() = 0;
d1dfba1a 526 virtual bool canAcceptData() = 0;
0d956dd9 527 virtual bool canAcceptTraps() = 0;
e13420c1 528 virtual bool canAcceptFileUpdates() = 0;
da8453a5 529 virtual bool isBulkReconciliationSupported() = 0;
ea3993c8
VK
530 virtual bool isIPv6Aware() = 0;
531
da8453a5
VK
532 virtual bool sendMessage(NXCPMessage *msg) = 0;
533 virtual void postMessage(NXCPMessage *msg) = 0;
534 virtual bool sendRawMessage(NXCP_MESSAGE *msg) = 0;
535 virtual void postRawMessage(NXCP_MESSAGE *msg) = 0;
b4879817 536 virtual bool sendFile(UINT32 requestId, const TCHAR *file, long offset, bool allowCompression) = 0;
63ff3c9d 537 virtual UINT32 doRequest(NXCPMessage *msg, UINT32 timeout) = 0;
a1273b42 538 virtual NXCPMessage *doRequestEx(NXCPMessage *msg, UINT32 timeout) = 0;
6fbaa926 539 virtual UINT32 generateRequestId() = 0;
7b45b90d 540 virtual UINT32 openFile(TCHAR* nameOfFile, UINT32 requestId, time_t fileModTime = 0) = 0;
da8453a5 541 virtual void debugPrintf(int level, const TCHAR *format, ...) = 0;
5944946e
VK
542};
543
544/**
45ac5dd0
EJ
545 * Execute server command
546 */
5d49264c 547class LIBNXAGENT_EXPORTABLE CommandExec
45ac5dd0
EJ
548{
549private:
45ac5dd0
EJ
550 UINT32 m_streamId;
551 THREAD m_outputThread;
5d49264c
VK
552#ifdef _WIN32
553 HANDLE m_phandle;
554 HANDLE m_pipe;
555#else
556 pid_t m_pid;
557 int m_pipe[2];
558#endif
45ac5dd0
EJ
559
560protected:
561 TCHAR *m_cmd;
562 bool m_sendOutput;
563
5d49264c
VK
564#ifdef _WIN32
565 HANDLE getOutputPipe() { return m_pipe; }
566#else
45ac5dd0 567 int getOutputPipe() { return m_pipe[0]; }
5d49264c 568#endif
45ac5dd0
EJ
569
570 static THREAD_RESULT THREAD_CALL readOutput(void *pArg);
571
572 virtual void onOutput(const char *text);
573 virtual void endOfOutput();
574
575public:
576 CommandExec(const TCHAR *cmd);
577 CommandExec();
578 virtual ~CommandExec();
579
580 UINT32 getStreamId() const { return m_streamId; }
581 const TCHAR *getCommand() const { return m_cmd; }
582
583 bool execute();
584 void stop();
45ac5dd0
EJ
585};
586
587/**
0f506caa
VK
588 * Subagent's parameter information
589 */
6827d635
VK
590typedef struct
591{
4687826e 592 TCHAR name[MAX_PARAM_NAME];
060c5a11 593 LONG (* handler)(const TCHAR *, const TCHAR *, TCHAR *, AbstractCommSession *);
4687826e
VK
594 const TCHAR *arg;
595 int dataType; // Use DT_DEPRECATED to indicate deprecated parameter
596 TCHAR description[MAX_DB_STRING];
6827d635
VK
597} NETXMS_SUBAGENT_PARAM;
598
0f506caa
VK
599/**
600 * Subagent's push parameter information
601 */
f480bdd4
VK
602typedef struct
603{
604 TCHAR name[MAX_PARAM_NAME];
605 int dataType;
606 TCHAR description[MAX_DB_STRING];
607} NETXMS_SUBAGENT_PUSHPARAM;
608
0f506caa
VK
609/**
610 * Subagent's list information
611 */
901c96c7
VK
612typedef struct
613{
4687826e 614 TCHAR name[MAX_PARAM_NAME];
060c5a11 615 LONG (* handler)(const TCHAR *, const TCHAR *, StringList *, AbstractCommSession *);
4687826e 616 const TCHAR *arg;
cb97f4dd 617 TCHAR description[MAX_DB_STRING];
4687826e
VK
618} NETXMS_SUBAGENT_LIST;
619
0f506caa 620/**
cb97f4dd
VK
621 * Subagent's table column information
622 */
623typedef struct
624{
625 TCHAR name[MAX_COLUMN_NAME];
626 TCHAR displayName[MAX_COLUMN_NAME];
627 int dataType;
628 bool isInstance;
629} NETXMS_SUBAGENT_TABLE_COLUMN;
630
631/**
0f506caa
VK
632 * Subagent's table information
633 */
4687826e
VK
634typedef struct
635{
636 TCHAR name[MAX_PARAM_NAME];
060c5a11 637 LONG (* handler)(const TCHAR *, const TCHAR *, Table *, AbstractCommSession *);
4687826e 638 const TCHAR *arg;
52f5ee00 639 TCHAR instanceColumns[MAX_COLUMN_NAME * MAX_INSTANCE_COLUMNS];
cc8ce218 640 TCHAR description[MAX_DB_STRING];
cb97f4dd
VK
641 int numColumns;
642 NETXMS_SUBAGENT_TABLE_COLUMN *columns;
4687826e 643} NETXMS_SUBAGENT_TABLE;
901c96c7 644
0f506caa
VK
645/**
646 * Subagent's action information
647 */
37778a1d
VK
648typedef struct
649{
4687826e 650 TCHAR name[MAX_PARAM_NAME];
060c5a11 651 LONG (* handler)(const TCHAR *, StringList *, const TCHAR *, AbstractCommSession *);
4687826e
VK
652 const TCHAR *arg;
653 TCHAR description[MAX_DB_STRING];
37778a1d
VK
654} NETXMS_SUBAGENT_ACTION;
655
da8453a5 656#define NETXMS_SUBAGENT_INFO_MAGIC ((UINT32)0x20161127)
ded831ac 657
b368969c 658class NXCPMessage;
d618c3ae 659
5944946e
VK
660/**
661 * Subagent initialization structure
662 */
6827d635
VK
663typedef struct
664{
967893bb 665 UINT32 magic; // Magic number to check if subagent uses correct version of this structure
4687826e
VK
666 TCHAR name[MAX_SUBAGENT_NAME];
667 TCHAR version[32];
668 BOOL (* init)(Config *); // Called to initialize subagent. Can be NULL.
669 void (* shutdown)(); // Called at subagent unload. Can be NULL.
b368969c 670 BOOL (* commandHandler)(UINT32 command, NXCPMessage *request, NXCPMessage *response, AbstractCommSession *session);
967893bb 671 UINT32 numParameters;
4687826e 672 NETXMS_SUBAGENT_PARAM *parameters;
967893bb 673 UINT32 numLists;
4687826e 674 NETXMS_SUBAGENT_LIST *lists;
967893bb 675 UINT32 numTables;
4687826e 676 NETXMS_SUBAGENT_TABLE *tables;
967893bb 677 UINT32 numActions;
4687826e 678 NETXMS_SUBAGENT_ACTION *actions;
967893bb 679 UINT32 numPushParameters;
4687826e 680 NETXMS_SUBAGENT_PUSHPARAM *pushParameters;
6827d635 681} NETXMS_SUBAGENT_INFO;
3b376ea0 682
0f506caa
VK
683/**
684 * Inline functions for returning parameters
685 */
a765d97c 686inline void ret_string(TCHAR *rbuf, const TCHAR *value)
cbcaf8c8 687{
a23d8e0d 688 nx_strncpy(rbuf, value, MAX_RESULT_LENGTH);
cbcaf8c8
VK
689}
690
f3387429
VK
691inline void ret_wstring(TCHAR *rbuf, const WCHAR *value)
692{
693#ifdef UNICODE
694 nx_strncpy(rbuf, value, MAX_RESULT_LENGTH);
695#else
696 WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK | WC_DEFAULTCHAR, value, -1, rbuf, MAX_RESULT_LENGTH, NULL, NULL);
697 rbuf[MAX_RESULT_LENGTH - 1] = 0;
698#endif
699}
700
701inline void ret_mbstring(TCHAR *rbuf, const char *value)
702{
703#ifdef UNICODE
704 MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, value, -1, rbuf, MAX_RESULT_LENGTH);
705 rbuf[MAX_RESULT_LENGTH - 1] = 0;
706#else
707 nx_strncpy(rbuf, value, MAX_RESULT_LENGTH);
708#endif
709}
710
0212dc5a 711inline void ret_int(TCHAR *rbuf, LONG value)
cbcaf8c8 712{
64a055a2 713#if defined(_WIN32) && (_MSC_VER >= 1300) && !defined(__clang__)
6e38075b 714 _sntprintf_s(rbuf, MAX_RESULT_LENGTH, _TRUNCATE, _T("%ld"), (long)value);
a23d8e0d 715#else
6e38075b 716 _sntprintf(rbuf, MAX_RESULT_LENGTH, _T("%ld"), (long)value);
a23d8e0d 717#endif
cbcaf8c8
VK
718}
719
967893bb 720inline void ret_uint(TCHAR *rbuf, UINT32 value)
cbcaf8c8 721{
64a055a2 722#if defined(_WIN32) && (_MSC_VER >= 1300) && !defined(__clang__)
6e38075b 723 _sntprintf_s(rbuf, MAX_RESULT_LENGTH, _TRUNCATE, _T("%lu"), (unsigned long)value);
a23d8e0d 724#else
6e38075b 725 _sntprintf(rbuf, MAX_RESULT_LENGTH, _T("%lu"), (unsigned long)value);
a23d8e0d 726#endif
cbcaf8c8
VK
727}
728
eb077f61 729inline void ret_double(TCHAR *rbuf, double value, int digits = 6)
cbcaf8c8 730{
64a055a2 731#if defined(_WIN32) && (_MSC_VER >= 1300) && !defined(__clang__)
eb077f61 732 _sntprintf_s(rbuf, MAX_RESULT_LENGTH, _TRUNCATE, _T("%1.*f"), digits, value);
a23d8e0d 733#else
eb077f61 734 _sntprintf(rbuf, MAX_RESULT_LENGTH, _T("%1.*f"), digits, value);
a23d8e0d 735#endif
cbcaf8c8
VK
736}
737
018fda4d 738inline void ret_int64(TCHAR *rbuf, INT64 value)
cbcaf8c8 739{
64a055a2 740#if defined(_WIN32) && (_MSC_VER >= 1300) && !defined(__clang__)
a23d8e0d 741 _sntprintf_s(rbuf, MAX_RESULT_LENGTH, _TRUNCATE, _T("%I64d"), value);
cbcaf8c8 742#else /* _WIN32 */
ccc34207 743 _sntprintf(rbuf, MAX_RESULT_LENGTH, INT64_FMT, value);
cbcaf8c8
VK
744#endif /* _WIN32 */
745}
746
018fda4d 747inline void ret_uint64(TCHAR *rbuf, QWORD value)
cbcaf8c8 748{
64a055a2 749#if defined(_WIN32) && (_MSC_VER >= 1300) && !defined(__clang__)
a23d8e0d 750 _sntprintf_s(rbuf, MAX_RESULT_LENGTH, _TRUNCATE, _T("%I64u"), value);
cbcaf8c8 751#else /* _WIN32 */
ccc34207 752 _sntprintf(rbuf, MAX_RESULT_LENGTH, UINT64_FMT, value);
cbcaf8c8
VK
753#endif /* _WIN32 */
754}
755
359784de
VK
756/**
757 * API for subagents
758 */
0e0867c6 759bool LIBNXAGENT_EXPORTABLE AgentGetParameterArgA(const TCHAR *param, int index, char *arg, int maxSize, bool inBrackets = true);
760bool LIBNXAGENT_EXPORTABLE AgentGetParameterArgW(const TCHAR *param, int index, WCHAR *arg, int maxSize, bool inBrackets = true);
f3387429
VK
761#ifdef UNICODE
762#define AgentGetParameterArg AgentGetParameterArgW
763#else
764#define AgentGetParameterArg AgentGetParameterArgA
765#endif
766
359784de 767void LIBNXAGENT_EXPORTABLE AgentWriteLog(int logLevel, const TCHAR *format, ...)
6e383343 768#if !defined(UNICODE) && (defined(__GNUC__) || defined(__clang__))
640b6719
VK
769 __attribute__ ((format(printf, 2, 3)))
770#endif
771;
359784de
VK
772void LIBNXAGENT_EXPORTABLE AgentWriteLog2(int logLevel, const TCHAR *format, va_list args);
773void LIBNXAGENT_EXPORTABLE AgentWriteDebugLog(int level, const TCHAR *format, ...)
6e383343 774#if !defined(UNICODE) && (defined(__GNUC__) || defined(__clang__))
640b6719
VK
775 __attribute__ ((format(printf, 2, 3)))
776#endif
777;
359784de
VK
778void LIBNXAGENT_EXPORTABLE AgentWriteDebugLog2(int level, const TCHAR *format, va_list args);
779
780void LIBNXAGENT_EXPORTABLE AgentSendTrap(UINT32 dwEvent, const TCHAR *eventName, const char *pszFormat, ...);
781void LIBNXAGENT_EXPORTABLE AgentSendTrap2(UINT32 dwEvent, const TCHAR *eventName, int nCount, TCHAR **ppszArgList);
782
34b9a3e7 783bool LIBNXAGENT_EXPORTABLE AgentEnumerateSessions(EnumerationCallbackResult (* callback)(AbstractCommSession *, void *), void *data);
6fbaa926 784AbstractCommSession LIBNXAGENT_EXPORTABLE *AgentFindServerSession(UINT64 serverId);
359784de 785
b4879817 786bool LIBNXAGENT_EXPORTABLE AgentSendFileToServer(void *session, UINT32 requestId, const TCHAR *file, long offset, bool allowCompression);
359784de
VK
787
788bool LIBNXAGENT_EXPORTABLE AgentPushParameterData(const TCHAR *parameter, const TCHAR *value);
789bool LIBNXAGENT_EXPORTABLE AgentPushParameterDataInt32(const TCHAR *parameter, LONG value);
790bool LIBNXAGENT_EXPORTABLE AgentPushParameterDataUInt32(const TCHAR *parameter, UINT32 value);
791bool LIBNXAGENT_EXPORTABLE AgentPushParameterDataInt64(const TCHAR *parameter, INT64 value);
792bool LIBNXAGENT_EXPORTABLE AgentPushParameterDataUInt64(const TCHAR *parameter, QWORD value);
793bool LIBNXAGENT_EXPORTABLE AgentPushParameterDataDouble(const TCHAR *parameter, double value);
794
795CONDITION LIBNXAGENT_EXPORTABLE AgentGetShutdownCondition();
796bool LIBNXAGENT_EXPORTABLE AgentSleepAndCheckForShutdown(UINT32 sleepTime);
359784de 797const TCHAR LIBNXAGENT_EXPORTABLE *AgentGetDataDirectory();
23d3d35d 798
bb48198e 799DB_HANDLE LIBNXAGENT_EXPORTABLE AgentGetLocalDatabaseHandle();
f1cfab13 800
ac7a2e92
TD
801TCHAR LIBNXAGENT_EXPORTABLE *ReadRegistryAsString(const TCHAR *attr, TCHAR *buffer = NULL, int bufSize = 0, const TCHAR *defaultValue = NULL);
802INT32 LIBNXAGENT_EXPORTABLE ReadRegistryAsInt32(const TCHAR *attr, INT32 defaultValue);
803INT64 LIBNXAGENT_EXPORTABLE ReadRegistryAsInt64(const TCHAR *attr, INT64 defaultValue);
804bool LIBNXAGENT_EXPORTABLE WriteRegistry(const TCHAR *attr, const TCHAR *value);
f1cfab13
VK
805bool LIBNXAGENT_EXPORTABLE WriteRegistry(const TCHAR *attr, INT32 value);
806bool LIBNXAGENT_EXPORTABLE WriteRegistry(const TCHAR *attr, INT64 value);
ac7a2e92 807bool LIBNXAGENT_EXPORTABLE DeleteRegistryEntry(const TCHAR *attr);
bb48198e 808
ce9e00cc
VK
809/**
810 * LoraWAN device payload
811 */
812typedef BYTE lorawan_payload_t[36];
813
e590796d
VK
814/**
815 * Lora device data
816 */
ce9e00cc
VK
817class LIBNXAGENT_EXPORTABLE LoraDeviceData
818{
819private:
820 uuid m_guid;
821 MacAddress m_devAddr;
822 MacAddress m_devEui;
823 lorawan_payload_t m_payload;
824 INT32 m_decoder;
825 char m_dataRate[24];
826 INT32 m_rssi;
827 double m_snr;
828 double m_freq;
829 UINT32 m_fcnt;
830 UINT32 m_port;
831 time_t m_lastContact;
832
833public:
834 LoraDeviceData(NXCPMessage *request);
835 LoraDeviceData(DB_RESULT result, int row);
836
27b6740d
EJ
837 UINT32 saveToDB (bool isNew = false) const;
838 UINT32 deleteFromDB () const;
ce9e00cc 839
27b6740d 840 bool isOtaa() const { return (m_devEui.length() > 0) ? true : false; }
ce9e00cc 841
27b6740d 842 const uuid& getGuid() const { return m_guid; }
ce9e00cc 843
27b6740d
EJ
844 const MacAddress& getDevAddr() const { return m_devAddr; }
845 void setDevAddr(MacAddress devAddr) { m_devAddr = devAddr; saveToDB(); }
846 const MacAddress& getDevEui() const { return m_devEui; }
ce9e00cc 847
27b6740d 848 const BYTE *getPayload() const { return m_payload; }
ce9e00cc
VK
849 void setPayload(const char *payload) { StrToBinA(payload, m_payload, 36); }
850
851 UINT32 getDecoder() { return m_decoder; }
852
27b6740d 853 const char *getDataRate() const { return m_dataRate; }
ce9e00cc
VK
854 void setDataRate(const char *dataRate) { strncpy(m_dataRate, dataRate, 24); }
855
27b6740d 856 INT32 getRssi() const { return m_rssi; }
ce9e00cc
VK
857 void setRssi(INT32 rssi) { m_rssi = rssi; }
858
27b6740d 859 double getSnr() const { return m_snr; }
ce9e00cc
VK
860 void setSnr(double snr) { m_snr = snr; }
861
27b6740d 862 double getFreq() const { return m_freq; }
ce9e00cc
VK
863 void setFreq(double freq) { m_freq = freq; }
864
27b6740d 865 UINT32 getFcnt() const { return m_fcnt; }
ce9e00cc
VK
866 void setFcnt(UINT32 fcnt) { m_fcnt = fcnt; }
867
27b6740d 868 UINT32 getPort() const { return m_port; }
ce9e00cc
VK
869 void setPort(UINT32 port) { m_port = port; }
870
27b6740d 871 INT32 getLastContact() const { return (INT32)m_lastContact; }
ce9e00cc
VK
872 void updateLastContact() { m_lastContact = time(NULL); }
873};
874
cbcaf8c8 875#endif /* _nms_agent_h_ */