Console compiles on UNIX with UNICODE
[public/netxms.git] / include / nms_util.h
1 /* $Id: nms_util.h,v 1.116 2008-01-28 20:23:44 victor Exp $ */
2 /*
3 ** NetXMS - Network Management System
4 ** Copyright (C) 2003, 2004, 2005, 2006, 2007 Victor Kirhenshtein
5 **
6 ** This program is free software; you can redistribute it and/or modify
7 ** it under the terms of the GNU General Public License as published by
8 ** the Free Software Foundation; either version 2 of the License, or
9 ** (at your option) any later version.
10 **
11 ** This program is distributed in the hope that it will be useful,
12 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ** GNU General Public License for more details.
15 **
16 ** You should have received a copy of the GNU General Public License
17 ** along with this program; if not, write to the Free Software
18 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 **
20 ** File: nms_util.h
21 **
22 **/
23
24 #ifndef _nms_util_h_
25 #define _nms_util_h_
26
27 #ifdef _WIN32
28 #ifdef LIBNETXMS_EXPORTS
29 #define LIBNETXMS_EXPORTABLE __declspec(dllexport)
30 #else
31 #define LIBNETXMS_EXPORTABLE __declspec(dllimport)
32 #endif
33 #else /* _WIN32 */
34 #define LIBNETXMS_EXPORTABLE
35 #endif
36
37
38 #include <nms_common.h>
39 #include <nms_cscp.h>
40 #include <nms_threads.h>
41 #include <time.h>
42
43 #if HAVE_BYTESWAP_H
44 #include <byteswap.h>
45 #endif
46
47
48 //
49 // Sirial communications
50 //
51
52 #ifdef _WIN32
53
54 #define FLOW_NONE 0
55 #define FLOW_SOFTWARE 1
56 #define FLOW_HARDWARE 2
57
58 #else /* _WIN32 */
59
60 #ifdef HAVE_TERMIOS_H
61 # include <termios.h>
62 #else
63 # error termios.h not found
64 #endif
65
66 #endif /* _WIN32 */
67
68
69 //
70 // Common constants
71 //
72
73 #define INVALID_INDEX 0xFFFFFFFF
74 #define CSCP_TEMP_BUF_SIZE 65536
75 #define MD5_DIGEST_SIZE 16
76 #define SHA1_DIGEST_SIZE 20
77
78
79 //
80 // Return codes for IcmpPing()
81 //
82
83 #define ICMP_SUCCESS 0
84 #define ICMP_UNREACHEABLE 1
85 #define ICMP_TIMEOUT 2
86 #define ICMP_RAW_SOCK_FAILED 3
87
88
89 //
90 // Token types for configuration loader
91 //
92
93 #define CT_LONG 0
94 #define CT_STRING 1
95 #define CT_STRING_LIST 2
96 #define CT_END_OF_LIST 3
97 #define CT_BOOLEAN 4
98 #define CT_WORD 5
99 #define CT_IGNORE 6
100
101
102 //
103 // Return codes for NxLoadConfig()
104 //
105
106 #define NXCFG_ERR_OK 0
107 #define NXCFG_ERR_NOFILE 1
108 #define NXCFG_ERR_SYNTAX 2
109
110
111 //
112 // Class for serial communications
113 //
114
115 #ifdef __cplusplus
116
117 #ifndef _WIN32
118 enum
119 {
120 NOPARITY,
121 ODDPARITY,
122 EVENPARITY,
123 ONESTOPBIT,
124 TWOSTOPBITS
125 };
126
127 enum
128 {
129 FLOW_NONE,
130 FLOW_HARDWARE,
131 FLOW_SOFTWARE
132 };
133
134 #ifndef INVALID_HANDLE_VALUE
135 #define INVALID_HANDLE_VALUE (-1)
136 #endif
137 #endif /* _WIN32 */
138
139 class LIBNETXMS_EXPORTABLE Serial
140 {
141 public:
142 Serial(void);
143 ~Serial(void);
144
145 bool Open(TCHAR *pszPort);
146 void Close(void);
147 void SetTimeout(int nTimeout);
148 int Read(char *pBuff, int nSize); /* waits up to timeout and do single read */
149 int ReadAll(char *pBuff, int nSize); /* read until timeout or out of space */
150 bool Write(char *pBuff, int nSize);
151 void Flush(void);
152 bool Set(int nSpeed, int nDataBits, int nParity, int nStopBits);
153 bool Set(int nSpeed, int nDataBits, int nParity, int nStopBits, int nFlowControl);
154 bool Restart(void);
155
156 private:
157 TCHAR *m_pszPort;
158 int m_nTimeout;
159 int m_nSpeed;
160 int m_nDataBits;
161 int m_nStopBits;
162 int m_nParity;
163 int m_nFlowControl;
164
165 #ifndef _WIN32
166 int m_hPort;
167 struct termios m_originalSettings;
168 #else
169 HANDLE m_hPort;
170 #endif
171 };
172
173
174 //
175 // Class for table data storage
176 //
177
178 class LIBNETXMS_EXPORTABLE Table
179 {
180 private:
181 int m_nNumRows;
182 int m_nNumCols;
183 TCHAR **m_ppData;
184 TCHAR **m_ppColNames;
185
186 public:
187 Table();
188 ~Table();
189
190 int GetNumRows(void) { return m_nNumRows; }
191 int GetNumColumns(void) { return m_nNumCols; }
192
193 void AddColumn(TCHAR *pszName);
194 void AddRow(void);
195
196 void SetAt(int nRow, int nCol, TCHAR *pszData);
197 void SetAt(int nRow, int nCol, LONG nData);
198 void SetAt(int nRow, int nCol, DWORD dwData);
199 void SetAt(int nRow, int nCol, double dData);
200 void SetAt(int nRow, int nCol, INT64 nData);
201 void SetAt(int nRow, int nCol, QWORD qwData);
202
203 void Set(int nCol, TCHAR *pszData) { SetAt(m_nNumRows - 1, nCol, pszData); }
204 void Set(int nCol, LONG nData) { SetAt(m_nNumRows - 1, nCol, nData); }
205 void Set(int nCol, DWORD dwData) { SetAt(m_nNumRows - 1, nCol, dwData); }
206 void Set(int nCol, double dData) { SetAt(m_nNumRows - 1, nCol, dData); }
207 void Set(int nCol, INT64 nData) { SetAt(m_nNumRows - 1, nCol, nData); }
208 void Set(int nCol, QWORD qwData) { SetAt(m_nNumRows - 1, nCol, qwData); }
209
210 TCHAR *GetAsString(int nRow, int nCol);
211 LONG GetAsInt(int nRow, int nCol);
212 DWORD GetAsUInt(int nRow, int nCol);
213 INT64 GetAsInt64(int nRow, int nCol);
214 QWORD GetAsUInt64(int nRow, int nCol);
215 double GetAsDouble(int nRow, int nCol);
216 };
217
218
219 //
220 // Dynamic string class
221 //
222
223 class LIBNETXMS_EXPORTABLE String
224 {
225 protected:
226 TCHAR *m_pszBuffer;
227 DWORD m_dwBufSize;
228
229 public:
230 static const int npos;
231
232 String();
233 ~String();
234
235 void SetBuffer(TCHAR *pszBuffer);
236
237 const String& operator =(const TCHAR *pszStr);
238 const String& operator +=(const TCHAR *pszStr);
239 operator TCHAR*() { return CHECK_NULL_EX(m_pszBuffer); }
240
241 void AddString(const TCHAR *pStr, DWORD dwLen);
242 void AddDynamicString(TCHAR *pszStr) { if (pszStr != NULL) { *this += pszStr; free(pszStr); } }
243
244 void AddFormattedString(const TCHAR *pszFormat, ...);
245 void EscapeCharacter(int ch, int esc);
246 void Translate(const TCHAR *pszSrc, const TCHAR *pszDst);
247
248 DWORD Size(void) { return m_dwBufSize > 0 ? m_dwBufSize - 1 : 0; }
249
250 TCHAR *SubStr(int nStart, int nLen, TCHAR *pszBuffer);
251 TCHAR *SubStr(int nStart, int nLen) { return SubStr(nStart, nLen, NULL); }
252 int Find(const TCHAR *pszStr, int nStart = 0);
253 };
254
255
256 //
257 // String map class
258 //
259
260 class LIBNETXMS_EXPORTABLE StringMap
261 {
262 protected:
263 DWORD m_dwSize;
264 TCHAR **m_ppszKeys;
265 TCHAR **m_ppszValues;
266
267 DWORD Find(const TCHAR *pszKey);
268
269 public:
270 StringMap();
271 ~StringMap();
272
273 void Set(const TCHAR *pszKey, const TCHAR *pszValue);
274 TCHAR *Get(const TCHAR *pszKey);
275 void Clear(void);
276
277 DWORD Size(void) { return m_dwSize; }
278 TCHAR *GetKeyByIndex(DWORD idx) { return (idx < m_dwSize) ? m_ppszKeys[idx] : NULL; }
279 TCHAR *GetValueByIndex(DWORD idx) { return (idx < m_dwSize) ? m_ppszValues[idx] : NULL; }
280 };
281
282 #endif /* __cplusplus */
283
284
285 //
286 // Configuration item template for configuration loader
287 //
288
289 typedef struct
290 {
291 TCHAR szToken[64];
292 BYTE iType;
293 BYTE cSeparator; // Separator character for lists
294 WORD wListElements; // Number of list elements, should be set to 0 before calling NxLoadConfig()
295 DWORD dwBufferSize; // Buffer size for strings or flag to be set for CT_BOOLEAN
296 DWORD dwBufferPos; // Should be set to 0
297 void *pBuffer;
298 } NX_CFG_TEMPLATE;
299
300
301 //
302 // getopt() prototype if needed
303 //
304
305 #ifdef _WIN32
306 #include <netxms_getopt.h>
307 #endif
308
309
310 //
311 // Win32 API functions missing under WinCE
312 //
313
314 #if defined(UNDER_CE) && defined(__cplusplus)
315
316 inline void GetSystemTimeAsFileTime(LPFILETIME pFt)
317 {
318 SYSTEMTIME sysTime;
319
320 GetSystemTime(&sysTime);
321 SystemTimeToFileTime(&sysTime, pFt);
322 }
323
324 #endif // UNDER_CE
325
326
327 //
328 // Structures for opendir() / readdir() / closedir()
329 //
330
331 #ifdef _WIN32
332
333 #ifndef SWIGPERL
334
335 typedef struct dirent
336 {
337 long d_ino; /* inode number (not used by MS-DOS) */
338 int d_namlen; /* Name length */
339 char d_name[257]; /* file name */
340 } _DIRECT;
341
342 typedef struct _dir_struc
343 {
344 char *start; /* Starting position */
345 char *curr; /* Current position */
346 long size; /* Size of string table */
347 long nfiles; /* number if filenames in table */
348 struct dirent dirstr; /* Directory structure to return */
349 } DIR;
350
351 #endif
352
353 #endif /* _WIN32 */
354
355
356 //
357 // Functions
358 //
359
360
361 #if WORDS_BIGENDIAN
362 #define htonq(x) (x)
363 #define ntohq(x) (x)
364 #define htond(x) (x)
365 #define ntohd(x) (x)
366 #define SwapWideString(x)
367 #else
368 #ifdef HAVE_HTONLL
369 #define htonq(x) htonll(x)
370 #else
371 #define htonq(x) __bswap_64(x)
372 #endif
373 #ifdef HAVE_NTOHLL
374 #define ntohq(x) ntohll(x)
375 #else
376 #define ntohq(x) __bswap_64(x)
377 #endif
378 #define htond(x) __bswap_double(x)
379 #define ntohd(x) __bswap_double(x)
380 #define SwapWideString(x) __bswap_wstr(x)
381 #endif
382
383 #ifdef UNDER_CE
384 #define close(x) CloseHandle((HANDLE)(x))
385 #endif
386
387 #ifdef __cplusplus
388 #ifndef LIBNETXMS_INLINE
389 inline TCHAR *nx_strncpy(TCHAR *pszDest, const TCHAR *pszSrc, int nLen)
390 {
391 _tcsncpy(pszDest, pszSrc, nLen - 1);
392 pszDest[nLen - 1] = 0;
393 return pszDest;
394 }
395 #endif
396 #else
397 TCHAR LIBNETXMS_EXPORTABLE *nx_strncpy(TCHAR *pszDest, const TCHAR *pszSrc, int nLen);
398 #endif
399
400 #ifdef __cplusplus
401 extern "C"
402 {
403 #endif
404 int LIBNETXMS_EXPORTABLE SendEx(SOCKET, const void *, size_t, int);
405 int LIBNETXMS_EXPORTABLE RecvEx(SOCKET nSocket, const void *pBuff,
406 size_t nSize, int nFlags, DWORD dwTimeout);
407
408 #if defined(_WIN32) || !(HAVE_DECL___BSWAP_32)
409 DWORD LIBNETXMS_EXPORTABLE __bswap_32(DWORD dwVal);
410 #endif
411 #if defined(_WIN32) || !(HAVE_DECL___BSWAP_64)
412 QWORD LIBNETXMS_EXPORTABLE __bswap_64(QWORD qwVal);
413 #endif
414 double LIBNETXMS_EXPORTABLE __bswap_double(double dVal);
415 void LIBNETXMS_EXPORTABLE __bswap_wstr(UCS2CHAR *pStr);
416
417 #if !defined(_WIN32) && !defined(_NETWARE)
418 #if defined(UNICODE_UCS2) || defined(UNICODE_UCS4)
419 void LIBNETXMS_EXPORTABLE wcsupr(WCHAR *in);
420 #endif
421 void LIBNETXMS_EXPORTABLE strupr(char *in);
422 #endif
423
424 void LIBNETXMS_EXPORTABLE QSortEx(void *base, size_t nmemb, size_t size, void *arg,
425 int (*compare)(const void *, const void *, void *));
426
427 INT64 LIBNETXMS_EXPORTABLE GetCurrentTimeMs(void);
428 QWORD LIBNETXMS_EXPORTABLE FileSize(const TCHAR *pszFileName);
429
430 int LIBNETXMS_EXPORTABLE BitsInMask(DWORD dwMask);
431 TCHAR LIBNETXMS_EXPORTABLE *IpToStr(DWORD dwAddr, TCHAR *szBuffer);
432 DWORD LIBNETXMS_EXPORTABLE ResolveHostName(const TCHAR *pszName);
433
434 void LIBNETXMS_EXPORTABLE *nx_memdup(const void *pData, DWORD dwSize);
435 void LIBNETXMS_EXPORTABLE nx_memswap(void *pBlock1, void *pBlock2, DWORD dwSize);
436
437 TCHAR LIBNETXMS_EXPORTABLE *BinToStr(BYTE *pData, DWORD dwSize, TCHAR *pStr);
438 DWORD LIBNETXMS_EXPORTABLE StrToBin(const TCHAR *pStr, BYTE *pData, DWORD dwSize);
439 void LIBNETXMS_EXPORTABLE MACToStr(BYTE *pData, TCHAR *pStr);
440
441 void LIBNETXMS_EXPORTABLE StrStrip(TCHAR *pszStr);
442 BOOL LIBNETXMS_EXPORTABLE MatchString(const TCHAR *pattern, const TCHAR *string, BOOL matchCase);
443 BOOL LIBNETXMS_EXPORTABLE RegexpMatch(TCHAR *pszStr, TCHAR *pszExpr, BOOL bMatchCase);
444 TCHAR LIBNETXMS_EXPORTABLE *ExtractWord(TCHAR *line, TCHAR *buffer);
445 int LIBNETXMS_EXPORTABLE NumChars(const TCHAR *pszStr, int ch);
446 #ifdef __cplusplus
447 BOOL LIBNETXMS_EXPORTABLE IsValidObjectName(const TCHAR *pszName, BOOL bExtendedChars = FALSE);
448 #endif
449 BOOL LIBNETXMS_EXPORTABLE IsValidScriptName(const TCHAR *pszName);
450 void LIBNETXMS_EXPORTABLE TranslateStr(TCHAR *pszString, const TCHAR *pszSubStr, const TCHAR *pszReplace);
451 TCHAR LIBNETXMS_EXPORTABLE *GetCleanFileName(TCHAR *pszFileName);
452 void LIBNETXMS_EXPORTABLE GetOSVersionString(TCHAR *pszBuffer, int nBufSize);
453 BYTE LIBNETXMS_EXPORTABLE *LoadFile(const TCHAR *pszFileName, DWORD *pdwFileSize);
454
455 DWORD LIBNETXMS_EXPORTABLE CalculateCRC32(const unsigned char *pData, DWORD dwSize, DWORD dwCRC);
456 void LIBNETXMS_EXPORTABLE CalculateMD5Hash(const unsigned char *data, size_t nbytes, unsigned char *hash);
457 void LIBNETXMS_EXPORTABLE CalculateSHA1Hash(unsigned char *data, size_t nbytes, unsigned char *hash);
458 BOOL LIBNETXMS_EXPORTABLE CalculateFileMD5Hash(const TCHAR *pszFileName, BYTE *pHash);
459 BOOL LIBNETXMS_EXPORTABLE CalculateFileSHA1Hash(const TCHAR *pszFileName, BYTE *pHash);
460 BOOL LIBNETXMS_EXPORTABLE CalculateFileCRC32(const TCHAR *pszFileName, DWORD *pResult);
461
462 DWORD LIBNETXMS_EXPORTABLE IcmpPing(DWORD dwAddr, int iNumRetries, DWORD dwTimeout,
463 DWORD *pdwRTT, DWORD dwPacketSize);
464
465 DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(const TCHAR *pszFileName, const TCHAR *pszSection,
466 NX_CFG_TEMPLATE *pTemplateList, BOOL bPrint);
467 int LIBNETXMS_EXPORTABLE NxDCIDataTypeFromText(const TCHAR *pszText);
468
469 HMODULE LIBNETXMS_EXPORTABLE DLOpen(const TCHAR *pszLibName, TCHAR *pszErrorText);
470 void LIBNETXMS_EXPORTABLE DLClose(HMODULE hModule);
471 void LIBNETXMS_EXPORTABLE *DLGetSymbolAddr(HMODULE hModule, const TCHAR *pszSymbol, TCHAR *pszErrorText);
472
473 void LIBNETXMS_EXPORTABLE InitSubAgentsLogger(void (* pFunc)(int, TCHAR *));
474 void LIBNETXMS_EXPORTABLE InitSubAgentsTrapSender(void (* pFunc1)(DWORD, int, TCHAR **),
475 void (* pFunc2)(DWORD, const char *, va_list));
476
477 #ifdef _WIN32
478 TCHAR LIBNETXMS_EXPORTABLE *GetSystemErrorText(DWORD dwError, TCHAR *pszBuffer, int iBufSize);
479 #endif
480
481 #if !(HAVE_DAEMON)
482 int LIBNETXMS_EXPORTABLE daemon(int nochdir, int noclose);
483 #endif
484
485 DWORD LIBNETXMS_EXPORTABLE inet_addr_w(const WCHAR *pszAddr);
486
487 #ifndef _WIN32
488 BOOL LIBNETXMS_EXPORTABLE SetDefaultCodepage(const char *cp);
489 int LIBNETXMS_EXPORTABLE WideCharToMultiByte(int iCodePage, DWORD dwFlags, const WCHAR *pWideCharStr,
490 int cchWideChar, char *pByteStr, int cchByteChar,
491 char *pDefaultChar, BOOL *pbUsedDefChar);
492 int LIBNETXMS_EXPORTABLE MultiByteToWideChar(int iCodePage, DWORD dwFlags, const char *pByteStr,
493 int cchByteChar, WCHAR *pWideCharStr,
494 int cchWideChar);
495 #ifndef UNICODE_UCS2
496 int LIBNETXMS_EXPORTABLE ucs2_strlen(const UCS2CHAR *pStr);
497 UCS2CHAR LIBNETXMS_EXPORTABLE *ucs2_strncpy(UCS2CHAR *pDst, const UCS2CHAR *pSrc, int nDstLen);
498 UCS2CHAR LIBNETXMS_EXPORTABLE *ucs2_strdup(const UCS2CHAR *pStr);
499 #endif
500
501 #ifndef UNICODE
502 size_t LIBNETXMS_EXPORTABLE ucs2_to_mb(const UCS2CHAR *src, size_t srcLen, char *dst, size_t dstLen);
503 size_t LIBNETXMS_EXPORTABLE mb_to_ucs2(const char *src, size_t srcLen, UCS2CHAR *dst, size_t dstLen);
504 #endif
505
506 #endif /* _WIN32 */
507
508 WCHAR LIBNETXMS_EXPORTABLE *WideStringFromMBString(const char *pszString);
509 char LIBNETXMS_EXPORTABLE *MBStringFromWideString(const WCHAR *pwszString);
510 char LIBNETXMS_EXPORTABLE *UTF8StringFromWideString(const WCHAR *pwszString);
511
512 #ifdef _WITH_ENCRYPTION
513 WCHAR LIBNETXMS_EXPORTABLE *ERR_error_string_W(int nError, WCHAR *pwszBuffer);
514 #endif
515
516 #ifdef UNICODE
517
518 #ifdef UNICODE_UCS4
519 size_t LIBNETXMS_EXPORTABLE ucs2_to_ucs4(const UCS2CHAR *src, size_t srcLen, WCHAR *dst, size_t dstLen);
520 size_t LIBNETXMS_EXPORTABLE ucs4_to_ucs2(const WCHAR *src, size_t srcLen, UCS2CHAR *dst, size_t dstLen);
521 #endif
522
523 #if !HAVE_WCSTOLL
524 INT64 LIBNETXMS_EXPORTABLE wcstoll(const WCHAR *nptr, WCHAR **endptr, int base);
525 #endif
526 #if !HAVE_WCSTOULL
527 QWORD LIBNETXMS_EXPORTABLE wcstoull(const WCHAR *nptr, WCHAR **endptr, int base);
528 #endif
529 #if !HAVE_WFOPEN
530 FILE LIBNETXMS_EXPORTABLE *wfopen(const WCHAR *_name, const WCHAR *_type);
531 #endif
532 #if !HAVE_WOPEN
533 int LIBNETXMS_EXPORTABLE wopen(const WCHAR *, int, ...);
534 #endif
535 #if !HAVE_WSTAT
536 int wstat(const WCHAR *_path, struct stat *_sbuf);
537 #endif
538 #if !HAVE_WGETENV
539 WCHAR *wgetenv(const WCHAR *_string);
540 #endif
541 #else /* UNICODE */
542 #if !HAVE_STRTOLL
543 INT64 LIBNETXMS_EXPORTABLE strtoll(const char *nptr, char **endptr, int base);
544 #endif
545 #if !HAVE_STRTOULL
546 QWORD LIBNETXMS_EXPORTABLE strtoull(const char *nptr, char **endptr, int base);
547 #endif
548 #endif /* UNICODE */
549
550 #ifdef _WIN32
551 #ifndef SWIGPERL
552 DIR LIBNETXMS_EXPORTABLE *opendir(const char *filename);
553 struct dirent LIBNETXMS_EXPORTABLE *readdir(DIR *dirp);
554 int LIBNETXMS_EXPORTABLE closedir(DIR *dirp);
555 #endif
556 #endif
557
558 #if defined(_WIN32) || !(HAVE_SCANDIR)
559 int LIBNETXMS_EXPORTABLE scandir(const char *dir, struct dirent ***namelist,
560 int (*select)(const struct dirent *),
561 int (*compar)(const struct dirent **, const struct dirent **));
562 int LIBNETXMS_EXPORTABLE alphasort(const struct dirent **a, const struct dirent **b);
563 #endif
564
565 #ifdef UNDER_CE
566 int LIBNETXMS_EXPORTABLE _topen(TCHAR *pszName, int nFlags, ...);
567 int LIBNETXMS_EXPORTABLE read(int hFile, void *pBuffer, size_t nBytes);
568 int LIBNETXMS_EXPORTABLE write(int hFile, void *pBuffer, size_t nBytes);
569 #endif
570
571 #if !defined(_WIN32) && !defined(_NETWARE) && defined(NMS_THREADS_H_INCLUDED)
572 void LIBNETXMS_EXPORTABLE StartMainLoop(THREAD_RESULT (THREAD_CALL * pfSignalHandler)(void *),
573 THREAD_RESULT (THREAD_CALL * pfMain)(void *));
574 #endif
575
576 #ifdef __cplusplus
577 }
578 #endif
579
580 #endif /* _nms_util_h_ */
581
582 ///////////////////////////////////////////////////////////////////////////////
583 /*
584
585 $Log: not supported by cvs2svn $
586 Revision 1.115 2008/01/28 18:09:38 victor
587 Preparation for UNICODE support on UNIX
588
589 Revision 1.114 2008/01/18 17:00:34 victor
590 Correct checking for getopt_long()
591
592 Revision 1.113 2007/12/05 14:17:23 victor
593
594 SetDefaultCodePage now will check if codepage supported by iconv
595
596 Revision 1.112 2007/09/21 10:31:05 victor
597 Fixed issue 185 (creting object with russion characters in name)
598
599 Revision 1.111 2007/09/20 13:03:59 victor
600 - Most of GCC 4.2 warnings cleaned up
601 - Other minor fixes
602
603 Revision 1.110 2007/07/25 12:03:05 victor
604 More const char* fixes
605
606 Revision 1.109 2007/07/25 11:27:36 victor
607 Fixed some issues with char* -> const char* conversion
608
609 Revision 1.108 2007/07/11 19:46:57 victor
610 - New client source tree added
611 - Minor changes in libraris for better support of new console
612
613 Revision 1.107 2007/07/02 23:14:16 victor
614 Various fixes
615
616 Revision 1.106 2007/06/20 13:28:35 victor
617 Fixed 'const char *' to 'char *' conversion error with some GCC versions
618
619 Revision 1.105 2007/05/15 09:36:32 victor
620 Various improvements in web UI
621
622 Revision 1.104 2007/05/11 15:44:46 victor
623 - Added improved qsort()
624 - Minor changes in web ui
625
626 Revision 1.103 2007/05/07 11:35:41 victor
627 - Unfinished changes in alarm generation code
628 - nxhttpd redesigned
629
630 Revision 1.102 2007/03/23 15:59:04 victor
631 - All certificates now stored in database
632 - CA certificates can be imported from management console
633 - Fixed problems with some "invisible" system rights
634 - Minor UI fixes
635
636 Revision 1.101 2007/02/09 22:38:07 victor
637 Crash dump generator added to console
638
639 Revision 1.100 2007/01/24 00:52:28 alk
640 Serial::ReadAll() added: read all data until timeout. returns data size, -1 it timeout w/o any data
641
642 Revision 1.99 2007/01/11 18:56:14 victor
643 - Added Process.COuntEx parameter
644 - Added filtering by command line and window title to process.XXX parameters
645
646 Revision 1.98 2006/12/17 10:31:37 victor
647 ODBC driver made compatible with latest unixODBC
648
649 Revision 1.97 2006/12/11 21:19:27 victor
650 Management pack creation almost working (only SNMP traps cannot be exported)
651
652 Revision 1.96 2006/11/03 08:58:56 victor
653 - Added utillity class "Table"
654 - Changed defines for iconv() usage on NetWare
655 - Semi-complete "alarm details" view
656
657 Revision 1.95 2006/10/17 21:20:25 victor
658 Finished Implementation of agent traps and added trap sending API for subagents
659
660 Revision 1.94 2006/10/05 05:24:05 victor
661 Minor changes
662
663 Revision 1.93 2006/10/01 20:43:37 victor
664 UNICODE-related fixes
665
666 Revision 1.92 2006/10/01 16:01:09 victor
667 Yet another Linux UNICODE fix
668
669 Revision 1.91 2006/10/01 15:47:39 victor
670 More UNICODE fixes
671
672 Revision 1.90 2006/10/01 15:26:28 victor
673 Some UNICODE-related fixes
674
675 Revision 1.89 2006/09/30 22:41:08 victor
676 Database driver API changed: now all SQL queries and results passed as UNICODE strings
677
678 Revision 1.88 2006/09/27 13:04:45 victor
679 Preparation for process information parameters
680
681 Revision 1.87 2006/09/27 04:15:25 victor
682 AIX: implemented Net.InterfaceList
683
684 Revision 1.86 2006/09/23 23:49:41 victor
685 Console working with UNICODE!
686
687 Revision 1.85 2006/09/10 06:59:36 victor
688 Fixed problmes with Win32 build
689
690 Revision 1.84 2006/09/07 22:02:06 alk
691 UNIX version of Serial rewritten
692 termio removed from configure (depricated in favour of termio_s_?)
693
694
695 */