all pollers converted to single thread pool
[public/netxms.git] / src / server / include / nms_core.h
1 /*
2 ** NetXMS - Network Management System
3 ** Copyright (C) 2003-2014 Victor Kirhenshtein
4 **
5 ** This program is free software; you can redistribute it and/or modify
6 ** it under the terms of the GNU General Public License as published by
7 ** the Free Software Foundation; either version 2 of the License, or
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 **
15 ** You should have received a copy of the GNU General Public License
16 ** along with this program; if not, write to the Free Software
17 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 **
19 ** File: nms_core.h
20 **
21 **/
22
23 #ifndef _nms_core_h_
24 #define _nms_core_h_
25
26 #ifdef _WIN32
27 #ifdef NXCORE_EXPORTS
28 #define NXCORE_EXPORTABLE __declspec(dllexport)
29 #else
30 #define NXCORE_EXPORTABLE __declspec(dllimport)
31 #endif
32 #else /* _WIN32 */
33 #define NXCORE_EXPORTABLE
34 #endif
35
36 #define LIBNXCL_NO_DECLARATIONS 1
37
38 #include <nms_common.h>
39
40 #ifndef _WIN32
41
42 #if HAVE_SYS_TYPES_H
43 # include <sys/types.h>
44 #endif
45
46 #if HAVE_DLFCN_H
47 #include <dlfcn.h>
48 #endif
49
50
51 #define WSAGetLastError() (errno)
52
53 #endif /* _WIN32 */
54
55 #include <time.h>
56 #include <stdio.h>
57 #include <string.h>
58 #include <stdarg.h>
59
60 #ifdef _WITH_ENCRYPTION
61 #include <openssl/ssl.h>
62 #endif
63
64 //
65 // Common includes
66 //
67
68 #include <nms_util.h>
69 #include <dbdrv.h>
70 #include <nms_cscp.h>
71 #include <uuid.h>
72 #include <nxsrvapi.h>
73 #include <nxqueue.h>
74 #include <nxsnmp.h>
75 #include <nxmodule.h>
76 #include <nxsl.h>
77 #include <nxdbapi.h>
78 #include <nddrv.h>
79 #include <nxcore_smclp.h>
80
81 /**
82 * Console context
83 */
84 struct __console_ctx
85 {
86 SOCKET hSocket;
87 MUTEX socketMutex;
88 NXCPMessage *pMsg;
89 ClientSession *session;
90 String *output;
91 };
92
93 typedef __console_ctx * CONSOLE_CTX;
94
95 /**
96 * Server includes
97 */
98 #include "server_timers.h"
99 #include "nms_dcoll.h"
100 #include "nms_users.h"
101 #include "nxcore_winperf.h"
102 #include "nms_objects.h"
103 #include "nms_locks.h"
104 #include "nms_pkg.h"
105 #include "nms_topo.h"
106 #include "nms_script.h"
107 #include "nxcore_situations.h"
108 #include "nxcore_jobs.h"
109 #include "nxcore_logs.h"
110
111 /**
112 * Common constants and macros
113 */
114 #define MAX_LINE_SIZE 4096
115 #define GROUP_FLAG_BIT ((UINT32)0x80000000)
116 #define CHECKPOINT_SNMP_PORT 260
117 #define DEFAULT_AFFINITY_MASK 0xFFFFFFFF
118
119 #define MAX_CLIENT_SESSIONS 128
120 #define MAX_DEVICE_SESSIONS 256
121
122 #define PING_TIME_TIMEOUT 10000
123
124 typedef void * HSNMPSESSION;
125
126 /**
127 * Prefixes for poller messages
128 */
129 #define POLLER_ERROR _T("\x7F") _T("e")
130 #define POLLER_WARNING _T("\x7Fw")
131 #define POLLER_INFO _T("\x7Fi")
132
133 /**
134 * Unique identifier group codes
135 */
136 #define IDG_NETWORK_OBJECT 0
137 #define IDG_CONTAINER_CAT 1
138 #define IDG_EVENT 2
139 #define IDG_ITEM 3
140 #define IDG_SNMP_TRAP 4
141 #define IDG_JOB 5
142 #define IDG_ACTION 6
143 #define IDG_EVENT_GROUP 7
144 #define IDG_THRESHOLD 8
145 #define IDG_USER 9
146 #define IDG_USER_GROUP 10
147 #define IDG_ALARM 11
148 #define IDG_ALARM_NOTE 12
149 #define IDG_PACKAGE 13
150 #define IDG_SLM_TICKET 14
151 #define IDG_OBJECT_TOOL 15
152 #define IDG_SCRIPT 16
153 #define IDG_AGENT_CONFIG 17
154 #define IDG_GRAPH 18
155 #define IDG_CERTIFICATE 19
156 #define IDG_SITUATION 20
157 #define IDG_DCT_COLUMN 21
158 #define IDG_MAPPING_TABLE 22
159 #define IDG_DCI_SUMMARY_TABLE 23
160
161 /**
162 * Exit codes for console commands
163 */
164 #define CMD_EXIT_CONTINUE 0
165 #define CMD_EXIT_CLOSE_SESSION 1
166 #define CMD_EXIT_SHUTDOWN 2
167
168 /**
169 * Network discovery mode
170 */
171 #define DISCOVERY_DISABLED 0
172 #define DISCOVERY_PASSIVE_ONLY 1
173 #define DISCOVERY_ACTIVE 2
174
175 /**
176 * Client session flags
177 */
178 #define CSF_TERMINATED ((UINT32)0x00000001)
179 #define CSF_EPP_LOCKED ((UINT32)0x00000002)
180 #define CSF_PACKAGE_DB_LOCKED ((UINT32)0x00000004)
181 #define CSF_USER_DB_LOCKED ((UINT32)0x00000008)
182 #define CSF_EPP_UPLOAD ((UINT32)0x00000010)
183 #define CSF_CONSOLE_OPEN ((UINT32)0x00000020)
184 #define CSF_AUTHENTICATED ((UINT32)0x00000080)
185 #define CSF_RECEIVING_MAP_DATA ((UINT32)0x00000200)
186 #define CSF_SYNC_OBJECT_COMMENTS ((UINT32)0x00000400)
187 #define CSF_CUSTOM_LOCK_1 ((UINT32)0x01000000)
188 #define CSF_CUSTOM_LOCK_2 ((UINT32)0x02000000)
189 #define CSF_CUSTOM_LOCK_3 ((UINT32)0x04000000)
190 #define CSF_CUSTOM_LOCK_4 ((UINT32)0x08000000)
191 #define CSF_CUSTOM_LOCK_5 ((UINT32)0x10000000)
192 #define CSF_CUSTOM_LOCK_6 ((UINT32)0x20000000)
193 #define CSF_CUSTOM_LOCK_7 ((UINT32)0x40000000)
194 #define CSF_CUSTOM_LOCK_8 ((UINT32)0x80000000)
195
196 /**
197 * Client session states
198 */
199 #define SESSION_STATE_INIT 0
200 #define SESSION_STATE_IDLE 1
201 #define SESSION_STATE_PROCESSING 2
202
203 /**
204 * Information categories for UPDATE_INFO structure
205 */
206 #define INFO_CAT_EVENT 1
207 #define INFO_CAT_OBJECT_CHANGE 2
208 #define INFO_CAT_ALARM 3
209 #define INFO_CAT_ACTION 4
210 #define INFO_CAT_SYSLOG_MSG 5
211 #define INFO_CAT_SNMP_TRAP 6
212 #define INFO_CAT_AUDIT_RECORD 7
213 #define INFO_CAT_SITUATION 8
214 #define INFO_CAT_LIBRARY_IMAGE 9
215
216 /**
217 * Certificate types
218 */
219 #define CERT_TYPE_TRUSTED_CA 0
220 #define CERT_TYPE_USER 1
221
222 /**
223 * Audit subsystems
224 */
225 #define AUDIT_SECURITY _T("SECURITY")
226 #define AUDIT_OBJECTS _T("OBJECTS")
227 #define AUDIT_SYSCFG _T("SYSCFG")
228 #define AUDIT_CONSOLE _T("CONSOLE")
229
230 #define AUDIT_SYSTEM_SID (-1)
231
232 /**
233 * Event handling subsystem definitions
234 */
235 #include "nms_events.h"
236 #include "nms_actions.h"
237 #include "nms_alarm.h"
238
239 /**
240 * New node information
241 */
242 typedef struct
243 {
244 InetAddress ipAddr;
245 UINT32 zoneId;
246 BOOL ignoreFilter;
247 BYTE bMacAddr[MAC_ADDR_LENGTH];
248 } NEW_NODE;
249
250 /**
251 * New node flags
252 */
253 #define NNF_IS_SNMP 0x0001
254 #define NNF_IS_AGENT 0x0002
255 #define NNF_IS_ROUTER 0x0004
256 #define NNF_IS_BRIDGE 0x0008
257 #define NNF_IS_PRINTER 0x0010
258 #define NNF_IS_CDP 0x0020
259 #define NNF_IS_SONMP 0x0040
260 #define NNF_IS_LLDP 0x0080
261
262 /**
263 * Node information for autodiscovery filter
264 */
265 typedef struct
266 {
267 InetAddress ipAddr;
268 UINT32 dwFlags;
269 int nSNMPVersion;
270 TCHAR szObjectId[MAX_OID_LEN * 4]; // SNMP OID
271 TCHAR szAgentVersion[MAX_AGENT_VERSION_LEN];
272 TCHAR szPlatform[MAX_PLATFORM_NAME_LEN];
273 } DISCOVERY_FILTER_DATA;
274
275 /**
276 * Data update structure for client sessions
277 */
278 typedef struct
279 {
280 UINT32 dwCategory; // Data category - event, network object, etc.
281 UINT32 dwCode; // Data-specific update code
282 void *pData; // Pointer to data block
283 } UPDATE_INFO;
284
285 /**
286 * Extended agent connection
287 */
288 class AgentConnectionEx : public AgentConnection
289 {
290 protected:
291 UINT32 m_nodeId;
292
293 virtual void printMsg(const TCHAR *format, ...);
294 virtual void onTrap(NXCPMessage *msg);
295 virtual void onDataPush(NXCPMessage *msg);
296 virtual void onFileMonitoringData(NXCPMessage *msg);
297 virtual void onSnmpTrap(NXCPMessage *pMsg);
298 virtual UINT32 processCollectedData(NXCPMessage *msg);
299 virtual bool processCustomMessage(NXCPMessage *msg);
300
301 public:
302 AgentConnectionEx(UINT32 nodeId, InetAddress ipAddr, WORD port = AGENT_LISTEN_PORT, int authMethod = AUTH_NONE, const TCHAR *secret = NULL) :
303 AgentConnection(ipAddr, port, authMethod, secret) { m_nodeId = nodeId; }
304 virtual ~AgentConnectionEx();
305
306 UINT32 deployPolicy(AgentPolicy *policy);
307 UINT32 uninstallPolicy(AgentPolicy *policy);
308 };
309
310 /**
311 * Mobile device session
312 */
313 class NXCORE_EXPORTABLE MobileDeviceSession
314 {
315 private:
316 SOCKET m_hSocket;
317 Queue *m_pSendQueue;
318 Queue *m_pMessageQueue;
319 int m_id;
320 int m_state;
321 WORD m_wCurrentCmd;
322 UINT32 m_dwUserId;
323 UINT32 m_deviceObjectId;
324 NXCP_BUFFER *m_pMsgBuffer;
325 NXCPEncryptionContext *m_pCtx;
326 BYTE m_challenge[CLIENT_CHALLENGE_SIZE];
327 THREAD m_hWriteThread;
328 THREAD m_hProcessingThread;
329 MUTEX m_mutexSocketWrite;
330 struct sockaddr *m_clientAddr;
331 TCHAR m_szHostName[256]; // IP address of name of conneced host in textual form
332 TCHAR m_szUserName[MAX_SESSION_NAME]; // String in form login_name@host
333 TCHAR m_szClientInfo[96]; // Client app info string
334 UINT32 m_dwEncryptionRqId;
335 UINT32 m_dwEncryptionResult;
336 CONDITION m_condEncryptionSetup;
337 UINT32 m_dwRefCount;
338 bool m_isAuthenticated;
339
340 static THREAD_RESULT THREAD_CALL readThreadStarter(void *);
341 static THREAD_RESULT THREAD_CALL writeThreadStarter(void *);
342 static THREAD_RESULT THREAD_CALL processingThreadStarter(void *);
343
344 void readThread();
345 void writeThread();
346 void processingThread();
347
348 void setupEncryption(NXCPMessage *request);
349 void respondToKeepalive(UINT32 dwRqId);
350 void debugPrintf(int level, const TCHAR *format, ...);
351 void sendServerInfo(UINT32 dwRqId);
352 void login(NXCPMessage *pRequest);
353 void updateDeviceInfo(NXCPMessage *pRequest);
354 void updateDeviceStatus(NXCPMessage *pRequest);
355 void pushData(NXCPMessage *request);
356
357 public:
358 MobileDeviceSession(SOCKET hSocket, struct sockaddr *addr);
359 ~MobileDeviceSession();
360
361 void run();
362
363 void postMessage(NXCPMessage *pMsg) { m_pSendQueue->put(pMsg->createMessage()); }
364 void sendMessage(NXCPMessage *pMsg);
365
366 int getId() { return m_id; }
367 void setId(int id) { if (m_id == -1) m_id = id; }
368 int getState() { return m_state; }
369 const TCHAR *getUserName() { return m_szUserName; }
370 const TCHAR *getClientInfo() { return m_szClientInfo; }
371 const TCHAR *getHostName() { return m_szHostName; }
372 UINT32 getUserId() { return m_dwUserId; }
373 bool isAuthenticated() { return m_isAuthenticated; }
374 WORD getCurrentCmd() { return m_wCurrentCmd; }
375 int getCipher() { return (m_pCtx == NULL) ? -1 : m_pCtx->getCipher(); }
376 };
377
378 /**
379 * Client (user) session
380 */
381 #define DECLARE_THREAD_STARTER(func) static void ThreadStarter_##func(void *);
382
383 class NXCORE_EXPORTABLE ClientSession
384 {
385 private:
386 SOCKET m_hSocket;
387 Queue *m_pSendQueue;
388 Queue *m_pMessageQueue;
389 Queue *m_pUpdateQueue;
390 int m_id;
391 int m_state;
392 WORD m_wCurrentCmd;
393 UINT32 m_dwUserId;
394 UINT64 m_dwSystemAccess; // User's system access rights
395 UINT32 m_dwFlags; // Session flags
396 int m_clientType; // Client system type - desktop, web, mobile, etc.
397 NXCP_BUFFER *m_pMsgBuffer;
398 NXCPEncryptionContext *m_pCtx;
399 BYTE m_challenge[CLIENT_CHALLENGE_SIZE];
400 THREAD m_hWriteThread;
401 THREAD m_hProcessingThread;
402 THREAD m_hUpdateThread;
403 MUTEX m_mutexSocketWrite;
404 MUTEX m_mutexSendEvents;
405 MUTEX m_mutexSendSyslog;
406 MUTEX m_mutexSendTrapLog;
407 MUTEX m_mutexSendObjects;
408 MUTEX m_mutexSendAlarms;
409 MUTEX m_mutexSendActions;
410 MUTEX m_mutexSendAuditLog;
411 MUTEX m_mutexSendSituations;
412 MUTEX m_mutexPollerInit;
413 struct sockaddr *m_clientAddr;
414 TCHAR m_workstation[256]; // IP address or name of connected host in textual form
415 TCHAR m_webServerAddress[256]; // IP address or name of web server for web sessions
416 TCHAR m_szUserName[MAX_SESSION_NAME]; // String in form login_name@host
417 TCHAR m_szClientInfo[96]; // Client app info string
418 TCHAR m_language[8]; // Client's desired language
419 time_t m_loginTime;
420 UINT32 m_dwOpenDCIListSize; // Number of open DCI lists
421 UINT32 *m_pOpenDCIList; // List of nodes with DCI lists open
422 UINT32 m_dwNumRecordsToUpload; // Number of records to be uploaded
423 UINT32 m_dwRecordsUploaded;
424 EPRule **m_ppEPPRuleList; // List of loaded EPP rules
425 int m_hCurrFile;
426 UINT32 m_dwFileRqId;
427 UINT32 m_dwUploadCommand;
428 UINT32 m_dwUploadData;
429 uuid_t m_uploadImageGuid;
430 TCHAR m_szCurrFileName[MAX_PATH];
431 UINT32 m_dwRefCount;
432 UINT32 m_dwEncryptionRqId;
433 UINT32 m_dwEncryptionResult;
434 CONDITION m_condEncryptionSetup;
435 UINT32 m_dwActiveChannels; // Active data channels
436 CONSOLE_CTX m_console; // Server console context
437 StringList m_musicTypeList;
438 ObjectIndex m_agentConn;
439
440 static THREAD_RESULT THREAD_CALL readThreadStarter(void *);
441 static THREAD_RESULT THREAD_CALL writeThreadStarter(void *);
442 static THREAD_RESULT THREAD_CALL processingThreadStarter(void *);
443 static THREAD_RESULT THREAD_CALL updateThreadStarter(void *);
444 static void pollerThreadStarter(void *);
445
446 DECLARE_THREAD_STARTER(getCollectedData)
447 DECLARE_THREAD_STARTER(getTableCollectedData)
448 DECLARE_THREAD_STARTER(clearDCIData)
449 DECLARE_THREAD_STARTER(forceDCIPoll)
450 DECLARE_THREAD_STARTER(queryParameter)
451 DECLARE_THREAD_STARTER(queryAgentTable)
452 DECLARE_THREAD_STARTER(queryL2Topology)
453 DECLARE_THREAD_STARTER(sendEventLog)
454 DECLARE_THREAD_STARTER(sendSyslog)
455 DECLARE_THREAD_STARTER(createObject)
456 DECLARE_THREAD_STARTER(getServerFile)
457 DECLARE_THREAD_STARTER(getAgentFile)
458 DECLARE_THREAD_STARTER(cancelFileMonitoring)
459 DECLARE_THREAD_STARTER(queryServerLog)
460 DECLARE_THREAD_STARTER(getServerLogQueryData)
461 DECLARE_THREAD_STARTER(executeAction)
462 DECLARE_THREAD_STARTER(findNodeConnection)
463 DECLARE_THREAD_STARTER(findMacAddress)
464 DECLARE_THREAD_STARTER(findIpAddress)
465 DECLARE_THREAD_STARTER(processConsoleCommand)
466 DECLARE_THREAD_STARTER(sendMib)
467 DECLARE_THREAD_STARTER(getNetworkPath)
468 DECLARE_THREAD_STARTER(getAlarmEvents)
469 DECLARE_THREAD_STARTER(openHelpdeskIssue)
470 DECLARE_THREAD_STARTER(forwardToReportingServer)
471 DECLARE_THREAD_STARTER(fileManagerControl)
472 DECLARE_THREAD_STARTER(uploadUserFileToAgent)
473 DECLARE_THREAD_STARTER(getSwitchForwardingDatabase)
474 DECLARE_THREAD_STARTER(getRoutingTable)
475 DECLARE_THREAD_STARTER(getLocationHistory)
476 DECLARE_THREAD_STARTER(executeScript)
477
478 void readThread();
479 void writeThread();
480 void processingThread();
481 void updateThread();
482 void pollerThread(Node *pNode, int iPollType, UINT32 dwRqId);
483
484 void setupEncryption(NXCPMessage *request);
485 void respondToKeepalive(UINT32 dwRqId);
486 void onFileUpload(BOOL bSuccess);
487 void debugPrintf(int level, const TCHAR *format, ...);
488 void sendServerInfo(UINT32 dwRqId);
489 void login(NXCPMessage *pRequest);
490 void sendAllObjects(NXCPMessage *pRequest);
491 void sendSelectedObjects(NXCPMessage *pRequest);
492 void sendEventLog(NXCPMessage *pRequest);
493 void sendAllConfigVars(UINT32 dwRqId);
494 void setConfigVariable(NXCPMessage *pRequest);
495 void deleteConfigVariable(NXCPMessage *pRequest);
496 void sendUserDB(UINT32 dwRqId);
497 void sendAllAlarms(UINT32 dwRqId);
498 void createUser(NXCPMessage *pRequest);
499 void updateUser(NXCPMessage *pRequest);
500 void deleteUser(NXCPMessage *pRequest);
501 void setPassword(NXCPMessage *pRequest);
502 void lockUserDB(UINT32 dwRqId, BOOL bLock);
503 void sendEventDB(UINT32 dwRqId);
504 void modifyEventTemplate(NXCPMessage *pRequest);
505 void deleteEventTemplate(NXCPMessage *pRequest);
506 void generateEventCode(UINT32 dwRqId);
507 void modifyObject(NXCPMessage *pRequest);
508 void changeObjectMgmtStatus(NXCPMessage *pRequest);
509 void openNodeDCIList(NXCPMessage *pRequest);
510 void closeNodeDCIList(NXCPMessage *pRequest);
511 void modifyNodeDCI(NXCPMessage *pRequest);
512 void copyDCI(NXCPMessage *pRequest);
513 void applyTemplate(NXCPMessage *pRequest);
514 void getCollectedData(NXCPMessage *pRequest);
515 void getTableCollectedData(NXCPMessage *pRequest);
516 bool getCollectedDataFromDB(NXCPMessage *request, NXCPMessage *response, DataCollectionTarget *object, int dciType);
517 void clearDCIData(NXCPMessage *pRequest);
518 void forceDCIPoll(NXCPMessage *pRequest);
519 void changeDCIStatus(NXCPMessage *pRequest);
520 void getLastValues(NXCPMessage *pRequest);
521 void getLastValuesByDciId(NXCPMessage *pRequest);
522 void getTableLastValues(NXCPMessage *pRequest);
523 void getThresholdSummary(NXCPMessage *request);
524 void openEPP(NXCPMessage *request);
525 void closeEPP(UINT32 dwRqId);
526 void saveEPP(NXCPMessage *pRequest);
527 void processEPPRecord(NXCPMessage *pRequest);
528 void sendMIBTimestamp(UINT32 dwRqId);
529 void sendMib(NXCPMessage *request);
530 void createObject(NXCPMessage *request);
531 void changeObjectBinding(NXCPMessage *request, BOOL bBind);
532 void deleteObject(NXCPMessage *request);
533 void getAlarm(NXCPMessage *request);
534 void getAlarmEvents(NXCPMessage *request);
535 void acknowledgeAlarm(NXCPMessage *request);
536 void resolveAlarm(NXCPMessage *request, bool terminate);
537 void deleteAlarm(NXCPMessage *request);
538 void openHelpdeskIssue(NXCPMessage *request);
539 void getHelpdeskUrl(NXCPMessage *request);
540 void unlinkHelpdeskIssue(NXCPMessage *request);
541 void getAlarmComments(NXCPMessage *pRequest);
542 void updateAlarmComment(NXCPMessage *pRequest);
543 void deleteAlarmComment(NXCPMessage *request);
544 void updateAlarmStatusFlow(NXCPMessage *request);
545 void createAction(NXCPMessage *pRequest);
546 void updateAction(NXCPMessage *pRequest);
547 void deleteAction(NXCPMessage *pRequest);
548 void sendAllActions(UINT32 dwRqId);
549 void SendContainerCategories(UINT32 dwRqId);
550 void forcedNodePoll(NXCPMessage *pRequest);
551 void onTrap(NXCPMessage *pRequest);
552 void onWakeUpNode(NXCPMessage *pRequest);
553 void queryParameter(NXCPMessage *pRequest);
554 void queryAgentTable(NXCPMessage *pRequest);
555 void editTrap(int iOperation, NXCPMessage *pRequest);
556 void LockTrapCfg(UINT32 dwRqId, BOOL bLock);
557 void sendAllTraps(UINT32 dwRqId);
558 void sendAllTraps2(UINT32 dwRqId);
559 void LockPackageDB(UINT32 dwRqId, BOOL bLock);
560 void SendAllPackages(UINT32 dwRqId);
561 void InstallPackage(NXCPMessage *pRequest);
562 void RemovePackage(NXCPMessage *pRequest);
563 void DeployPackage(NXCPMessage *pRequest);
564 void getParametersList(NXCPMessage *pRequest);
565 void getUserVariable(NXCPMessage *pRequest);
566 void setUserVariable(NXCPMessage *pRequest);
567 void copyUserVariable(NXCPMessage *pRequest);
568 void enumUserVariables(NXCPMessage *pRequest);
569 void deleteUserVariable(NXCPMessage *pRequest);
570 void changeObjectZone(NXCPMessage *pRequest);
571 void getAgentConfig(NXCPMessage *pRequest);
572 void updateAgentConfig(NXCPMessage *pRequest);
573 void executeAction(NXCPMessage *pRequest);
574 void sendObjectTools(UINT32 dwRqId);
575 void sendObjectToolDetails(NXCPMessage *pRequest);
576 void updateObjectTool(NXCPMessage *pRequest);
577 void deleteObjectTool(NXCPMessage *pRequest);
578 void changeObjectToolStatus(NXCPMessage *pRequest);
579 void generateObjectToolId(UINT32 dwRqId);
580 void execTableTool(NXCPMessage *pRequest);
581 void changeSubscription(NXCPMessage *pRequest);
582 void sendSyslog(NXCPMessage *pRequest);
583 void sendServerStats(UINT32 dwRqId);
584 void sendScriptList(UINT32 dwRqId);
585 void sendScript(NXCPMessage *pRequest);
586 void updateScript(NXCPMessage *pRequest);
587 void renameScript(NXCPMessage *pRequest);
588 void deleteScript(NXCPMessage *pRequest);
589 void SendSessionList(UINT32 dwRqId);
590 void KillSession(NXCPMessage *pRequest);
591 void SendTrapLog(NXCPMessage *pRequest);
592 void StartSnmpWalk(NXCPMessage *pRequest);
593 void resolveDCINames(NXCPMessage *pRequest);
594 UINT32 resolveDCIName(UINT32 dwNode, UINT32 dwItem, TCHAR **ppszName);
595 void sendConfigForAgent(NXCPMessage *pRequest);
596 void sendAgentCfgList(UINT32 dwRqId);
597 void OpenAgentConfig(NXCPMessage *pRequest);
598 void SaveAgentConfig(NXCPMessage *pRequest);
599 void DeleteAgentConfig(NXCPMessage *pRequest);
600 void SwapAgentConfigs(NXCPMessage *pRequest);
601 void SendObjectComments(NXCPMessage *pRequest);
602 void updateObjectComments(NXCPMessage *pRequest);
603 void pushDCIData(NXCPMessage *pRequest);
604 void getAddrList(NXCPMessage *pRequest);
605 void setAddrList(NXCPMessage *pRequest);
606 void resetComponent(NXCPMessage *pRequest);
607 void getDCIEventList(NXCPMessage *request);
608 void getDCIScriptList(NXCPMessage *request);
609 void SendDCIInfo(NXCPMessage *pRequest);
610 void sendPerfTabDCIList(NXCPMessage *pRequest);
611 void exportConfiguration(NXCPMessage *pRequest);
612 void importConfiguration(NXCPMessage *pRequest);
613 void sendGraphList(UINT32 dwRqId);
614 void saveGraph(NXCPMessage *pRequest);
615 void deleteGraph(NXCPMessage *pRequest);
616 void AddCACertificate(NXCPMessage *pRequest);
617 void DeleteCertificate(NXCPMessage *pRequest);
618 void UpdateCertificateComments(NXCPMessage *pRequest);
619 void getCertificateList(UINT32 dwRqId);
620 void queryL2Topology(NXCPMessage *pRequest);
621 void sendSMS(NXCPMessage *pRequest);
622 void SendCommunityList(UINT32 dwRqId);
623 void UpdateCommunityList(NXCPMessage *pRequest);
624 void getSituationList(UINT32 dwRqId);
625 void createSituation(NXCPMessage *pRequest);
626 void updateSituation(NXCPMessage *pRequest);
627 void deleteSituation(NXCPMessage *pRequest);
628 void deleteSituationInstance(NXCPMessage *pRequest);
629 void setConfigCLOB(NXCPMessage *pRequest);
630 void getConfigCLOB(NXCPMessage *pRequest);
631 void registerAgent(NXCPMessage *pRequest);
632 void getServerFile(NXCPMessage *pRequest);
633 void cancelFileMonitoring(NXCPMessage *request);
634 void getAgentFile(NXCPMessage *pRequest);
635 void testDCITransformation(NXCPMessage *pRequest);
636 void sendJobList(UINT32 dwRqId);
637 void cancelJob(NXCPMessage *pRequest);
638 void holdJob(NXCPMessage *pRequest);
639 void unholdJob(NXCPMessage *pRequest);
640 void deployAgentPolicy(NXCPMessage *pRequest, bool uninstallFlag);
641 void getUserCustomAttribute(NXCPMessage *request);
642 void setUserCustomAttribute(NXCPMessage *request);
643 void openServerLog(NXCPMessage *request);
644 void closeServerLog(NXCPMessage *request);
645 void queryServerLog(NXCPMessage *request);
646 void getServerLogQueryData(NXCPMessage *request);
647 void sendUsmCredentials(UINT32 dwRqId);
648 void updateUsmCredentials(NXCPMessage *pRequest);
649 void sendDCIThresholds(NXCPMessage *request);
650 void addClusterNode(NXCPMessage *request);
651 void findNodeConnection(NXCPMessage *request);
652 void findMacAddress(NXCPMessage *request);
653 void findIpAddress(NXCPMessage *request);
654 void sendLibraryImage(NXCPMessage *request);
655 void updateLibraryImage(NXCPMessage *request);
656 void listLibraryImages(NXCPMessage *request);
657 void deleteLibraryImage(NXCPMessage *request);
658 void executeServerCommand(NXCPMessage *request);
659 void uploadFileToAgent(NXCPMessage *request);
660 void listServerFileStore(NXCPMessage *request);
661 void processConsoleCommand(NXCPMessage *msg);
662 void openConsole(UINT32 rqId);
663 void closeConsole(UINT32 rqId);
664 void getVlans(NXCPMessage *msg);
665 void receiveFile(NXCPMessage *request);
666 void deleteFile(NXCPMessage *request);
667 void getNetworkPath(NXCPMessage *request);
668 void getNodeComponents(NXCPMessage *request);
669 void getNodeSoftware(NXCPMessage *request);
670 void getWinPerfObjects(NXCPMessage *request);
671 void listMappingTables(NXCPMessage *request);
672 void getMappingTable(NXCPMessage *request);
673 void updateMappingTable(NXCPMessage *request);
674 void deleteMappingTable(NXCPMessage *request);
675 void getWirelessStations(NXCPMessage *request);
676 void getSummaryTables(UINT32 rqId);
677 void getSummaryTableDetails(NXCPMessage *request);
678 void modifySummaryTable(NXCPMessage *request);
679 void deleteSummaryTable(NXCPMessage *request);
680 void querySummaryTable(NXCPMessage *request);
681 void queryAdHocSummaryTable(NXCPMessage *request);
682 void forwardToReportingServer(NXCPMessage *request);
683 void getSubnetAddressMap(NXCPMessage *request);
684 void getEffectiveRights(NXCPMessage *request);
685 void fileManagerControl(NXCPMessage *request);
686 void uploadUserFileToAgent(NXCPMessage *request);
687 void getSwitchForwardingDatabase(NXCPMessage *request);
688 void getRoutingTable(NXCPMessage *request);
689 void getLocationHistory(NXCPMessage *request);
690 void getScreenshot(NXCPMessage *request);
691 void executeScript(NXCPMessage *request);
692
693 public:
694 ClientSession(SOCKET hSocket, struct sockaddr *addr);
695 ~ClientSession();
696
697 void incRefCount() { m_dwRefCount++; }
698 void decRefCount() { if (m_dwRefCount > 0) m_dwRefCount--; }
699
700 void run();
701
702 void postMessage(NXCPMessage *pMsg) { m_pSendQueue->put(pMsg->createMessage()); }
703 void sendMessage(NXCPMessage *pMsg);
704 void sendRawMessage(NXCP_MESSAGE *pMsg);
705 void sendPollerMsg(UINT32 dwRqId, const TCHAR *pszMsg);
706 BOOL sendFile(const TCHAR *file, UINT32 dwRqId, long offset);
707
708 int getId() { return m_id; }
709 void setId(int id) { if (m_id == -1) m_id = id; }
710 int getState() { return m_state; }
711 const TCHAR *getUserName() { return m_szUserName; }
712 const TCHAR *getClientInfo() { return m_szClientInfo; }
713 const TCHAR *getWorkstation() { return m_workstation; }
714 const TCHAR *getWebServerAddress() { return m_webServerAddress; }
715 UINT32 getUserId() { return m_dwUserId; }
716 UINT64 getSystemRights() { return m_dwSystemAccess; }
717 UINT32 getFlags() { return m_dwFlags; }
718 bool isAuthenticated() { return (m_dwFlags & CSF_AUTHENTICATED) ? true : false; }
719 bool isTerminated() { return (m_dwFlags & CSF_TERMINATED) ? true : false; }
720 bool isConsoleOpen() { return (m_dwFlags & CSF_CONSOLE_OPEN) ? true : false; }
721 bool isSubscribed(UINT32 dwChannel) { return (m_dwActiveChannels & dwChannel) ? true : false; }
722 WORD getCurrentCmd() { return m_wCurrentCmd; }
723 int getCipher() { return (m_pCtx == NULL) ? -1 : m_pCtx->getCipher(); }
724 int getClientType() { return m_clientType; }
725 time_t getLoginTime() { return m_loginTime; }
726
727 bool checkSysAccessRights(UINT64 requiredAccess)
728 {
729 return (m_dwUserId == 0) ? true :
730 ((requiredAccess & m_dwSystemAccess) == requiredAccess);
731 }
732
733 void setCustomLock(UINT32 bit, bool value)
734 {
735 if (value)
736 m_dwFlags |= (bit & 0xFF000000);
737 else
738 m_dwFlags &= ~(bit & 0xFF000000);
739 }
740
741 void kill();
742 void notify(UINT32 dwCode, UINT32 dwData = 0);
743
744 void queueUpdate(UPDATE_INFO *pUpdate) { m_pUpdateQueue->put(pUpdate); }
745 void onNewEvent(Event *pEvent);
746 void onSyslogMessage(NX_SYSLOG_RECORD *pRec);
747 void onNewSNMPTrap(NXCPMessage *pMsg);
748 void onObjectChange(NetObj *pObject);
749 void onUserDBUpdate(int code, UINT32 id, UserDatabaseObject *user);
750 void onAlarmUpdate(UINT32 dwCode, NXC_ALARM *pAlarm);
751 void onActionDBUpdate(UINT32 dwCode, NXC_ACTION *pAction);
752 void onSituationChange(NXCPMessage *msg);
753 void onLibraryImageChange(uuid_t *guid, bool removed = false);
754 };
755
756 /**
757 * Delayed SQL request
758 */
759 typedef struct
760 {
761 TCHAR *query;
762 int bindCount;
763 BYTE *sqlTypes;
764 TCHAR *bindings[1]; /* actual size determined by bindCount field */
765 } DELAYED_SQL_REQUEST;
766
767 /**
768 * Delayed request for idata_ INSERT
769 */
770 typedef struct
771 {
772 time_t timestamp;
773 UINT32 nodeId;
774 UINT32 dciId;
775 TCHAR value[MAX_RESULT_LENGTH];
776 } DELAYED_IDATA_INSERT;
777
778 /**
779 * Delayed request for raw_dci_values UPDATE
780 */
781 typedef struct
782 {
783 time_t timestamp;
784 UINT32 dciId;
785 TCHAR rawValue[MAX_RESULT_LENGTH];
786 TCHAR transformedValue[MAX_RESULT_LENGTH];
787 } DELAYED_RAW_DATA_UPDATE;
788
789 /**
790 * Graph ACL entry
791 */
792 struct GRAPH_ACL_ENTRY
793 {
794 UINT32 dwGraphId;
795 UINT32 dwUserId;
796 UINT32 dwAccess;
797 };
798
799 /**
800 * Information about graph with name existence and it's ID.
801 */
802 struct GRAPH_ACL_AND_ID
803 {
804 UINT32 graphId;
805 UINT32 status;
806 };
807
808 /**
809 * Functions
810 */
811 bool NXCORE_EXPORTABLE ConfigReadStr(const TCHAR *szVar, TCHAR *szBuffer, int iBufSize, const TCHAR *szDefault);
812 #ifdef UNICODE
813 bool NXCORE_EXPORTABLE ConfigReadStrA(const WCHAR *szVar, char *szBuffer, int iBufSize, const char *szDefault);
814 #else
815 #define ConfigReadStrA ConfigReadStr
816 #endif
817 bool NXCORE_EXPORTABLE ConfigReadStrUTF8(const TCHAR *szVar, char *szBuffer, int iBufSize, const char *szDefault);
818 int NXCORE_EXPORTABLE ConfigReadInt(const TCHAR *szVar, int iDefault);
819 UINT32 NXCORE_EXPORTABLE ConfigReadULong(const TCHAR *szVar, UINT32 dwDefault);
820 bool NXCORE_EXPORTABLE ConfigReadByteArray(const TCHAR *pszVar, int *pnArray, int nSize, int nDefault);
821 bool NXCORE_EXPORTABLE ConfigWriteStr(const TCHAR *szVar, const TCHAR *szValue, bool bCreate, bool isVisible = true, bool needRestart = false);
822 bool NXCORE_EXPORTABLE ConfigWriteInt(const TCHAR *szVar, int iValue, bool bCreate, bool isVisible = true, bool needRestart = false);
823 bool NXCORE_EXPORTABLE ConfigWriteULong(const TCHAR *szVar, UINT32 dwValue, bool bCreate, bool isVisible = true, bool needRestart = false);
824 bool NXCORE_EXPORTABLE ConfigWriteByteArray(const TCHAR *pszVar, int *pnArray, int nSize, bool bCreate, bool isVisible = true, bool needRestart = false);
825 TCHAR NXCORE_EXPORTABLE *ConfigReadCLOB(const TCHAR *var, const TCHAR *defValue);
826 bool NXCORE_EXPORTABLE ConfigWriteCLOB(const TCHAR *var, const TCHAR *value, bool bCreate);
827 bool NXCORE_EXPORTABLE ConfigDelete(const TCHAR *name);
828
829 bool NXCORE_EXPORTABLE MetaDataReadStr(const TCHAR *szVar, TCHAR *szBuffer, int iBufSize, const TCHAR *szDefault);
830 INT32 NXCORE_EXPORTABLE MetaDataReadInt(const TCHAR *var, UINT32 defaultValue);
831 bool NXCORE_EXPORTABLE MetaDataWriteStr(const TCHAR *varName, const TCHAR *value);
832
833 bool NXCORE_EXPORTABLE LoadConfig();
834
835 void NXCORE_EXPORTABLE Shutdown();
836 void NXCORE_EXPORTABLE FastShutdown();
837 BOOL NXCORE_EXPORTABLE Initialize();
838 THREAD_RESULT NXCORE_EXPORTABLE THREAD_CALL Main(void *);
839 void NXCORE_EXPORTABLE ShutdownDB();
840 void InitiateShutdown();
841
842 bool NXCORE_EXPORTABLE SleepAndCheckForShutdown(int iSeconds);
843
844 void ConsolePrintf(CONSOLE_CTX pCtx, const TCHAR *pszFormat, ...)
845 #if !defined(UNICODE) && (defined(__GNUC__) || defined(__clang__))
846 __attribute__ ((format(printf, 2, 3)))
847 #endif
848 ;
849 void ConsoleWrite(CONSOLE_CTX pCtx, const TCHAR *text);
850 int ProcessConsoleCommand(const TCHAR *pszCmdLine, CONSOLE_CTX pCtx);
851
852 void SaveObjects(DB_HANDLE hdb);
853 void NXCORE_EXPORTABLE ObjectTransactionStart();
854 void NXCORE_EXPORTABLE ObjectTransactionEnd();
855
856 void NXCORE_EXPORTABLE QueueSQLRequest(const TCHAR *query);
857 void NXCORE_EXPORTABLE QueueSQLRequest(const TCHAR *query, int bindCount, int *sqlTypes, const TCHAR **values);
858 void QueueIDataInsert(time_t timestamp, UINT32 nodeId, UINT32 dciId, const TCHAR *value);
859 void QueueRawDciDataUpdate(time_t timestamp, UINT32 dciId, const TCHAR *rawValue, const TCHAR *transformedValue);
860 void StartDBWriter();
861 void StopDBWriter();
862
863 void PerfDataStorageRequest(DCItem *dci, time_t timestamp, const TCHAR *value);
864 void PerfDataStorageRequest(DCTable *dci, time_t timestamp, Table *value);
865
866 void DecodeSQLStringAndSetVariable(NXCPMessage *pMsg, UINT32 dwVarId, TCHAR *pszStr);
867
868 SNMP_SecurityContext *SnmpCheckCommSettings(SNMP_Transport *pTransport, INT16 *version, SNMP_SecurityContext *originalContext, StringList *customTestOids);
869 void StrToMac(const TCHAR *pszStr, BYTE *pBuffer);
870
871 void InitLocalNetInfo();
872
873 ARP_CACHE *GetLocalArpCache();
874 ARP_CACHE *SnmpGetArpCache(UINT32 dwVersion, SNMP_Transport *pTransport);
875
876 InterfaceList *GetLocalInterfaceList();
877
878 ROUTING_TABLE *SnmpGetRoutingTable(UINT32 dwVersion, SNMP_Transport *pTransport);
879
880 void LoadNetworkDeviceDrivers();
881 NetworkDeviceDriver *FindDriverForNode(Node *node, SNMP_Transport *pTransport);
882 NetworkDeviceDriver *FindDriverByName(const TCHAR *name);
883 void AddDriverSpecificOids(StringList *list);
884
885 void WatchdogInit();
886 UINT32 WatchdogAddThread(const TCHAR *szName, time_t tNotifyInterval);
887 void WatchdogNotify(UINT32 dwId);
888 void WatchdogPrintStatus(CONSOLE_CTX pCtx);
889
890 void CheckForMgmtNode();
891 Node NXCORE_EXPORTABLE *PollNewNode(const InetAddress& ipAddr, UINT32 dwCreationFlags, WORD agentPort,
892 WORD snmpPort, const TCHAR *pszName, UINT32 dwProxyNode, UINT32 dwSNMPProxy, Cluster *pCluster,
893 UINT32 zoneId, bool doConfPoll, bool discoveredNode);
894
895 void NXCORE_EXPORTABLE EnumerateClientSessions(void (*pHandler)(ClientSession *, void *), void *pArg);
896 void NXCORE_EXPORTABLE NotifyClientSessions(UINT32 dwCode, UINT32 dwData);
897 void NXCORE_EXPORTABLE NotifyClientGraphUpdate(NXCPMessage *update, UINT32 graphId);
898 int GetSessionCount(bool withRoot = true);
899 bool IsLoggedIn(UINT32 dwUserId);
900 bool NXCORE_EXPORTABLE KillClientSession(int id);
901
902 void GetSysInfoStr(TCHAR *pszBuffer, int nMaxSize);
903 InetAddress GetLocalIpAddr();
904 TCHAR *GetLocalHostName(TCHAR *buffer, size_t bufSize);
905
906 BOOL ExecCommand(TCHAR *pszCommand);
907 BOOL SendMagicPacket(UINT32 dwIpAddr, BYTE *pbMacAddr, int iNumPackets);
908
909 BOOL InitIdTable();
910 UINT32 CreateUniqueId(int iGroup);
911 QWORD CreateUniqueEventId();
912 void SaveCurrentFreeId();
913
914 void InitMailer();
915 void ShutdownMailer();
916 void NXCORE_EXPORTABLE PostMail(const TCHAR *pszRcpt, const TCHAR *pszSubject, const TCHAR *pszText);
917
918 void InitSMSSender();
919 void ShutdownSMSSender();
920 void NXCORE_EXPORTABLE PostSMS(const TCHAR *pszRcpt, const TCHAR *pszText);
921
922 void InitTraps();
923 void SendTrapsToClient(ClientSession *pSession, UINT32 dwRqId);
924 void CreateTrapCfgMessage(NXCPMessage &msg);
925 UINT32 CreateNewTrap(UINT32 *pdwTrapId);
926 UINT32 CreateNewTrap(NXC_TRAP_CFG_ENTRY *pTrap);
927 UINT32 UpdateTrapFromMsg(NXCPMessage *pMsg);
928 UINT32 DeleteTrap(UINT32 dwId);
929 void CreateTrapExportRecord(String &xml, UINT32 id);
930
931 BOOL IsTableTool(UINT32 dwToolId);
932 BOOL CheckObjectToolAccess(UINT32 dwToolId, UINT32 dwUserId);
933 UINT32 ExecuteTableTool(UINT32 dwToolId, Node *pNode, UINT32 dwRqId, ClientSession *pSession);
934 UINT32 DeleteObjectToolFromDB(UINT32 dwToolId);
935 UINT32 ChangeObjectToolStatus(UINT32 toolId, bool enabled);
936 UINT32 UpdateObjectToolFromMessage(NXCPMessage *pMsg);
937 void CreateObjectToolExportRecord(String &xml, UINT32 id);
938 bool ImportObjectTool(ConfigEntry *config);
939
940 UINT32 ModifySummaryTable(NXCPMessage *msg, LONG *newId);
941 UINT32 DeleteSummaryTable(LONG tableId);
942 Table *QuerySummaryTable(LONG tableId, SummaryTable *adHocDefinition, UINT32 baseObjectId, UINT32 userId, UINT32 *rcc);
943 bool CreateSummaryTableExportRecord(INT32 id, String &xml);
944 bool ImportSummaryTable(ConfigEntry *config);
945
946 void CreateMessageFromSyslogMsg(NXCPMessage *pMsg, NX_SYSLOG_RECORD *pRec);
947 void ReinitializeSyslogParser();
948
949 void EscapeString(String &str);
950
951 void InitAuditLog();
952 void NXCORE_EXPORTABLE WriteAuditLog(const TCHAR *subsys, BOOL isSuccess, UINT32 userId,
953 const TCHAR *workstation, int sessionId, UINT32 objectId,
954 const TCHAR *format, ...);
955
956 bool ValidateConfig(Config *config, UINT32 flags, TCHAR *errorText, int errorTextLen);
957 UINT32 ImportConfig(Config *config, UINT32 flags);
958
959 #ifdef _WITH_ENCRYPTION
960 X509 *CertificateFromLoginMessage(NXCPMessage *pMsg);
961 BOOL ValidateUserCertificate(X509 *pCert, const TCHAR *pszLogin, BYTE *pChallenge,
962 BYTE *pSignature, UINT32 dwSigLen, int nMappingMethod,
963 const TCHAR *pszMappingData);
964 void ReloadCertificates();
965 #endif
966
967 #ifndef _WIN32
968 THREAD_RESULT NXCORE_EXPORTABLE THREAD_CALL SignalHandler(void *);
969 #endif /* not _WIN32 */
970
971 void DbgTestRWLock(RWLOCK hLock, const TCHAR *szName, CONSOLE_CTX console);
972 void DumpClientSessions(CONSOLE_CTX console);
973 void DumpMobileDeviceSessions(CONSOLE_CTX console);
974 void ShowServerStats(CONSOLE_CTX console);
975 void ShowQueueStats(CONSOLE_CTX console, Queue *pQueue, const TCHAR *pszName);
976 void ShowThreadPool(CONSOLE_CTX console, ThreadPool *p);
977 void DumpProcess(CONSOLE_CTX console);
978
979 GRAPH_ACL_ENTRY *LoadGraphACL(DB_HANDLE hdb, UINT32 graphId, int *pnACLSize);
980 BOOL CheckGraphAccess(GRAPH_ACL_ENTRY *pACL, int nACLSize, UINT32 graphId, UINT32 graphUserId, UINT32 graphDesiredAccess);
981 UINT32 GetGraphAccessCheckResult(UINT32 graphId, UINT32 graphUserId);
982 GRAPH_ACL_AND_ID IsGraphNameExists(const TCHAR *graphName);
983
984 #if XMPP_SUPPORTED
985 bool SendXMPPMessage(const TCHAR *rcpt, const TCHAR *message);
986 #endif
987
988 /**
989 * File monitoring
990 */
991 struct MONITORED_FILE
992 {
993 TCHAR fileName[MAX_PATH];
994 ClientSession *session;
995 UINT32 nodeID;
996 };
997
998 class FileMonitoringList
999 {
1000 private:
1001 MUTEX m_mutex;
1002 ObjectArray<MONITORED_FILE> m_monitoredFiles;
1003 MONITORED_FILE* m_monitoredFile;
1004
1005 public:
1006 FileMonitoringList();
1007 ~FileMonitoringList();
1008 void addMonitoringFile(MONITORED_FILE *fileForAdd);
1009 bool checkDuplicate(MONITORED_FILE *fileForAdd);
1010 ObjectArray<ClientSession>* findClientByFNameAndNodeID(const TCHAR *fileName, UINT32 nodeID);
1011 bool removeMonitoringFile(MONITORED_FILE *fileForRemove);
1012 void removeDisconectedNode(UINT32 nodeId);
1013
1014 private:
1015 void lock();
1016 void unlock();
1017 };
1018
1019 /**
1020 * Global variables
1021 */
1022 extern TCHAR NXCORE_EXPORTABLE g_szConfigFile[];
1023 extern TCHAR NXCORE_EXPORTABLE g_szLogFile[];
1024 extern UINT32 g_dwLogRotationMode;
1025 extern UINT32 g_dwMaxLogSize;
1026 extern UINT32 g_dwLogHistorySize;
1027 extern TCHAR g_szDailyLogFileSuffix[64];
1028 extern TCHAR NXCORE_EXPORTABLE g_szDumpDir[];
1029 extern TCHAR NXCORE_EXPORTABLE g_szListenAddress[];
1030 #ifndef _WIN32
1031 extern TCHAR NXCORE_EXPORTABLE g_szPIDFile[];
1032 #endif
1033 extern TCHAR NXCORE_EXPORTABLE g_netxmsdDataDir[];
1034 extern TCHAR NXCORE_EXPORTABLE g_netxmsdLibDir[];
1035 extern UINT32 NXCORE_EXPORTABLE g_processAffinityMask;
1036 extern UINT64 g_serverId;
1037 extern RSA *g_pServerKey;
1038 extern UINT32 g_icmpPingSize;
1039 extern UINT32 g_icmpPingTimeout;
1040 extern UINT32 g_auditFlags;
1041 extern time_t g_serverStartTime;
1042 extern UINT32 g_lockTimeout;
1043 extern UINT32 g_agentCommandTimeout;
1044 extern UINT32 g_thresholdRepeatInterval;
1045 extern int g_requiredPolls;
1046 extern UINT32 g_slmPollingInterval;
1047
1048 extern TCHAR g_szDbDriver[];
1049 extern TCHAR g_szDbDrvParams[];
1050 extern TCHAR g_szDbServer[];
1051 extern TCHAR g_szDbLogin[];
1052 extern TCHAR g_szDbPassword[];
1053 extern TCHAR g_szDbName[];
1054 extern TCHAR g_szDbSchema[];
1055 extern DB_DRIVER g_dbDriver;
1056 extern DB_HANDLE NXCORE_EXPORTABLE g_hCoreDB;
1057 extern Queue *g_dbWriterQueue;
1058 extern Queue *g_dciDataWriterQueue;
1059 extern Queue *g_dciRawDataWriterQueue;
1060
1061 extern int NXCORE_EXPORTABLE g_dbSyntax;
1062 extern FileMonitoringList g_monitoringList;
1063
1064 extern ThreadPool *g_mainThreadPool;
1065
1066 #endif /* _nms_core_h_ */