Fixed MacAddress toString function for different formats; Introduced even more MacAdd...
[public/netxms.git] / include / nms_common.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 Lesser General Public License as published by
7 ** the Free Software Foundation; either version 3 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 Lesser 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_common.h
20 **
21 **/
22
23 #ifndef _nms_common_h_
24 #define _nms_common_h_
25
26 #ifdef WIN32
27 #ifndef _WIN32
28 #define _WIN32
29 #endif
30 #endif
31
32 #if !defined(_WIN32) && !defined(UNDER_CE)
33
34 #include <config.h>
35 #if defined(WITH_OPENSSL) || defined(WITH_COMMONCRYPTO)
36 #define _WITH_ENCRYPTION 1
37 #endif
38
39 #else /* _WIN32 */
40
41 #ifndef UNDER_CE
42 #define _WITH_ENCRYPTION 1
43 #define WITH_OPENSSL 1
44 #define WITH_LDAP 1
45 #if !defined(WINDOWS_ONLY) && !defined(_CRT_SECURE_NO_DEPRECATE)
46 #define _CRT_SECURE_NO_DEPRECATE
47 #endif
48 #endif
49
50 #endif /* _WIN32 */
51
52 #if HAVE_JEMALLOC_JEMALLOC_H
53 #include <jemalloc/jemalloc.h>
54 #endif
55
56 #ifdef HAVE_STDARG_H
57 #include <stdarg.h>
58 #endif
59
60 #include <unicode.h>
61
62 #include <stdio.h>
63 #include <string.h>
64 #include <limits.h>
65
66 #include <netxms-version.h>
67
68 #if HAVE_WIDEC_H
69 #include <widec.h>
70 #endif /* HAVE_WIDEC */
71
72 /**
73 * Define __64BIT__ if compiling for 64bit platform with Visual C++
74 */
75 #if defined(_M_X64) || defined(_M_IA64) || defined(__LP64__) || defined(__PPC64__) || defined(__x86_64__)
76 #ifndef __64BIT__
77 #define __64BIT__
78 #endif
79 #endif
80
81 /**
82 * Wrappers for 64-bit integer constants
83 */
84 #if defined(__GNUC__) || defined(__HP_aCC) || defined(__IBMC__) || defined(__IBMCPP__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
85 #define _LL(x) (x ## LL)
86 #define _ULL(x) (x ## ULL)
87 #elif defined(_MSC_VER)
88 #define _LL(x) (x ## i64)
89 #define _ULL(x) (x ## ui64)
90 #else
91 #define _LL(x) (x)
92 #define _ULL(x) (x)
93 #endif
94
95 /**
96 * Common constants
97 */
98 #define MAX_SECRET_LENGTH 64
99 #define MAX_DB_STRING 256
100 #define MAX_PARAM_NAME 256
101 #define MAX_CONFIG_VALUE 2000
102 #define MAX_COLUMN_NAME 64
103 #define MAX_DNS_NAME 256
104 #define MAX_HELPDESK_REF_LEN 64
105 #define MAX_PASSWORD 256
106 #define MAX_SSH_LOGIN_LEN 64
107 #define MAX_SSH_PASSWORD_LEN 64
108 #define GROUP_FLAG ((UINT32)0x80000000)
109
110 #define NETXMS_MAX_CIPHERS 6
111 #define NETXMS_RSA_KEYLEN 2048
112
113 #ifndef LLONG_MAX
114 #define LLONG_MAX _LL(9223372036854775807)
115 #endif
116
117 #ifndef LLONG_MIN
118 #define LLONG_MIN (-LLONG_MAX - 1)
119 #endif
120
121 #ifndef ULLONG_MAX
122 #define ULLONG_MAX _ULL(18446744073709551615)
123 #endif
124
125 #ifndef EVENTLOG_DEBUG_TYPE
126 #define EVENTLOG_DEBUG_TYPE 0x0080
127 #endif
128
129 #define INVALID_INDEX 0xFFFFFFFF
130 #define MD5_DIGEST_SIZE 16
131 #define SHA1_DIGEST_SIZE 20
132 #define SHA256_DIGEST_SIZE 32
133
134 #define FILE_BUFFER_SIZE 32768
135
136 /**
137 * Compatibility defines for C sources
138 */
139 #if !defined(__cplusplus) && !defined(CORTEX) && !HAVE_BOOL
140 typedef int bool;
141 #endif
142
143 /**
144 * Oracle Pro*C compatibility
145 */
146 #ifdef ORA_PROC
147 #undef BYTE
148 #undef DWORD
149 #endif
150
151 /**
152 * Java class path separator character
153 */
154 #ifdef _WIN32
155 #define JAVA_CLASSPATH_SEPARATOR _T(';')
156 #else
157 #define JAVA_CLASSPATH_SEPARATOR _T(':')
158 #endif
159
160
161 /***** Platform dependent includes and defines *****/
162
163 #if defined(_WIN32) || defined(UNDER_CE)
164
165 /********** WINDOWS ********************/
166
167 #ifdef _MSC_FULL_VER
168 #define __BUILD_VERSION_STRING(s,v) s v
169 #define __STR_NX(x) #x
170 #define __STR(x) __STR_NX(x)
171 #define CPP_COMPILER_VERSION __STR(__BUILD_VERSION_STRING(Microsoft C/C++ Optimizing Compiler Version,_MSC_FULL_VER))
172 #endif
173
174 #ifndef _WIN32_WINNT
175 #define _WIN32_WINNT 0x0501
176 #endif
177
178 #define WITH_IPV6 1
179
180 #define USE_BUNDLED_LIBTRE 1
181 #define USE_BUNDLED_GETOPT 1
182
183 #define SAFE_FGETWS_WITH_POPEN 1
184
185 #define FS_PATH_SEPARATOR _T("\\")
186 #define FS_PATH_SEPARATOR_A "\\"
187 #define FS_PATH_SEPARATOR_W L"\\"
188 #define FS_PATH_SEPARATOR_CHAR _T('\\')
189
190 #define WEXITSTATUS(x) (x)
191
192 #if _MSC_VER > 1300
193 #define HAVE_SCPRINTF 1
194 #define HAVE_VSCPRINTF 1
195 #define HAVE_SCWPRINTF 1
196 #define HAVE_VSCWPRINTF 1
197 #endif
198
199 #define HAVE_SNPRINTF 1
200 #define HAVE_VSNPRINTF 1
201
202 #define HAVE_GETADDRINFO 1
203
204 #define HAVE_STDARG_H 1
205
206 #define HAVE_ALLOCA 1
207
208 #define HAVE_WCSLEN 1
209 #define HAVE_WCSNCPY 1
210 #define HAVE_WCSDUP 1
211 #define HAVE_WUTIME 1
212
213 #ifndef va_copy
214 #define va_copy(x,y) (x = y)
215 #endif
216 #define HAVE_DECL_VA_COPY 1
217
218 #define HAVE_LIBCURL 1
219
220 #define HAVE_DIRENT_D_TYPE 1
221
222 #include <winsock2.h>
223 #include <windows.h>
224 #include <ws2tcpip.h>
225 #include <stdlib.h>
226 #include <malloc.h>
227
228 #ifndef UNDER_CE
229 #include <sys/stat.h>
230 #include <sys/utime.h>
231 #include <process.h>
232 #include <io.h>
233 #include <fcntl.h>
234 #include <direct.h>
235 #endif
236
237 #ifndef S_IRUSR
238 # define S_IRUSR 0400
239 #endif
240 #ifndef S_IWUSR
241 # define S_IWUSR 0200
242 #endif
243
244 #define snprintf _snprintf
245 #define vsnprintf _vsnprintf
246 #define snwprintf _snwprintf
247 #define vsnwprintf _vsnwprintf
248 #define scprintf _scprintf
249 #define vscprintf _vscprintf
250 #define scwprintf _scwprintf
251 #define vscwprintf _vscwprintf
252 #define popen _popen
253 #define pclose _pclose
254 #define stricmp _stricmp
255 #define strnicmp _strnicmp
256 #define wcsicmp _wcsicmp
257 #define wcsnicmp _wcsnicmp
258 #define strlwr(s) _strlwr(s)
259 #define strupr(s) _strupr(s)
260 #define putenv(s) _putenv(s)
261 #define fileno(f) _fileno(f)
262 #define chdir(p) _chdir(p)
263 #define mkdir(p,m) _mkdir(p,m)
264 #define lseek(f,o,w) _lseek(f,o,w)
265 #define unlink(x) _unlink(x)
266
267 typedef UINT64 QWORD; // for compatibility
268 typedef int socklen_t;
269 typedef long pid_t;
270 typedef LONG ssize_t;
271
272 typedef signed __int8 int8_t;
273 typedef signed __int16 int16_t;
274 typedef signed __int32 int32_t;
275 typedef signed __int64 int64_t;
276 typedef unsigned __int8 uint8_t;
277 typedef unsigned __int16 uint16_t;
278 typedef unsigned __int32 uint32_t;
279 typedef unsigned __int64 uint64_t;
280
281 #define INT64_FMT _T("%I64d")
282 #define INT64_FMTA "%I64d"
283 #define INT64_FMTW L"%I64d"
284 #define UINT64_FMT _T("%I64u")
285 #define UINT64_FMTA "%I64u"
286 #define UINT64_FMTW L"%I64u"
287 #define UINT64X_FMT(m) _T("%") m _T("I64X")
288 #if defined(__64BIT__) || (_MSC_VER > 1300)
289 #define TIME_T_FMT _T("%I64u")
290 #define TIME_T_FCAST(x) ((UINT64)(x))
291 #else
292 #define TIME_T_FMT _T("%u")
293 #define TIME_T_FCAST(x) ((UINT32)(x))
294 #endif
295
296 #ifndef __clang__
297
298 #define HAVE_DECL_BSWAP_16 1
299 #define HAVE_DECL_BSWAP_32 1
300 #define HAVE_DECL_BSWAP_64 1
301
302 #define bswap_16(n) _byteswap_ushort(n)
303 #define bswap_32(n) _byteswap_ulong(n)
304 #define bswap_64(n) _byteswap_uint64(n)
305
306 #endif
307
308 // Socket compatibility
309 #define SHUT_RD 0
310 #define SHUT_WR 1
311 #define SHUT_RDWR 2
312
313 #define SetSocketReuseFlag(s) { \
314 BOOL val = TRUE; \
315 setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&val, sizeof(BOOL)); \
316 }
317 #define SetSocketExclusiveAddrUse(s) { \
318 BOOL val = TRUE; \
319 setsockopt(s, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (char *)&val, sizeof(BOOL)); \
320 }
321 #define SELECT_NFDS(x) ((int)(x))
322 #define SetSocketNonBlocking(s) { \
323 u_long one = 1; \
324 ioctlsocket(s, FIONBIO, &one); \
325 }
326 #define SetSocketBlocking(s) { \
327 u_long zero = 0; \
328 ioctlsocket(s, FIONBIO, &zero); \
329 }
330 #define SetSocketNoDelay(s) { \
331 BOOL val = TRUE; \
332 setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(BOOL)); \
333 }
334 #define SetSocketBroadcast(s) { \
335 BOOL val = TRUE; \
336 setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&val, sizeof(BOOL)); \
337 }
338
339 #ifdef UNDER_CE
340 #define O_RDONLY 0x0004
341 #define O_WRONLY 0x0001
342 #define O_RDWR 0x0002
343 #define O_CREAT 0x0100
344 #define O_EXCL 0x0200
345 #define O_TRUNC 0x0800
346 #endif
347
348 #if !defined(UNDER_CE)
349 #define HAVE_LIBEXPAT 1
350 #endif
351
352 #define XMPP_SUPPORTED 1
353
354 #define HAVE_LOCALE_H 1
355 #define HAVE_SETLOCALE 1
356
357 // Use Win32 API instead of msvcrt for memory allocation
358 #ifdef USE_WIN32_HEAP
359
360 #define malloc(n) HeapAlloc(GetProcessHeap(), 0, n)
361 #define realloc(p, n) (((p) == NULL) ? HeapAlloc(GetProcessHeap(), 0, n) : HeapReAlloc(GetProcessHeap(), 0, p, n))
362 #define free(p) HeapFree(GetProcessHeap(), 0, p)
363 #define _tcsdup(s) nx__tcsdup(s)
364 #define wcsdup(s) nx_wcsdup(s)
365
366 #undef _tcsdup
367 #ifdef UNICODE
368 #define _tcsdup nx_wcsdup
369 #else
370 #define _tcsdup nx_strdup
371 #endif
372
373 #else
374
375 #define strdup _strdup
376 #define wcsdup _wcsdup
377
378 #endif
379
380 #else /* not _WIN32 */
381
382 /*********** UNIX *********************/
383
384 #ifndef PREFIX
385 #ifdef UNICODE
386 #define PREFIX L"/usr/local"
387 #else
388 #define PREFIX "/usr/local"
389 #endif
390 #warning Installation prefix not defined, defaulting to /usr/local
391 #endif
392
393 #if HAVE_STDBOOL_H
394 #include <stdbool.h>
395 #endif
396
397 #if HAVE_ALLOCA_H
398 #include <alloca.h>
399 #endif
400
401 #if HAVE_WCHAR_H
402 #include <wchar.h>
403 #endif
404
405 #if HAVE_WCTYPE_H
406 #include <wctype.h>
407 #endif
408
409 // Fix for wcs* functions visibility in Solaris 11
410 #if defined(__sun) && (__cplusplus >= 199711L)
411 #if HAVE_WCSDUP
412 using std::wcsdup;
413 #endif
414 #if HAVE_WCSCASECMP
415 using std::wcscasecmp;
416 #endif
417 #if HAVE_WCSNCASECMP
418 using std::wcsncasecmp;
419 #endif
420 #endif
421
422 #include <errno.h>
423
424 #define FS_PATH_SEPARATOR _T("/")
425 #define FS_PATH_SEPARATOR_A "/"
426 #define FS_PATH_SEPARATOR_W L"/"
427 #define FS_PATH_SEPARATOR_CHAR _T('/')
428
429 #if HAVE_UNISTD_H
430 #include <unistd.h>
431 #endif
432
433 #if HAVE_STDLIB_H
434 #include <stdlib.h>
435 #endif
436
437 #if HAVE_SYS_TYPES_H
438 #include <sys/types.h>
439 #endif
440
441 #if HAVE_UTIME_H
442 #include <utime.h>
443 #endif
444
445 #if HAVE_SYS_INT_TYPES_H
446 #include <sys/int_types.h>
447 #endif
448
449 #if HAVE_SYS_STAT_H
450 #include <sys/stat.h>
451 #endif
452
453 #if HAVE_SYS_SOCKET_H
454 #include <sys/socket.h>
455 #endif
456
457 #if HAVE_SYS_SELECT_H
458 #include <sys/select.h>
459 #endif
460
461 #if HAVE_NETINET_IN_H
462 #include <netinet/in.h>
463 #endif
464
465 #if HAVE_NETINET_TCP_H
466 #include <netinet/tcp.h>
467 #endif
468
469 #if HAVE_NET_NH_H
470 #include <net/nh.h>
471 #endif
472
473 #if HAVE_ARPA_INET_H
474 #include <arpa/inet.h>
475 #endif
476
477 #if HAVE_NETDB_H
478 #include <netdb.h>
479 #endif
480
481 #if HAVE_FCNTL_H
482 #include <fcntl.h>
483 #endif
484
485 #include <dirent.h>
486
487 #if _USE_GNU_PTH
488 #include <pth.h>
489 #else
490 #include <pthread.h>
491 #endif
492
493 #ifdef __sun
494 #include <sys/atomic.h>
495 #endif
496
497 #if defined(__HP_aCC) && HAVE_ATOMIC_H
498 #include <atomic.h>
499 #endif
500
501 #ifdef __IBMCPP__
502 #include <builtins.h>
503 #endif
504
505 #ifdef __minix
506 #undef HAVE_ITOA /* Minix has non-compatible itoa() */
507 #undef HAVE_GETHOSTBYNAME2_R
508 #endif
509
510 #include <sys/socket.h>
511 #include <sys/un.h>
512
513 typedef int BOOL;
514 #if (SIZEOF_LONG == 4)
515 #if (SIZEOF_INT == 4)
516 typedef int INT32;
517 typedef unsigned int UINT32;
518 #else
519 typedef long INT32;
520 typedef unsigned long UINT32;
521 #endif
522 #undef __64BIT__
523 #else
524 typedef int INT32;
525 typedef unsigned int UINT32;
526 #ifndef __64BIT__
527 #define __64BIT__
528 #endif
529 #endif
530 typedef unsigned short UINT16;
531 typedef short INT16;
532 typedef unsigned char BYTE;
533 typedef INT32 LONG; // for compatibility
534 typedef UINT32 DWORD; // for compatibility
535 typedef UINT16 WORD; // for compatibility
536 typedef void * HANDLE;
537 typedef void * HMODULE;
538
539 #if !HAVE_MODE_T
540 typedef int mode_t;
541 #endif
542
543 // We have to use long as INT64 on HP-UX - otherwise
544 // there will be compilation errors because of type redefinition in
545 // system includes
546 #ifdef _HPUX
547
548 #ifdef __LP64__
549 typedef long INT64;
550 typedef unsigned long UINT64;
551 #else
552 typedef long long INT64;
553 typedef unsigned long long UINT64;
554 #endif
555
556 #else /* _HPUX */
557
558 #if HAVE_LONG_LONG && (SIZEOF_LONG_LONG == 8)
559 typedef long long INT64;
560 #elif HAVE_INT64_T
561 typedef int64_t INT64;
562 #elif SIZEOF_LONG == 8
563 typedef long INT64;
564 #else
565 #error Target system does not have signed 64bit integer type
566 #endif
567
568 #if HAVE_UNSIGNED_LONG_LONG && (SIZEOF_LONG_LONG == 8)
569 typedef unsigned long long UINT64;
570 #elif HAVE_UINT64_T
571 typedef uint64_t UINT64;
572 #elif HAVE_U_INT64_T
573 typedef u_int64_t UINT64;
574 #elif SIZEOF_LONG == 8
575 typedef unsigned long UINT64;
576 #else
577 #error Target system does not have unsigned 64bit integer type
578 #endif
579
580 #endif /* _HPUX */
581
582 typedef UINT64 QWORD; // for compatibility
583
584 #define INT64_FMT _T("%lld")
585 #define INT64_FMTW L"%lld"
586 #define INT64_FMTA "%lld"
587 #define UINT64_FMT _T("%llu")
588 #define UINT64_FMTW L"%llu"
589 #define UINT64_FMTA "%llu"
590 #define UINT64X_FMT(m) _T("%") m _T("llX")
591 #ifdef __64BIT__
592 #define TIME_T_FMT _T("%llu")
593 #define TIME_T_FCAST(x) ((UINT64)(x))
594 #else
595 #define TIME_T_FMT _T("%u")
596 #define TIME_T_FCAST(x) ((UINT32)(x))
597 #endif
598
599 #ifndef TRUE
600 #define TRUE 1
601 #endif
602 #ifndef FALSE
603 #define FALSE 0
604 #endif
605
606 // Some systems may define true and false which may break overloaded functions
607 #ifdef __cplusplus
608 #undef true
609 #undef false
610 #endif
611
612 #ifndef MAX_PATH
613 #ifdef PATH_MAX
614 #define MAX_PATH PATH_MAX
615 #else
616 #define MAX_PATH 1024
617 #endif
618 #endif
619
620 // Windows compatibility layer for standard C I/O functions
621 #ifdef __cplusplus
622
623 inline int _access(const char *pathname, int mode) { return ::access(pathname, mode); }
624 inline int _open(const char *pathname, int flags) { return ::open(pathname, flags); }
625 inline int _open(const char *pathname, int flags, mode_t mode) { return ::open(pathname, flags, mode); }
626 inline ssize_t _read(int fd, void *buf, size_t count) { return ::read(fd, buf, count); }
627 inline ssize_t _write(int fd, const void *buf, size_t count) { return ::write(fd, buf, count); }
628 inline int _close(int fd) { return ::close(fd); }
629
630 #else
631
632 #define _access(p, m) access((p), (m))
633 #define _open open
634 #define _close(f) close(f)
635 #define _read(f, b, l) read((f), (b), (l))
636 #define _write(f, b, l) write((f), (b), (l))
637 #define _close(f) close(f)
638
639 #endif
640
641 // Socket compatibility
642 typedef int SOCKET;
643
644 #define closesocket(x) _close(x)
645 #define WSAGetLastError() (errno)
646
647 #define WSAEINTR EINTR
648 #define WSAEWOULDBLOCK EWOULDBLOCK
649 #define WSAEINPROGRESS EINPROGRESS
650 #define WSAESHUTDOWN ESHUTDOWN
651 #define INVALID_SOCKET (-1)
652
653 #define SetSocketReuseFlag(sd) { \
654 int nVal = 1; \
655 setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (const void *)&nVal, \
656 (socklen_t)sizeof(nVal)); \
657 }
658
659 #define SetSocketExclusiveAddrUse(s)
660
661 #define SetSocketNonBlocking(s) { \
662 int f = fcntl(s, F_GETFL); \
663 if (f != -1) fcntl(s, F_SETFL, f | O_NONBLOCK); \
664 }
665
666 #define SetSocketNoDelay(s) { \
667 int val = 1; \
668 setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (const void *)&val, sizeof(int)); \
669 }
670
671 #define SetSocketBroadcast(s) { \
672 int val = 1; \
673 setsockopt(s, SOL_SOCKET, SO_BROADCAST, (const void *)&val, sizeof(int)); \
674 }
675
676 #define SELECT_NFDS(x) (x)
677
678 #if !(HAVE_SOCKLEN_T) && !defined(_USE_GNU_PTH)
679 typedef unsigned int socklen_t;
680 #endif
681
682 #ifndef SUN_LEN
683 #define SUN_LEN(su) (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
684 #endif
685
686 // Shared library suffix
687 #ifndef SHLIB_SUFFIX
688 #if defined(_HPUX) && !defined(__64BIT__)
689 #define SHLIB_SUFFIX _T(".sl")
690 #else
691 #define SHLIB_SUFFIX _T(".so")
692 #endif
693 #endif
694
695 typedef struct hostent HOSTENT;
696
697 #if HAVE_DECL___VA_COPY && !HAVE_DECL_VA_COPY
698 #define HAVE_DECL_VA_COPY 1
699 #define va_copy(d,s) __va_copy(d,s)
700 #endif
701
702 #endif /* _WIN32 */
703
704 /**
705 * Value used to indicate invalid pointer where NULL is not appropriate
706 */
707 #ifdef __64BIT__
708 #define INVALID_POINTER_VALUE ((void *)_ULL(0xFFFFFFFFFFFFFFFF))
709 #else
710 #define INVALID_POINTER_VALUE ((void *)0xFFFFFFFF)
711 #endif
712
713 /**
714 * Casting between pointer and 32-bit integer
715 */
716 #ifdef __64BIT__
717 #define CAST_FROM_POINTER(p, t) ((t)((UINT64)(p)))
718 #define CAST_TO_POINTER(v, t) ((t)((UINT64)(v)))
719 #else
720 #define CAST_FROM_POINTER(p, t) ((t)(p))
721 #define CAST_TO_POINTER(v, t) ((t)(v))
722 #endif
723
724 /**
725 * open() flags compatibility
726 */
727 #ifndef O_BINARY
728 #define O_BINARY 0
729 #endif
730
731 /**
732 * Windows-specific structures for non-Windows platforms
733 */
734 #ifndef _WIN32
735
736 typedef struct tagPOINT
737 {
738 int x;
739 int y;
740 } POINT;
741
742 #endif
743
744 /**
745 * Event log severity codes
746 */
747 #ifndef _WIN32
748 #define EVENTLOG_SUCCESS 0x0000
749 #define EVENTLOG_ERROR_TYPE 0x0001
750 #define EVENTLOG_WARNING_TYPE 0x0002
751 #define EVENTLOG_INFORMATION_TYPE 0x0004
752 #define EVENTLOG_AUDIT_SUCCESS 0x0008
753 #define EVENTLOG_AUDIT_FAILURE 0x0010
754 #endif /* _WIN32 */
755
756 #define NXLOG_DEBUG EVENTLOG_DEBUG_TYPE
757 #define NXLOG_INFO EVENTLOG_INFORMATION_TYPE
758 #define NXLOG_WARNING EVENTLOG_WARNING_TYPE
759 #define NXLOG_ERROR EVENTLOG_ERROR_TYPE
760
761 /**
762 * Interface types
763 */
764 #define IFTYPE_OTHER 1
765 #define IFTYPE_REGULAR1822 2
766 #define IFTYPE_HDH1822 3
767 #define IFTYPE_DDN_X25 4
768 #define IFTYPE_RFC877_X25 5
769 #define IFTYPE_ETHERNET_CSMACD 6
770 #define IFTYPE_ISO88023_CSMACD 7
771 #define IFTYPE_ISO88024_TOKENBUS 8
772 #define IFTYPE_ISO88025_TOKENRING 9
773 #define IFTYPE_ISO88026_MAN 10
774 #define IFTYPE_STARLAN 11
775 #define IFTYPE_PROTEON_10MBIT 12
776 #define IFTYPE_PROTEON_80MBIT 13
777 #define IFTYPE_HYPERCHANNEL 14
778 #define IFTYPE_FDDI 15
779 #define IFTYPE_LAPB 16
780 #define IFTYPE_SDLC 17
781 #define IFTYPE_DS1 18
782 #define IFTYPE_E1 19
783 #define IFTYPE_BASIC_ISDN 20
784 #define IFTYPE_PRIMARY_ISDN 21
785 #define IFTYPE_PROP_PTP_SERIAL 22
786 #define IFTYPE_PPP 23
787 #define IFTYPE_SOFTWARE_LOOPBACK 24
788 #define IFTYPE_EON 25
789 #define IFTYPE_ETHERNET_3MBIT 26
790 #define IFTYPE_NSIP 27
791 #define IFTYPE_SLIP 28
792 #define IFTYPE_ULTRA 29
793 #define IFTYPE_DS3 30
794 #define IFTYPE_SMDS 31
795 #define IFTYPE_FRAME_RELAY 32
796 #define IFTYPE_RS232 33
797 #define IFTYPE_PARA 34
798 #define IFTYPE_ARCNET 35
799 #define IFTYPE_ARCNET_PLUS 36
800 #define IFTYPE_ATM 37
801 #define IFTYPE_MIOX25 38
802 #define IFTYPE_SONET 39
803 #define IFTYPE_X25PLE 40
804 #define IFTYPE_ISO88022LLC 41
805 #define IFTYPE_LOCALTALK 42
806 #define IFTYPE_SMDS_DXI 43
807 #define IFTYPE_FRAME_RELAY_SERVICE 44
808 #define IFTYPE_V35 45
809 #define IFTYPE_HSSI 46
810 #define IFTYPE_HIPPI 47
811 #define IFTYPE_MODEM 48
812 #define IFTYPE_AAL5 49
813 #define IFTYPE_SONET_PATH 50
814 #define IFTYPE_SONET_VT 51
815 #define IFTYPE_SMDS_ICIP 52
816 #define IFTYPE_PROP_VIRTUAL 53
817 #define IFTYPE_PROP_MULTIPLEXOR 54
818 #define IFTYPE_IEEE80212 55
819 #define IFTYPE_FIBRECHANNEL 56
820 #define IFTYPE_HIPPIINTERFACE 57
821 #define IFTYPE_FRAME_RELAY_INTERCONNECT 58
822 #define IFTYPE_AFLANE8023 59
823 #define IFTYPE_AFLANE8025 60
824 #define IFTYPE_CCTEMUL 61
825 #define IFTYPE_FAST_ETHERNET 62
826 #define IFTYPE_ISDN 63
827 #define IFTYPE_V11 64
828 #define IFTYPE_V36 65
829 #define IFTYPE_G703_AT64K 66
830 #define IFTYPE_G703_AT2MB 67
831 #define IFTYPE_QLLC 68
832 #define IFTYPE_FASTETHERFX 69
833 #define IFTYPE_CHANNEL 70
834 #define IFTYPE_IEEE80211 71
835 #define IFTYPE_IBM370_PARCHAN 72
836 #define IFTYPE_ESCON 73
837 #define IFTYPE_DLSW 74
838 #define IFTYPE_ISDNS 75
839 #define IFTYPE_ISDNU 76
840 #define IFTYPE_LAPD 77
841 #define IFTYPE_IPSWITCH 78
842 #define IFTYPE_RSRB 79
843 #define IFTYPE_ATMLOGICAL 80
844 #define IFTYPE_DS0 81
845 #define IFTYPE_DS0_BUNDLE 82
846 #define IFTYPE_BSC 83
847 #define IFTYPE_ASYNC 84
848 #define IFTYPE_CNR 85
849 #define IFTYPE_ISO88025DTR 86
850 #define IFTYPE_EPLRS 87
851 #define IFTYPE_ARAP 88
852 #define IFTYPE_PROPCNLS 89
853 #define IFTYPE_HOSTPAD 90
854 #define IFTYPE_TERMPAD 91
855 #define IFTYPE_FRAME_RELAY_MPI 92
856 #define IFTYPE_X213 93
857 #define IFTYPE_ADSL 94
858 #define IFTYPE_RADSL 95
859 #define IFTYPE_SDSL 96
860 #define IFTYPE_VDSL 97
861 #define IFTYPE_ISO88025CRFPINT 98
862 #define IFTYPE_MYRINET 99
863 #define IFTYPE_VOICEEM 100
864 #define IFTYPE_VOICEFXO 101
865 #define IFTYPE_VOICEFXS 102
866 #define IFTYPE_VOICEENCAP 103
867 #define IFTYPE_VOICEOVERIP 104
868 #define IFTYPE_ATMDXI 105
869 #define IFTYPE_ATMFUNI 106
870 #define IFTYPE_ATMIMA 107
871 #define IFTYPE_PPPMULTILINKBUNDLE 108
872 #define IFTYPE_IPOVERCDLC 109
873 #define IFTYPE_IPOVERCLAW 110
874 #define IFTYPE_STACKTOSTACK 111
875 #define IFTYPE_VIRTUAL_IP_ADDRESS 112
876 #define IFTYPE_MPC 113
877 #define IFTYPE_IPOVERATM 114
878 #define IFTYPE_ISO88025FIBER 115
879 #define IFTYPE_TDLC 116
880 #define IFTYPE_GIGABIT_ETHERNET 117
881 #define IFTYPE_HDLC 118
882 #define IFTYPE_LAPF 119
883 #define IFTYPE_V37 120
884 #define IFTYPE_X25MLP 121
885 #define IFTYPE_X25_HUNT_GROUP 122
886 #define IFTYPE_TRANSPHDLC 123
887 #define IFTYPE_INTERLEAVE 124
888 #define IFTYPE_FAST 125
889 #define IFTYPE_IP 126
890 #define IFTYPE_DOCSCABLE_MACLAYER 127
891 #define IFTYPE_DOCSCABLE_DOWNSTREAM 128
892 #define IFTYPE_DOCSCABLE_UPSTREAM 129
893 #define IFTYPE_A12MPPSWITCH 130
894 #define IFTYPE_TUNNEL 131
895 #define IFTYPE_COFFEE 132
896 #define IFTYPE_CES 133
897 #define IFTYPE_ATM_SUBINTERFACE 134
898 #define IFTYPE_L2VLAN 135
899 #define IFTYPE_L3IPVLAN 136
900 #define IFTYPE_L3IPXVLAN 137
901 #define IFTYPE_DIGITAL_POWERLINE 138
902 #define IFTYPE_MEDIAMAIL_OVER_IP 139
903 #define IFTYPE_DTM 140
904 #define IFTYPE_DCN 141
905 #define IFTYPE_IPFORWARD 142
906 #define IFTYPE_MSDSL 143
907 #define IFTYPE_IEEE1394 144
908 #define IFTYPE_GSN 145
909 #define IFTYPE_DVBRCC_MACLAYER 146
910 #define IFTYPE_DVBRCC_DOWNSTREAM 147
911 #define IFTYPE_DVBRCC_UPSTREAM 148
912 #define IFTYPE_ATM_VIRTUAL 149
913 #define IFTYPE_MPLS_TUNNEL 150
914 #define IFTYPE_SRP 151
915 #define IFTYPE_VOICE_OVER_ATM 152
916 #define IFTYPE_VOICE_OVER_FRAME_RELAY 153
917 #define IFTYPE_IDSL 154
918 #define IFTYPE_COMPOSITE_LINK 155
919 #define IFTYPE_SS7_SIGLINK 156
920 #define IFTYPE_PROPWIRELESSP2P 157
921 #define IFTYPE_FRFORWARD 158
922 #define IFTYPE_RFC1483 159
923 #define IFTYPE_USB 160
924 #define IFTYPE_IEEE8023ADLAG 161
925 #define IFTYPE_BGP_POLICY_ACCOUNTING 162
926 #define IFTYPE_FRF16MFR_BUNDLE 163
927 #define IFTYPE_H323_GATEKEEPER 164
928 #define IFTYPE_H323_PROXY 165
929 #define IFTYPE_MPLS 166
930 #define IFTYPE_MFSIGLINK 167
931 #define IFTYPE_HDSL2 168
932 #define IFTYPE_SHDSL 169
933 #define IFTYPE_DS1FDL 170
934 #define IFTYPE_POS 171
935 #define IFTYPE_DVBASI_IN 172
936 #define IFTYPE_DVBASI_OUT 173
937 #define IFTYPE_PLC 174
938 #define IFTYPE_NFAS 175
939 #define IFTYPE_TR008 176
940 #define IFTYPE_GR303RDT 177
941 #define IFTYPE_GR303IDT 178
942 #define IFTYPE_ISUP 179
943 #define IFTYPE_PROPDOCSWIRELESSMACLAYER 180
944 #define IFTYPE_PROPDOCSWIRELESSDOWNSTREAM 181
945 #define IFTYPE_PROPDOCSWIRELESSUPSTREAM 182
946 #define IFTYPE_HIPERLAN2 183
947 #define IFTYPE_PROPBWAP2MP 184
948 #define IFTYPE_SONET_OVERHEAD_CHANNEL 185
949 #define IFTYPE_DW_OVERHEAD_CHANNEL 186
950 #define IFTYPE_AAL2 187
951 #define IFTYPE_RADIOMAC 188
952 #define IFTYPE_ATMRADIO 189
953 #define IFTYPE_IMT 190
954 #define IFTYPE_MVL 191
955 #define IFTYPE_REACHDSL 192
956 #define IFTYPE_FRDLCIENDPT 193
957 #define IFTYPE_ATMVCIENDPT 194
958 #define IFTYPE_OPTICAL_CHANNEL 195
959 #define IFTYPE_OPTICAL_TRANSPORT 196
960 #define IFTYPE_PROPATM 197
961 #define IFTYPE_VOICE_OVER_CABLE 198
962 #define IFTYPE_INFINIBAND 199
963 #define IFTYPE_TELINK 200
964 #define IFTYPE_Q2931 201
965 #define IFTYPE_VIRTUALTG 202
966 #define IFTYPE_SIPTG 203
967 #define IFTYPE_SIPSIG 204
968 #define IFTYPE_DOCSCABLEUPSTREAMCHANNEL 205
969 #define IFTYPE_ECONET 206
970 #define IFTYPE_PON155 207
971 #define IFTYPE_PON622 208
972 #define IFTYPE_BRIDGE 209
973 #define IFTYPE_LINEGROUP 210
974 #define IFTYPE_VOICEEMFGD 211
975 #define IFTYPE_VOICEFGDEANA 212
976 #define IFTYPE_VOICEDID 213
977 #define IFTYPE_MPEG_TRANSPORT 214
978 #define IFTYPE_SIXTOFOUR 215
979 #define IFTYPE_GTP 216
980 #define IFTYPE_PDNETHERLOOP1 217
981 #define IFTYPE_PDNETHERLOOP2 218
982 #define IFTYPE_OPTICAL_CHANNEL_GROUP 219
983 #define IFTYPE_HOMEPNA 220
984 #define IFTYPE_GFP 221
985 #define IFTYPE_CISCO_ISL_VLAN 222
986 #define IFTYPE_ACTELIS_METALOOP 223
987 #define IFTYPE_FCIPLINK 224
988 #define IFTYPE_RPR 225
989 #define IFTYPE_QAM 226
990 #define IFTYPE_LMP 227
991 #define IFTYPE_CBLVECTASTAR 228
992 #define IFTYPE_DOCSCABLEMCMTSDOWNSTREAM 229
993 #define IFTYPE_ADSL2 230
994 #define IFTYPE_MACSECCONTROLLEDIF 231
995 #define IFTYPE_MACSECUNCONTROLLEDIF 232
996 #define IFTYPE_AVICIOPTICALETHER 233
997 #define IFTYPE_ATM_BOND 234
998 #define IFTYPE_VOICEFGDOS 235
999 #define IFTYPE_MOCA_VERSION1 236
1000 #define IFTYPE_IEEE80216WMAN 237
1001 #define IFTYPE_ADSL2PLUS 238
1002 #define IFTYPE_DVBRCSMACLAYER 239
1003 #define IFTYPE_DVBTDM 240
1004 #define IFTYPE_DVBRCSTDMA 241
1005 #define IFTYPE_X86LAPS 242
1006 #define IFTYPE_WWANPP 243
1007 #define IFTYPE_WWANPP2 244
1008 #define IFTYPE_VOICEEBS 245
1009 #define IFTYPE_IFPWTYPE 246
1010 #define IFTYPE_ILAN 247
1011 #define IFTYPE_PIP 248
1012 #define IFTYPE_ALUELP 249
1013 #define IFTYPE_GPON 250
1014 #define IFTYPE_VDSL2 251
1015 #define IFTYPE_CAPWAP_DOT11_PROFILE 252
1016 #define IFTYPE_CAPWAP_DOT11_BSS 253
1017 #define IFTYPE_CAPWAP_WTP_VIRTUAL_RADIO 254
1018 #define IFTYPE_BITS 255
1019 #define IFTYPE_DOCSCABLEUPSTREAMRFPORT 256
1020 #define IFTYPE_CABLEDOWNSTREAMRFPORT 257
1021 #define IFTYPE_VMWARE_VIRTUAL_NIC 258
1022 #define IFTYPE_IEEE802154 259
1023 #define IFTYPE_OTNODU 260
1024 #define IFTYPE_OTNOTU 261
1025 #define IFTYPE_IFVFITYPE 262
1026 #define IFTYPE_G9981 263
1027 #define IFTYPE_G9982 264
1028 #define IFTYPE_G9983 265
1029 #define IFTYPE_ALUEPON 266
1030 #define IFTYPE_ALUEPONONU 267
1031 #define IFTYPE_ALUEPONPHYSICALUNI 268
1032 #define IFTYPE_ALUEPONLOGICALLINK 269
1033 #define IFTYPE_ALUGPONONU 270
1034 #define IFTYPE_ALUGPONPHYSICALUNI 271
1035 #define IFTYPE_VMWARE_NIC_TEAM 272
1036
1037 /**
1038 * IP Header -- RFC 791
1039 */
1040 typedef struct tagIPHDR
1041 {
1042 BYTE m_cVIHL; // Version and IHL
1043 BYTE m_cTOS; // Type Of Service
1044 WORD m_wLen; // Total Length
1045 WORD m_wId; // Identification
1046 WORD m_wFlagOff; // Flags and Fragment Offset
1047 BYTE m_cTTL; // Time To Live
1048 BYTE m_cProtocol; // Protocol
1049 WORD m_wChecksum; // Checksum
1050 struct in_addr m_iaSrc; // Internet Address - Source
1051 struct in_addr m_iaDst; // Internet Address - Destination
1052 } IPHDR;
1053
1054 /**
1055 * ICMP Header - RFC 792
1056 */
1057 typedef struct tagICMPHDR
1058 {
1059 BYTE m_cType; // Type
1060 BYTE m_cCode; // Code
1061 WORD m_wChecksum; // Checksum
1062 WORD m_wId; // Identification
1063 WORD m_wSeq; // Sequence
1064 } ICMPHDR;
1065
1066 /**
1067 * INADDR_NONE can be undefined on some systems
1068 */
1069 #ifndef INADDR_NONE
1070 #define INADDR_NONE (0xFFFFFFFF)
1071 #endif
1072
1073 /**
1074 * Check if given string is NULL and always return valid pointer
1075 */
1076 #define CHECK_NULL(x) ((x) == NULL ? _T("(null)") : (x))
1077 #define CHECK_NULL_A(x) ((x) == NULL ? "(null)" : (x))
1078 #define CHECK_NULL_EX(x) ((x) == NULL ? _T("") : (x))
1079 #define CHECK_NULL_EX_A(x) ((x) == NULL ? "" : (x))
1080
1081 /**
1082 * Free memory block if it isn't NULL
1083 */
1084 #if FREE_IS_NULL_SAFE
1085 #define safe_free(x) free(x);
1086 #define safe_free_and_null(x) { free(x); x = NULL; }
1087 #else
1088 #define safe_free(x) { if ((x) != NULL) free(x); }
1089 #define safe_free_and_null(x) { if ((x) != NULL) { free(x); x = NULL; } }
1090 #endif
1091
1092 /**
1093 * free() wrapper if it isn't NULL safe
1094 */
1095 #if defined(__cplusplus) && !FREE_IS_NULL_SAFE
1096 inline void nx_free(void *p)
1097 {
1098 if (p != NULL)
1099 free(p);
1100 }
1101 #define free nx_free
1102 #endif
1103
1104 /**
1105 * delete object and nullify pointer
1106 */
1107 #define delete_and_null(x) { delete x; x = NULL; }
1108
1109 /**
1110 * Convert half-byte's value to hex digit and vice versa
1111 */
1112 #define bin2hex(x) ((x) < 10 ? ((x) + _T('0')) : ((x) + (_T('A') - 10)))
1113 #ifdef UNICODE
1114 #define hex2bin(x) ((((x) >= _T('0')) && ((x) <= _T('9'))) ? ((x) - _T('0')) : \
1115 (((towupper(x) >= _T('A')) && (towupper(x) <= _T('F'))) ? (towupper(x) - _T('A') + 10) : 0))
1116 #else
1117 #define hex2bin(x) ((((x) >= '0') && ((x) <= '9')) ? ((x) - '0') : \
1118 (((toupper(x) >= 'A') && (toupper(x) <= 'F')) ? (toupper(x) - 'A' + 10) : 0))
1119 #endif
1120
1121 /**
1122 * Define min() and max() if needed
1123 */
1124 #ifndef min
1125 #define min(a, b) ((a) < (b) ? (a) : (b))
1126 #endif
1127 #ifndef max
1128 #define max(a, b) ((a) > (b) ? (a) : (b))
1129 #endif
1130
1131 /**
1132 * Define _tcsicmp() for non-windows
1133 */
1134 #ifndef _WIN32
1135 #define stricmp strcasecmp
1136 #define strnicmp strncasecmp
1137 #define wcsicmp wcscasecmp
1138 #define wcsnicmp wcsncasecmp
1139 #endif
1140
1141 /**
1142 * Compare two numbers and return -1, 0, or 1
1143 */
1144 #define COMPARE_NUMBERS(n1,n2) (((n1) < (n2)) ? -1 : (((n1) > (n2)) ? 1 : 0))
1145
1146 /**
1147 * Increment pointer for given number of bytes
1148 */
1149 #define inc_ptr(ptr, step, ptype) ptr = (ptype *)(((char *)ptr) + step)
1150
1151 /**
1152 * Validate numerical value
1153 */
1154 #define VALIDATE_VALUE(var,x,y,z) { if ((var < x) || (var > y)) var = z; }
1155
1156 /**
1157 * DCI (data collection item) data types
1158 */
1159 #define DCI_DT_INT 0
1160 #define DCI_DT_UINT 1
1161 #define DCI_DT_INT64 2
1162 #define DCI_DT_UINT64 3
1163 #define DCI_DT_STRING 4
1164 #define DCI_DT_FLOAT 5
1165 #define DCI_DT_NULL 6
1166 #define DCI_DT_DEPRECATED 255 /* used internally by agent */
1167
1168 /**
1169 * Insert parameter as string
1170 */
1171 #ifdef UNICODE
1172 #define STRING(x) L#x
1173 #else
1174 #define STRING(x) #x
1175 #endif
1176
1177 /**
1178 * Pipe handle
1179 */
1180 #ifdef _WIN32
1181 #define HPIPE HANDLE
1182 #define INVALID_PIPE_HANDLE INVALID_HANDLE_VALUE
1183 #else
1184 #define HPIPE int
1185 #define INVALID_PIPE_HANDLE (-1)
1186 #endif
1187
1188 #ifdef __cplusplus
1189
1190 /**
1191 * Session enumeration callback return codes
1192 */
1193 enum EnumerationCallbackResult
1194 {
1195 _STOP = 0,
1196 _CONTINUE = 1
1197 };
1198
1199 #endif
1200
1201 #endif /* _nms_common_h_ */