svn:eol-style changed
authorAlex Kirhenshtein <alk@netxms.org>
Fri, 20 Jun 2008 11:29:38 +0000 (11:29 +0000)
committerAlex Kirhenshtein <alk@netxms.org>
Fri, 20 Jun 2008 11:29:38 +0000 (11:29 +0000)
21 files changed:
.gitattributes
doc/internal/nxcp_command_ranges.txt
include/base64.h
netware.cmd
src/console/nxuilib/nxuilibw.def
src/console/win32/ObjectPropsCustomAttrs.cpp
src/console/win32/ObjectPropsCustomAttrs.h
src/libnetxms/base64.cpp
src/libnetxms/wcstoll.c
src/libnetxms/wcstoull.c
src/libnetxms/xml.cpp
src/libnxsl/array.cpp
src/nxcptest/Makefile.am
src/nxcptest/nxcptest.cpp
src/nxcptest/nxcptest.dsp
src/nxcptest/nxcptest.h
src/server/core/nxsl_classes.cpp
src/server/modules/hpdp/Makefile.am
src/server/modules/hpdp/hpdp.cpp
src/server/modules/hpdp/hpdp.dsp
src/server/modules/hpdp/hpdp.h

index f5182df..0b1ed40 100644 (file)
@@ -1,16 +1,9 @@
 * text=auto !eol
 contrib/backgrounds/.keep -text
 contrib/logo.jpg -text
-contrib/startup/redhat/netxmsd.in -text
-contrib/startup/redhat/nxagentd.in -text
-contrib/startup/redhat/nxhttpd.in -text
-contrib/startup/suse/netxmsd.in -text
-contrib/startup/suse/nxagentd.in -text
-contrib/startup/suse/nxhttpd.in -text
 doc/comparison_netxms_nnm.doc -text
 doc/internal/build.w64 -text
 doc/internal/netxms_architecture.vsd -text
-doc/internal/nxcp_command_ranges.txt -text
 doc/manuals/client_library.doc -text
 doc/manuals/netxms_install_guide.odt -text
 doc/manuals/netxms_solution_guide.doc -text
@@ -46,41 +39,39 @@ images/vpnc.ico -text
 images/vpnc.png -text
 images/zone.ico -text
 images/zone.png -text
-include/base64.h -text
-/netware.cmd -text
 netware/bin/.keep -text
-packages/freebsd/files/netxmsd.in -text
-packages/freebsd/files/nxagentd.in -text
-packages/freebsd/files/nxhttpd.in -text
-sql/Makefile.msvc.w32 -text
-sql/Makefile.w32 -text
-sql/database.in -text
-sql/dbinit.in -text
-sql/events.in -text
-sql/images.in -text
-sql/maps.in -text
-sql/objtools.in -text
-sql/policy.in -text
-sql/schema.in -text
-sql/scripts.in -text
-sql/setup.in -text
-sql/traps.in -text
-src/README.libs -text
-src/agent/core/nxagentd.dsw -text
-src/agent/subagents/ecs/ecs.dsw -text
-src/agent/subagents/logscan/logscan.dsw -text
-src/agent/subagents/odbcquery/odbcquery.dsw -text
-src/agent/subagents/ping/ping.dsw -text
-src/agent/subagents/portCheck/portcheck.dsw -text
-src/agent/subagents/skeleton/skeleton.dsw -text
-src/agent/subagents/sms/sms.dsw -text
+/netxms.dsw eol=crlf
+src/PPC_libs.vcw eol=crlf
+src/agent/core/nxagentd.dsp eol=crlf
+src/agent/core/nxagentd.dsw eol=crlf
+src/agent/subagents/ecs/ecs.dsp eol=crlf
+src/agent/subagents/ecs/ecs.dsw eol=crlf
+src/agent/subagents/logscan/logscan.dsp eol=crlf
+src/agent/subagents/logscan/logscan.dsw eol=crlf
+src/agent/subagents/odbcquery/odbcquery.dsp eol=crlf
+src/agent/subagents/odbcquery/odbcquery.dsw eol=crlf
+src/agent/subagents/ping/ping.dsp eol=crlf
+src/agent/subagents/ping/ping.dsw eol=crlf
+src/agent/subagents/portCheck/portcheck.dsp eol=crlf
+src/agent/subagents/portCheck/portcheck.dsw eol=crlf
+src/agent/subagents/skeleton/skeleton.dsp eol=crlf
+src/agent/subagents/skeleton/skeleton.dsw eol=crlf
+src/agent/subagents/sms/sms.dsp eol=crlf
+src/agent/subagents/sms/sms.dsw eol=crlf
 src/agent/subagents/ups/doc/apc_protocol_files/nut-banner.png -text
 src/agent/subagents/ups/doc/apc_protocol_files/vh401.png -text
-src/agent/subagents/ups/ups.dsw -text
-src/agent/subagents/win9x/win9x.dsw -text
-src/agent/subagents/winnt/winnt.dsw -text
-src/agent/subagents/winperf/winperf.dsw -text
-src/agent/subagents/wmi/wmi.dsw -text
+src/agent/subagents/ups/ups.dsp eol=crlf
+src/agent/subagents/ups/ups.dsw eol=crlf
+src/agent/subagents/win9x/win9x.dsp eol=crlf
+src/agent/subagents/win9x/win9x.dsw eol=crlf
+src/agent/subagents/winnt/winnt.dsp eol=crlf
+src/agent/subagents/winnt/winnt.dsw eol=crlf
+src/agent/subagents/winperf/winperf.dsp eol=crlf
+src/agent/subagents/winperf/winperf.dsw eol=crlf
+src/agent/subagents/wmi/wmi.dsp eol=crlf
+src/agent/subagents/wmi/wmi.dsw eol=crlf
+src/client/console/libnxmc/libnxmc.dsp eol=crlf
+src/client/console/nxmc/nxmc.dsp eol=crlf
 src/client/console/nxmc/rc/icons/normal/config.png -text
 src/client/console/nxmc/rc/icons/normal/unknown.png -text
 src/client/console/nxmc/rc/icons/small/config.png -text
@@ -88,6 +79,14 @@ src/client/console/nxmc/rc/icons/small/taskbar.png -text
 src/client/console/nxmc/rc/login.png -text
 src/client/console/nxmc/rc/nxmc.ico -text
 src/client/console/nxmc/rc/processing.png -text
+src/client/console/plugins/AlarmBrowser/mcpAlarmBrowser.dsp eol=crlf
+src/client/console/plugins/Dashboard/mcpDashboard.dsp eol=crlf
+src/client/console/plugins/ObjectBrowser/mcpObjectBrowser.dsp eol=crlf
+src/client/nxalarm/nxalarm.dsp eol=crlf
+src/client/nxsms/nxsms.dsp eol=crlf
+src/console/PocketPC/nxpc.vcc eol=crlf
+src/console/PocketPC/nxpc.vcp eol=crlf
+src/console/PocketPC/nxpc.vcw eol=crlf
 src/console/PocketPC/res/Cmdbar.bmp -text
 src/console/PocketPC/res/SeverityCritical.ico -text
 src/console/PocketPC/res/SeverityMajor.ico -text
@@ -116,8 +115,10 @@ src/console/PocketPC/res/template.ico -text
 src/console/PocketPC/res/template_group.ico -text
 src/console/PocketPC/res/template_root.ico -text
 src/console/PocketPC/res/vpnc.ico -text
-src/console/cmdline/nxcmd.dsw -text
-src/console/nxav/nxav.dsw -text
+src/console/cmdline/nxcmd.dsp eol=crlf
+src/console/cmdline/nxcmd.dsw eol=crlf
+src/console/nxav/nxav.dsp eol=crlf
+src/console/nxav/nxav.dsw eol=crlf
 src/console/nxav/res/ack.ico -text
 src/console/nxav/res/ack.png -text
 src/console/nxav/res/background.jpg -text
@@ -132,14 +133,16 @@ src/console/nxav/res/processing.ico -text
 src/console/nxav/res/small_logo.bmp -text
 src/console/nxav/res/sound.png -text
 src/console/nxav/res/warning.ico -text
-src/console/nxlexer/nxlexer.dsw -text
+src/console/nxlexer/nxlexer.dsp eol=crlf
+src/console/nxlexer/nxlexer.dsw eol=crlf
+src/console/nxnotify/nxnotify.dsp eol=crlf
 src/console/nxnotify/res/nxnotify.ico -text
 src/console/nxnotify/res/processing.ico -text
 src/console/nxnotify/res/sort_up.ico -text
 src/console/nxnotify/res/sortdown.ico -text
 src/console/nxnotify/res/warning.ico -text
-src/console/nxuilib/nxuilib.dsw -text
-src/console/nxuilib/nxuilibw.def -text
+src/console/nxuilib/nxuilib.dsp eol=crlf
+src/console/nxuilib/nxuilib.dsw eol=crlf
 src/console/nxuilib/res/SeverityCritical.ico -text
 src/console/nxuilib/res/SeverityMajor.ico -text
 src/console/nxuilib/res/SeverityMinor.ico -text
@@ -159,8 +162,6 @@ src/console/nxuilib/sounds/ring1.wav -text svneol=unset#unset
 src/console/nxuilib/sounds/ring2.wav -text svneol=unset#unset
 src/console/nxuilib/sounds/siren1.wav -text svneol=unset#unset
 src/console/nxuilib/sounds/siren2.wav -text svneol=unset#unset
-src/console/win32/ObjectPropsCustomAttrs.cpp -text
-src/console/win32/ObjectPropsCustomAttrs.h -text
 src/console/win32/icons/RuleManager.ico -text
 src/console/win32/icons/SeverityCritical.ico -text
 src/console/win32/icons/SeverityMajor.ico -text
@@ -246,7 +247,8 @@ src/console/win32/icons/tree.ico -text
 src/console/win32/icons/unsupported.ico -text
 src/console/win32/icons/user.ico -text
 src/console/win32/icons/users.ico -text
-src/console/win32/nxcon.dsw -text
+src/console/win32/nxcon.dsp eol=crlf
+src/console/win32/nxcon.dsw eol=crlf
 src/console/win32/res/Toolbar.bmp -text
 src/console/win32/res/any.bmp -text
 src/console/win32/res/close.bmp -text
@@ -254,26 +256,30 @@ src/console/win32/res/down_arrow.bmp -text
 src/console/win32/res/none.bmp -text
 src/console/win32/res/nxcon.ico -text
 src/console/win32/res/up_arrow.bmp -text
-src/console/win32starter/nxcstart.dsw -text
-src/libnetxms/base64.cpp -text
-src/libnetxms/libnetxms.dsw -text
-src/libnetxms/wcstoll.c -text
-src/libnetxms/wcstoull.c -text
-src/libnetxms/xml.cpp -text
-src/libnxcl/libnxcl.dsw -text
-src/libnxmap/libnxmap.dsw -text
-src/libnxsl/array.cpp -text
-src/libnxsl/libnxsl.dsw -text
+src/console/win32starter/nxcstart.dsp eol=crlf
+src/console/win32starter/nxcstart.dsw eol=crlf
+src/libnetxms/libnetxms.dsp eol=crlf
+src/libnetxms/libnetxms.dsw eol=crlf
+src/libnetxms/libnetxms.vcp eol=crlf
+src/libnetxms/libnetxms.vcw eol=crlf
+src/libnxcl/libnxcl.dsp eol=crlf
+src/libnxcl/libnxcl.dsw eol=crlf
+src/libnxcl/libnxcl.vcp eol=crlf
+src/libnxcl/libnxcl.vcw eol=crlf
+src/libnxmap/libnxmap.dsp eol=crlf
+src/libnxmap/libnxmap.dsw eol=crlf
+src/libnxsl/libnxsl.dsp eol=crlf
+src/libnxsl/libnxsl.dsw eol=crlf
 src/libnxsl/parser.l -text
 src/libnxsl/parser.y -text
-src/libnxsnmp/libnxsnmp.dsw -text
-src/nxcptest/Makefile.am -text
-src/nxcptest/nxcptest.cpp -text
-src/nxcptest/nxcptest.dsp -text
-src/nxcptest/nxcptest.dsw -text
-src/nxcptest/nxcptest.h -text
-src/nxevent/nxevent.dsw -text
-src/nxhttpd/nxhttpd.dsw -text
+src/libnxsnmp/libnxsnmp.dsp eol=crlf
+src/libnxsnmp/libnxsnmp.dsw eol=crlf
+src/nxcptest/nxcptest.dsp eol=crlf
+src/nxcptest/nxcptest.dsw eol=crlf
+src/nxevent/nxevent.dsp eol=crlf
+src/nxevent/nxevent.dsw eol=crlf
+src/nxhttpd/nxhttpd.dsp eol=crlf
+src/nxhttpd/nxhttpd.dsw eol=crlf
 src/nxhttpd/static/images/I.png -text
 src/nxhttpd/static/images/L.png -text
 src/nxhttpd/static/images/Lminus.png -text
@@ -345,46 +351,62 @@ src/nxhttpd/static/images/status/unknown.png -text
 src/nxhttpd/static/images/status/unmanaged.png -text
 src/nxhttpd/static/images/status/warning.png -text
 src/nxhttpd/static/images/terminate.png -text
-src/nxmibc/nxmibc.dsw -text
-src/nxmibc/parser.l -text
-src/nxmibc/parser.y -text
-src/nxpush/nxpush.dsw -text
-src/nxreport/nxreport.dsw -text
-src/nxscript/nxscript.dsw -text
-src/server/core/nxcore.dsw -text
-src/server/core/nxmp_parser.l -text
-src/server/core/nxmp_parser.y -text
-src/server/core/nxsl_classes.cpp -text
-src/server/dbdrv/mssql/mssql.dsw -text
-src/server/dbdrv/mysql/mysql.dsw -text
-src/server/dbdrv/odbc/odbc.dsw -text
-src/server/dbdrv/oracle/oracle.dsw -text
-src/server/dbdrv/pgsql/pgsql.dsw -text
-src/server/dbdrv/sqlite/sqlite.dsw -text
-src/server/libnxsrv/libnxsrv.dsw -text
-src/server/modules/hpdp/Makefile.am -text
-src/server/modules/hpdp/hpdp.cpp -text
-src/server/modules/hpdp/hpdp.dsp -text
-src/server/modules/hpdp/hpdp.dsw -text
-src/server/modules/hpdp/hpdp.h -text
-src/server/netxmsd/netxmsd.dsw -text
-src/server/smsdrv/generic/generic.dsw -text
-src/server/smsdrv/nxagent/nxagent.dsw -text
-src/server/tools/nxaction/nxaction.dsw -text
-src/server/tools/nxadm/nxadm.dsw -text
-src/server/tools/nxconfig/nxconfig.dsw -text
+src/nxmibc/nxmibc.dsp eol=crlf
+src/nxmibc/nxmibc.dsw eol=crlf
+src/nxpush/nxpush.dsp eol=crlf
+src/nxpush/nxpush.dsw eol=crlf
+src/nxreport/nxreport.dsp eol=crlf
+src/nxreport/nxreport.dsw eol=crlf
+src/nxscript/nxscript.dsp eol=crlf
+src/nxscript/nxscript.dsw eol=crlf
+src/server/core/nxcore.dsp eol=crlf
+src/server/core/nxcore.dsw eol=crlf
+src/server/dbdrv/mssql/mssql.dsp eol=crlf
+src/server/dbdrv/mssql/mssql.dsw eol=crlf
+src/server/dbdrv/mysql/mysql.dsp eol=crlf
+src/server/dbdrv/mysql/mysql.dsw eol=crlf
+src/server/dbdrv/odbc/odbc.dsp eol=crlf
+src/server/dbdrv/odbc/odbc.dsw eol=crlf
+src/server/dbdrv/oracle/oracle.dsp eol=crlf
+src/server/dbdrv/oracle/oracle.dsw eol=crlf
+src/server/dbdrv/pgsql/pgsql.dsp eol=crlf
+src/server/dbdrv/pgsql/pgsql.dsw eol=crlf
+src/server/dbdrv/sqlite/sqlite.dsp eol=crlf
+src/server/dbdrv/sqlite/sqlite.dsw eol=crlf
+src/server/libnxsrv/libnxsrv.dsp eol=crlf
+src/server/libnxsrv/libnxsrv.dsw eol=crlf
+src/server/modules/hpdp/hpdp.dsp eol=crlf
+src/server/modules/hpdp/hpdp.dsw eol=crlf
+src/server/netxmsd/netxmsd.dsp eol=crlf
+src/server/netxmsd/netxmsd.dsw eol=crlf
+src/server/smsdrv/generic/generic.dsp eol=crlf
+src/server/smsdrv/generic/generic.dsw eol=crlf
+src/server/smsdrv/nxagent/nxagent.dsp eol=crlf
+src/server/smsdrv/nxagent/nxagent.dsw eol=crlf
+src/server/tools/nxaction/nxaction.dsp eol=crlf
+src/server/tools/nxaction/nxaction.dsw eol=crlf
+src/server/tools/nxadm/nxadm.dsp eol=crlf
+src/server/tools/nxadm/nxadm.dsw eol=crlf
+src/server/tools/nxconfig/nxconfig.dsp eol=crlf
+src/server/tools/nxconfig/nxconfig.dsw eol=crlf
 src/server/tools/nxconfig/res/failed.ico -text
 src/server/tools/nxconfig/res/nxconfig.ico -text
 src/server/tools/nxconfig/res/ok.ico -text
 src/server/tools/nxconfig/res/running.ico -text
 src/server/tools/nxconfig/res/warning.ico -text
 src/server/tools/nxconfig/res/wizard.bmp -text
-src/server/tools/nxdbmgr/nxdbmgr.dsw -text
-src/server/tools/nxget/nxget.dsw -text
-src/server/tools/nxsnmpget/nxsnmpget.dsw -text
-src/server/tools/nxsnmpset/nxsnmpset.dsw -text
-src/server/tools/nxsnmpwalk/nxsnmpwalk.dsw -text
-src/server/tools/nxupload/nxupload.dsw -text
+src/server/tools/nxdbmgr/nxdbmgr.dsp eol=crlf
+src/server/tools/nxdbmgr/nxdbmgr.dsw eol=crlf
+src/server/tools/nxget/nxget.dsp eol=crlf
+src/server/tools/nxget/nxget.dsw eol=crlf
+src/server/tools/nxsnmpget/nxsnmpget.dsp eol=crlf
+src/server/tools/nxsnmpget/nxsnmpget.dsw eol=crlf
+src/server/tools/nxsnmpset/nxsnmpset.dsp eol=crlf
+src/server/tools/nxsnmpset/nxsnmpset.dsw eol=crlf
+src/server/tools/nxsnmpwalk/nxsnmpwalk.dsp eol=crlf
+src/server/tools/nxsnmpwalk/nxsnmpwalk.dsw eol=crlf
+src/server/tools/nxupload/nxupload.dsp eol=crlf
+src/server/tools/nxupload/nxupload.dsw eol=crlf
 tools/patch_config.status.pl -text
 www/data/documentation/body.shtml -text
 www/data/documentation/confexample/image001.png -text
index f53f897..5c97a66 100644 (file)
@@ -1,2 +1,2 @@
-0000 .. 0FFF   Core system commands\r
-1000 .. 100F   NetXMS/AVS\r
+0000 .. 0FFF   Core system commands
+1000 .. 100F   NetXMS/AVS
index 32999c8..e3a6136 100644 (file)
@@ -1,42 +1,42 @@
-/* base64.h -- Encode binary data using printable characters.\r
-   Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.\r
-   Written by Simon Josefsson.\r
-\r
-   This program is free software; you can redistribute it and/or modify\r
-   it under the terms of the GNU General Public License as published by\r
-   the Free Software Foundation; either version 2, or (at your option)\r
-   any later version.\r
-\r
-   This program is distributed in the hope that it will be useful,\r
-   but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-   GNU General Public License for more details.\r
-\r
-   You should have received a copy of the GNU General Public License\r
-   along with this program; if not, write to the Free Software Foundation,\r
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */\r
-\r
-#ifndef BASE64_H\r
-#define BASE64_H\r
-\r
-/* Get size_t. */\r
-#include <stddef.h>\r
-\r
-/* This uses that the expression (n+(k-1))/k means the smallest\r
-   integer >= n/k, i.e., the ceiling of n/k.  */\r
-#define BASE64_LENGTH(inlen) ((((inlen) + 2) / 3) * 4)\r
-\r
-BOOL LIBNETXMS_EXPORTABLE isbase64 (char ch);\r
-\r
-void LIBNETXMS_EXPORTABLE base64_encode (const char *in, size_t inlen,\r
-                          char *out, size_t outlen);\r
-\r
-size_t LIBNETXMS_EXPORTABLE base64_encode_alloc (const char *in, size_t inlen, char **out);\r
-\r
-BOOL LIBNETXMS_EXPORTABLE base64_decode (const char *in, size_t inlen,\r
-                          char *out, size_t *outlen);\r
-\r
-BOOL LIBNETXMS_EXPORTABLE base64_decode_alloc (const char *in, size_t inlen,\r
-                                char **out, size_t *outlen);\r
-\r
-#endif /* BASE64_H */\r
+/* base64.h -- Encode binary data using printable characters.
+   Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+   Written by Simon Josefsson.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef BASE64_H
+#define BASE64_H
+
+/* Get size_t. */
+#include <stddef.h>
+
+/* This uses that the expression (n+(k-1))/k means the smallest
+   integer >= n/k, i.e., the ceiling of n/k.  */
+#define BASE64_LENGTH(inlen) ((((inlen) + 2) / 3) * 4)
+
+BOOL LIBNETXMS_EXPORTABLE isbase64 (char ch);
+
+void LIBNETXMS_EXPORTABLE base64_encode (const char *in, size_t inlen,
+                          char *out, size_t outlen);
+
+size_t LIBNETXMS_EXPORTABLE base64_encode_alloc (const char *in, size_t inlen, char **out);
+
+BOOL LIBNETXMS_EXPORTABLE base64_decode (const char *in, size_t inlen,
+                          char *out, size_t *outlen);
+
+BOOL LIBNETXMS_EXPORTABLE base64_decode_alloc (const char *in, size_t inlen,
+                                char **out, size_t *outlen);
+
+#endif /* BASE64_H */
index f18e6d7..5c1f6d8 100644 (file)
@@ -1,2 +1,2 @@
-PATH=C:\gcc-nlm\usr\bin;C:\gcc-nlm\usr\i586-netware\bin;C:\gcc-nlm\usr\lib\gcc-lib\i586-netware\3.2.3;%PATH%\r
-cmd\r
+PATH=C:\gcc-nlm\usr\bin;C:\gcc-nlm\usr\i586-netware\bin;C:\gcc-nlm\usr\lib\gcc-lib\i586-netware\3.2.3;%PATH%
+cmd
index 249ba54..8197948 100644 (file)
@@ -1,7 +1,7 @@
-; nxuilibw.def : Declares the module parameters for the DLL.\r
-\r
-LIBRARY      "nxuilibw"\r
-DESCRIPTION  'NetXMS Windows UI Dynamic Link Library (UNICODE)'\r
-\r
-EXPORTS\r
-    ; Explicit exports can go here\r
+; nxuilibw.def : Declares the module parameters for the DLL.
+
+LIBRARY      "nxuilibw"
+DESCRIPTION  'NetXMS Windows UI Dynamic Link Library (UNICODE)'
+
+EXPORTS
+    ; Explicit exports can go here
index 2f2ab5e..b87a7bc 100644 (file)
-// ObjectPropsCustomAttrs.cpp : implementation file\r
-//\r
-\r
-#include "stdafx.h"\r
-#include "nxcon.h"\r
-#include "ObjectPropsCustomAttrs.h"\r
-#include "ObjectPropSheet.h"\r
-#include "EditVariableDlg.h"\r
-\r
-#ifdef _DEBUG\r
-#define new DEBUG_NEW\r
-#undef THIS_FILE\r
-static char THIS_FILE[] = __FILE__;\r
-#endif\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-// CObjectPropsCustomAttrs property page\r
-\r
-IMPLEMENT_DYNCREATE(CObjectPropsCustomAttrs, CPropertyPage)\r
-\r
-CObjectPropsCustomAttrs::CObjectPropsCustomAttrs() : CPropertyPage(CObjectPropsCustomAttrs::IDD)\r
-{\r
-       //{{AFX_DATA_INIT(CObjectPropsCustomAttrs)\r
-               // NOTE: the ClassWizard will add member initialization here\r
-       //}}AFX_DATA_INIT\r
-}\r
-\r
-CObjectPropsCustomAttrs::~CObjectPropsCustomAttrs()\r
-{\r
-}\r
-\r
-void CObjectPropsCustomAttrs::DoDataExchange(CDataExchange* pDX)\r
-{\r
-       CPropertyPage::DoDataExchange(pDX);\r
-       //{{AFX_DATA_MAP(CObjectPropsCustomAttrs)\r
-       DDX_Control(pDX, IDC_LIST_ATTRIBUTES, m_wndListCtrl);\r
-       //}}AFX_DATA_MAP\r
-}\r
-\r
-\r
-BEGIN_MESSAGE_MAP(CObjectPropsCustomAttrs, CPropertyPage)\r
-       //{{AFX_MSG_MAP(CObjectPropsCustomAttrs)\r
-       ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)\r
-       ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)\r
-       ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)\r
-       ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_ATTRIBUTES, OnItemchangedListAttributes)\r
-       ON_NOTIFY(NM_DBLCLK, IDC_LIST_ATTRIBUTES, OnDblclkListAttributes)\r
-       //}}AFX_MSG_MAP\r
-END_MESSAGE_MAP()\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-// CObjectPropsCustomAttrs message handlers\r
-\r
-\r
-//\r
-// WM_INITDIALOG message handler\r
-//\r
-\r
-BOOL CObjectPropsCustomAttrs::OnInitDialog() \r
-{\r
-       DWORD i;\r
-       int item;\r
-       RECT rect;\r
-\r
-       CPropertyPage::OnInitDialog();\r
-       \r
-   m_pUpdate = ((CObjectPropSheet *)GetParent())->GetUpdateStruct();\r
-\r
-       // Setup list control\r
-       m_wndListCtrl.GetClientRect(&rect);\r
-       m_wndListCtrl.InsertColumn(0, _T("Name"), LVCFMT_LEFT, 100);\r
-       m_wndListCtrl.InsertColumn(1, _T("Value"), LVCFMT_LEFT, rect.right - 100 - GetSystemMetrics(SM_CXVSCROLL));\r
-       m_wndListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);\r
-\r
-       // Fill list control with data\r
-       for(i = 0; i < m_pObject->pCustomAttrs->Size(); i++)\r
-       {\r
-               item = m_wndListCtrl.InsertItem(i, m_pObject->pCustomAttrs->GetKeyByIndex(i));\r
-               if (item != -1)\r
-                       m_wndListCtrl.SetItemText(item, 1, m_pObject->pCustomAttrs->GetValueByIndex(i));\r
-       }\r
-       \r
-       EnableDlgItem(this, IDC_BUTTON_EDIT, m_wndListCtrl.GetSelectedCount() == 1);\r
-       EnableDlgItem(this, IDC_BUTTON_DELETE, m_wndListCtrl.GetSelectedCount() > 0);\r
-\r
-       return TRUE;\r
-}\r
-\r
-\r
-//\r
-// PSN_OK handler\r
-//\r
-\r
-void CObjectPropsCustomAttrs::OnOK() \r
-{\r
-       int i;\r
-\r
-       if (m_pUpdate->qwFlags & OBJ_UPDATE_CUSTOM_ATTRS)\r
-       {\r
-               m_pUpdate->pCustomAttrs = &m_strMap;\r
-               for(i = 0; i < m_wndListCtrl.GetItemCount(); i++)\r
-               {\r
-                       m_strMap.Set(m_wndListCtrl.GetItemText(i, 0), m_wndListCtrl.GetItemText(i, 1));\r
-               }\r
-       }\r
-       CPropertyPage::OnOK();\r
-}\r
-\r
-\r
-//\r
-// "Add" button handler\r
-//\r
-\r
-void CObjectPropsCustomAttrs::OnButtonAdd() \r
-{\r
-       CEditVariableDlg dlg;\r
-       int item;\r
-       LVFINDINFO lvfi;\r
-\r
-       dlg.m_pszTitle = _T("New Attribute");\r
-       dlg.m_bNewVariable = TRUE;\r
-       if (dlg.DoModal() == IDOK)\r
-       {\r
-               lvfi.flags = LVFI_STRING;\r
-               lvfi.psz = dlg.m_strName;\r
-               item = m_wndListCtrl.FindItem(&lvfi);\r
-               if (item == -1)\r
-               {\r
-                       item = m_wndListCtrl.InsertItem(0x7FFFFFFF, dlg.m_strName);\r
-               }\r
-               m_wndListCtrl.SetItemText(item, 1, dlg.m_strValue);\r
-               \r
-               m_pUpdate->qwFlags |= OBJ_UPDATE_CUSTOM_ATTRS;\r
-               SetModified();\r
-       }\r
-}\r
-\r
-\r
-//\r
-// "Edit" button handler\r
-//\r
-\r
-void CObjectPropsCustomAttrs::OnButtonEdit() \r
-{\r
-       CEditVariableDlg dlg;\r
-       int item;\r
-\r
-       if (m_wndListCtrl.GetSelectedCount() != 1)\r
-               return;\r
-\r
-       item = m_wndListCtrl.GetSelectionMark();\r
-       dlg.m_strName = m_wndListCtrl.GetItemText(item, 0);\r
-       dlg.m_strValue = m_wndListCtrl.GetItemText(item, 1);\r
-       dlg.m_pszTitle = _T("Edit Attribute");\r
-       if (dlg.DoModal() == IDOK)\r
-       {\r
-               m_wndListCtrl.SetItemText(item, 1, dlg.m_strValue);\r
-               \r
-               m_pUpdate->qwFlags |= OBJ_UPDATE_CUSTOM_ATTRS;\r
-               SetModified();\r
-       }\r
-}\r
-\r
-\r
-//\r
-// "Delete" button handler\r
-//\r
-\r
-void CObjectPropsCustomAttrs::OnButtonDelete() \r
-{\r
-       int item;\r
-\r
-       while((item = m_wndListCtrl.GetNextItem(-1, LVIS_SELECTED)) != -1)\r
-               m_wndListCtrl.DeleteItem(item);\r
-}\r
-\r
-\r
-//\r
-// Item change handler\r
-//\r
-\r
-void CObjectPropsCustomAttrs::OnItemchangedListAttributes(NMHDR* pNMHDR, LRESULT* pResult) \r
-{\r
-       EnableDlgItem(this, IDC_BUTTON_EDIT, m_wndListCtrl.GetSelectedCount() == 1);\r
-       EnableDlgItem(this, IDC_BUTTON_DELETE, m_wndListCtrl.GetSelectedCount() > 0);\r
-       *pResult = 0;\r
-}\r
-\r
-\r
-//\r
-// Handler for double click in list control\r
-//\r
-\r
-void CObjectPropsCustomAttrs::OnDblclkListAttributes(NMHDR* pNMHDR, LRESULT* pResult) \r
-{\r
-       PostMessage(WM_COMMAND, IDC_BUTTON_EDIT, 0);\r
-       *pResult = 0;\r
-}\r
+// ObjectPropsCustomAttrs.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "nxcon.h"
+#include "ObjectPropsCustomAttrs.h"
+#include "ObjectPropSheet.h"
+#include "EditVariableDlg.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CObjectPropsCustomAttrs property page
+
+IMPLEMENT_DYNCREATE(CObjectPropsCustomAttrs, CPropertyPage)
+
+CObjectPropsCustomAttrs::CObjectPropsCustomAttrs() : CPropertyPage(CObjectPropsCustomAttrs::IDD)
+{
+       //{{AFX_DATA_INIT(CObjectPropsCustomAttrs)
+               // NOTE: the ClassWizard will add member initialization here
+       //}}AFX_DATA_INIT
+}
+
+CObjectPropsCustomAttrs::~CObjectPropsCustomAttrs()
+{
+}
+
+void CObjectPropsCustomAttrs::DoDataExchange(CDataExchange* pDX)
+{
+       CPropertyPage::DoDataExchange(pDX);
+       //{{AFX_DATA_MAP(CObjectPropsCustomAttrs)
+       DDX_Control(pDX, IDC_LIST_ATTRIBUTES, m_wndListCtrl);
+       //}}AFX_DATA_MAP
+}
+
+
+BEGIN_MESSAGE_MAP(CObjectPropsCustomAttrs, CPropertyPage)
+       //{{AFX_MSG_MAP(CObjectPropsCustomAttrs)
+       ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
+       ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
+       ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
+       ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_ATTRIBUTES, OnItemchangedListAttributes)
+       ON_NOTIFY(NM_DBLCLK, IDC_LIST_ATTRIBUTES, OnDblclkListAttributes)
+       //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CObjectPropsCustomAttrs message handlers
+
+
+//
+// WM_INITDIALOG message handler
+//
+
+BOOL CObjectPropsCustomAttrs::OnInitDialog() 
+{
+       DWORD i;
+       int item;
+       RECT rect;
+
+       CPropertyPage::OnInitDialog();
+       
+   m_pUpdate = ((CObjectPropSheet *)GetParent())->GetUpdateStruct();
+
+       // Setup list control
+       m_wndListCtrl.GetClientRect(&rect);
+       m_wndListCtrl.InsertColumn(0, _T("Name"), LVCFMT_LEFT, 100);
+       m_wndListCtrl.InsertColumn(1, _T("Value"), LVCFMT_LEFT, rect.right - 100 - GetSystemMetrics(SM_CXVSCROLL));
+       m_wndListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
+
+       // Fill list control with data
+       for(i = 0; i < m_pObject->pCustomAttrs->Size(); i++)
+       {
+               item = m_wndListCtrl.InsertItem(i, m_pObject->pCustomAttrs->GetKeyByIndex(i));
+               if (item != -1)
+                       m_wndListCtrl.SetItemText(item, 1, m_pObject->pCustomAttrs->GetValueByIndex(i));
+       }
+       
+       EnableDlgItem(this, IDC_BUTTON_EDIT, m_wndListCtrl.GetSelectedCount() == 1);
+       EnableDlgItem(this, IDC_BUTTON_DELETE, m_wndListCtrl.GetSelectedCount() > 0);
+
+       return TRUE;
+}
+
+
+//
+// PSN_OK handler
+//
+
+void CObjectPropsCustomAttrs::OnOK() 
+{
+       int i;
+
+       if (m_pUpdate->qwFlags & OBJ_UPDATE_CUSTOM_ATTRS)
+       {
+               m_pUpdate->pCustomAttrs = &m_strMap;
+               for(i = 0; i < m_wndListCtrl.GetItemCount(); i++)
+               {
+                       m_strMap.Set(m_wndListCtrl.GetItemText(i, 0), m_wndListCtrl.GetItemText(i, 1));
+               }
+       }
+       CPropertyPage::OnOK();
+}
+
+
+//
+// "Add" button handler
+//
+
+void CObjectPropsCustomAttrs::OnButtonAdd() 
+{
+       CEditVariableDlg dlg;
+       int item;
+       LVFINDINFO lvfi;
+
+       dlg.m_pszTitle = _T("New Attribute");
+       dlg.m_bNewVariable = TRUE;
+       if (dlg.DoModal() == IDOK)
+       {
+               lvfi.flags = LVFI_STRING;
+               lvfi.psz = dlg.m_strName;
+               item = m_wndListCtrl.FindItem(&lvfi);
+               if (item == -1)
+               {
+                       item = m_wndListCtrl.InsertItem(0x7FFFFFFF, dlg.m_strName);
+               }
+               m_wndListCtrl.SetItemText(item, 1, dlg.m_strValue);
+               
+               m_pUpdate->qwFlags |= OBJ_UPDATE_CUSTOM_ATTRS;
+               SetModified();
+       }
+}
+
+
+//
+// "Edit" button handler
+//
+
+void CObjectPropsCustomAttrs::OnButtonEdit() 
+{
+       CEditVariableDlg dlg;
+       int item;
+
+       if (m_wndListCtrl.GetSelectedCount() != 1)
+               return;
+
+       item = m_wndListCtrl.GetSelectionMark();
+       dlg.m_strName = m_wndListCtrl.GetItemText(item, 0);
+       dlg.m_strValue = m_wndListCtrl.GetItemText(item, 1);
+       dlg.m_pszTitle = _T("Edit Attribute");
+       if (dlg.DoModal() == IDOK)
+       {
+               m_wndListCtrl.SetItemText(item, 1, dlg.m_strValue);
+               
+               m_pUpdate->qwFlags |= OBJ_UPDATE_CUSTOM_ATTRS;
+               SetModified();
+       }
+}
+
+
+//
+// "Delete" button handler
+//
+
+void CObjectPropsCustomAttrs::OnButtonDelete() 
+{
+       int item;
+
+       while((item = m_wndListCtrl.GetNextItem(-1, LVIS_SELECTED)) != -1)
+               m_wndListCtrl.DeleteItem(item);
+}
+
+
+//
+// Item change handler
+//
+
+void CObjectPropsCustomAttrs::OnItemchangedListAttributes(NMHDR* pNMHDR, LRESULT* pResult) 
+{
+       EnableDlgItem(this, IDC_BUTTON_EDIT, m_wndListCtrl.GetSelectedCount() == 1);
+       EnableDlgItem(this, IDC_BUTTON_DELETE, m_wndListCtrl.GetSelectedCount() > 0);
+       *pResult = 0;
+}
+
+
+//
+// Handler for double click in list control
+//
+
+void CObjectPropsCustomAttrs::OnDblclkListAttributes(NMHDR* pNMHDR, LRESULT* pResult) 
+{
+       PostMessage(WM_COMMAND, IDC_BUTTON_EDIT, 0);
+       *pResult = 0;
+}
index fd22b00..27b5982 100644 (file)
@@ -1,61 +1,61 @@
-#if !defined(AFX_OBJECTPROPSCUSTOMATTRS_H__1FCD36D6_FB2D_4664_A351_055FC2B17D19__INCLUDED_)\r
-#define AFX_OBJECTPROPSCUSTOMATTRS_H__1FCD36D6_FB2D_4664_A351_055FC2B17D19__INCLUDED_\r
-\r
-#include "..\..\..\INCLUDE\nms_util.h" // Added by ClassView\r
-#if _MSC_VER > 1000\r
-#pragma once\r
-#endif // _MSC_VER > 1000\r
-// ObjectPropsCustomAttrs.h : header file\r
-//\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-// CObjectPropsCustomAttrs dialog\r
-\r
-class CObjectPropsCustomAttrs : public CPropertyPage\r
-{\r
-       DECLARE_DYNCREATE(CObjectPropsCustomAttrs)\r
-\r
-// Construction\r
-public:\r
-       NXC_OBJECT * m_pObject;\r
-       CObjectPropsCustomAttrs();\r
-       ~CObjectPropsCustomAttrs();\r
-\r
-// Dialog Data\r
-       //{{AFX_DATA(CObjectPropsCustomAttrs)\r
-       enum { IDD = IDD_OBJECT_CUSTOM_ATTRS };\r
-       CListCtrl       m_wndListCtrl;\r
-       //}}AFX_DATA\r
-\r
-\r
-// Overrides\r
-       // ClassWizard generate virtual function overrides\r
-       //{{AFX_VIRTUAL(CObjectPropsCustomAttrs)\r
-       public:\r
-       virtual void OnOK();\r
-       protected:\r
-       virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\r
-       //}}AFX_VIRTUAL\r
-\r
-// Implementation\r
-protected:\r
-       StringMap m_strMap;\r
-       // Generated message map functions\r
-       //{{AFX_MSG(CObjectPropsCustomAttrs)\r
-       virtual BOOL OnInitDialog();\r
-       afx_msg void OnButtonAdd();\r
-       afx_msg void OnButtonEdit();\r
-       afx_msg void OnButtonDelete();\r
-       afx_msg void OnItemchangedListAttributes(NMHDR* pNMHDR, LRESULT* pResult);\r
-       afx_msg void OnDblclkListAttributes(NMHDR* pNMHDR, LRESULT* pResult);\r
-       //}}AFX_MSG\r
-       DECLARE_MESSAGE_MAP()\r
-\r
-private:\r
-       NXC_OBJECT_UPDATE * m_pUpdate;\r
-};\r
-\r
-//{{AFX_INSERT_LOCATION}}\r
-// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
-\r
-#endif // !defined(AFX_OBJECTPROPSCUSTOMATTRS_H__1FCD36D6_FB2D_4664_A351_055FC2B17D19__INCLUDED_)\r
+#if !defined(AFX_OBJECTPROPSCUSTOMATTRS_H__1FCD36D6_FB2D_4664_A351_055FC2B17D19__INCLUDED_)
+#define AFX_OBJECTPROPSCUSTOMATTRS_H__1FCD36D6_FB2D_4664_A351_055FC2B17D19__INCLUDED_
+
+#include "..\..\..\INCLUDE\nms_util.h" // Added by ClassView
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+// ObjectPropsCustomAttrs.h : header file
+//
+
+/////////////////////////////////////////////////////////////////////////////
+// CObjectPropsCustomAttrs dialog
+
+class CObjectPropsCustomAttrs : public CPropertyPage
+{
+       DECLARE_DYNCREATE(CObjectPropsCustomAttrs)
+
+// Construction
+public:
+       NXC_OBJECT * m_pObject;
+       CObjectPropsCustomAttrs();
+       ~CObjectPropsCustomAttrs();
+
+// Dialog Data
+       //{{AFX_DATA(CObjectPropsCustomAttrs)
+       enum { IDD = IDD_OBJECT_CUSTOM_ATTRS };
+       CListCtrl       m_wndListCtrl;
+       //}}AFX_DATA
+
+
+// Overrides
+       // ClassWizard generate virtual function overrides
+       //{{AFX_VIRTUAL(CObjectPropsCustomAttrs)
+       public:
+       virtual void OnOK();
+       protected:
+       virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
+       //}}AFX_VIRTUAL
+
+// Implementation
+protected:
+       StringMap m_strMap;
+       // Generated message map functions
+       //{{AFX_MSG(CObjectPropsCustomAttrs)
+       virtual BOOL OnInitDialog();
+       afx_msg void OnButtonAdd();
+       afx_msg void OnButtonEdit();
+       afx_msg void OnButtonDelete();
+       afx_msg void OnItemchangedListAttributes(NMHDR* pNMHDR, LRESULT* pResult);
+       afx_msg void OnDblclkListAttributes(NMHDR* pNMHDR, LRESULT* pResult);
+       //}}AFX_MSG
+       DECLARE_MESSAGE_MAP()
+
+private:
+       NXC_OBJECT_UPDATE * m_pUpdate;
+};
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_OBJECTPROPSCUSTOMATTRS_H__1FCD36D6_FB2D_4664_A351_055FC2B17D19__INCLUDED_)
index a3473bb..db7d317 100644 (file)
-/* base64.c -- Encode binary data using printable characters.\r
-   Copyright (C) 1999, 2000, 2001, 2004, 2005, 2006 Free Software\r
-   Foundation, Inc.\r
-\r
-   This program is free software; you can redistribute it and/or modify\r
-   it under the terms of the GNU General Public License as published by\r
-   the Free Software Foundation; either version 2, or (at your option)\r
-   any later version.\r
-\r
-   This program is distributed in the hope that it will be useful,\r
-   but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-   GNU General Public License for more details.\r
-\r
-   You should have received a copy of the GNU General Public License\r
-   along with this program; if not, write to the Free Software Foundation,\r
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */\r
-\r
-/* Written by Simon Josefsson.  Partially adapted from GNU MailUtils\r
- * (mailbox/filter_trans.c, as of 2004-11-28).  Improved by review\r
- * from Paul Eggert, Bruno Haible, and Stepan Kasal.\r
- *\r
- * See also RFC 3548 <http://www.ietf.org/rfc/rfc3548.txt>.\r
- *\r
- * Be careful with error checking.  Here is how you would typically\r
- * use these functions:\r
- *\r
- * BOOL ok = base64_decode_alloc (in, inlen, &out, &outlen);\r
- * if (!ok)\r
- *   FAIL: input was not valid base64\r
- * if (out == NULL)\r
- *   FAIL: memory allocation error\r
- * OK: data in OUT/OUTLEN\r
- *\r
- * size_t outlen = base64_encode_alloc (in, inlen, &out);\r
- * if (out == NULL && outlen == 0 && inlen != 0)\r
- *   FAIL: input too long\r
- * if (out == NULL)\r
- *   FAIL: memory allocation error\r
- * OK: data in OUT/OUTLEN.\r
- *\r
- */\r
-\r
-#include "libnetxms.h"\r
-\r
-/* Get UCHAR_MAX. */\r
-#include <limits.h>\r
-\r
-/* C89 compliant way to cast 'char' to 'unsigned char'. */\r
-static inline unsigned char\r
-to_uchar (char ch)\r
-{\r
-  return ch;\r
-}\r
-\r
-/* Base64 encode IN array of size INLEN into OUT array of size OUTLEN.\r
-   If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as\r
-   possible.  If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero\r
-   terminate the output buffer. */\r
-void LIBNETXMS_EXPORTABLE\r
-base64_encode (const char *in, size_t inlen,\r
-              char *out, size_t outlen)\r
-{\r
-  static const char b64str[65] =\r
-    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";\r
-\r
-  while (inlen && outlen)\r
-    {\r
-      *out++ = b64str[(to_uchar (in[0]) >> 2) & 0x3f];\r
-      if (!--outlen)\r
-       break;\r
-      *out++ = b64str[((to_uchar (in[0]) << 4)\r
-                      + (--inlen ? to_uchar (in[1]) >> 4 : 0))\r
-                     & 0x3f];\r
-      if (!--outlen)\r
-       break;\r
-      *out++ =\r
-       (inlen\r
-        ? b64str[((to_uchar (in[1]) << 2)\r
-                  + (--inlen ? to_uchar (in[2]) >> 6 : 0))\r
-                 & 0x3f]\r
-        : '=');\r
-      if (!--outlen)\r
-       break;\r
-      *out++ = inlen ? b64str[to_uchar (in[2]) & 0x3f] : '=';\r
-      if (!--outlen)\r
-       break;\r
-      if (inlen)\r
-       inlen--;\r
-      if (inlen)\r
-       in += 3;\r
-    }\r
-\r
-  if (outlen)\r
-    *out = '\0';\r
-}\r
-\r
-/* Allocate a buffer and store zero terminated base64 encoded data\r
-   from array IN of size INLEN, returning BASE64_LENGTH(INLEN), i.e.,\r
-   the length of the encoded data, excluding the terminating zero.  On\r
-   return, the OUT variable will hold a pointer to newly allocated\r
-   memory that must be deallocated by the caller.  If output string\r
-   length would overflow, 0 is returned and OUT is set to NULL.  If\r
-   memory allocation failed, OUT is set to NULL, and the return value\r
-   indicates length of the requested memory block, i.e.,\r
-   BASE64_LENGTH(inlen) + 1. */\r
-size_t LIBNETXMS_EXPORTABLE\r
-base64_encode_alloc (const char *in, size_t inlen, char **out)\r
-{\r
-  size_t outlen = 1 + BASE64_LENGTH (inlen);\r
-\r
-  /* Check for overflow in outlen computation.\r
-   *\r
-   * If there is no overflow, outlen >= inlen.\r
-   *\r
-   * If the operation (inlen + 2) overflows then it yields at most +1, so\r
-   * outlen is 0.\r
-   *\r
-   * If the multiplication overflows, we lose at least half of the\r
-   * correct value, so the result is < ((inlen + 2) / 3) * 2, which is\r
-   * less than (inlen + 2) * 0.66667, which is less than inlen as soon as\r
-   * (inlen > 4).\r
-   */\r
-  if (inlen > outlen)\r
-    {\r
-      *out = NULL;\r
-      return 0;\r
-    }\r
-\r
-  *out = (char *)malloc (outlen);\r
-  if (!*out)\r
-    return outlen;\r
-\r
-  base64_encode (in, inlen, *out, outlen);\r
-\r
-  return outlen - 1;\r
-}\r
-\r
-/* With this approach this file works independent of the charset used\r
-   (think EBCDIC).  However, it does assume that the characters in the\r
-   Base64 alphabet (A-Za-z0-9+/) are encoded in 0..255.  POSIX\r
-   1003.1-2001 require that char and unsigned char are 8-bit\r
-   quantities, though, taking care of that problem.  But this may be a\r
-   potential problem on non-POSIX C99 platforms.\r
-\r
-   IBM C V6 for AIX mishandles "#define B64(x) ...'x'...", so use "_"\r
-   as the formal parameter rather than "x".  */\r
-#define B64(_)                                 \\r
-  ((_) == 'A' ? 0                              \\r
-   : (_) == 'B' ? 1                            \\r
-   : (_) == 'C' ? 2                            \\r
-   : (_) == 'D' ? 3                            \\r
-   : (_) == 'E' ? 4                            \\r
-   : (_) == 'F' ? 5                            \\r
-   : (_) == 'G' ? 6                            \\r
-   : (_) == 'H' ? 7                            \\r
-   : (_) == 'I' ? 8                            \\r
-   : (_) == 'J' ? 9                            \\r
-   : (_) == 'K' ? 10                           \\r
-   : (_) == 'L' ? 11                           \\r
-   : (_) == 'M' ? 12                           \\r
-   : (_) == 'N' ? 13                           \\r
-   : (_) == 'O' ? 14                           \\r
-   : (_) == 'P' ? 15                           \\r
-   : (_) == 'Q' ? 16                           \\r
-   : (_) == 'R' ? 17                           \\r
-   : (_) == 'S' ? 18                           \\r
-   : (_) == 'T' ? 19                           \\r
-   : (_) == 'U' ? 20                           \\r
-   : (_) == 'V' ? 21                           \\r
-   : (_) == 'W' ? 22                           \\r
-   : (_) == 'X' ? 23                           \\r
-   : (_) == 'Y' ? 24                           \\r
-   : (_) == 'Z' ? 25                           \\r
-   : (_) == 'a' ? 26                           \\r
-   : (_) == 'b' ? 27                           \\r
-   : (_) == 'c' ? 28                           \\r
-   : (_) == 'd' ? 29                           \\r
-   : (_) == 'e' ? 30                           \\r
-   : (_) == 'f' ? 31                           \\r
-   : (_) == 'g' ? 32                           \\r
-   : (_) == 'h' ? 33                           \\r
-   : (_) == 'i' ? 34                           \\r
-   : (_) == 'j' ? 35                           \\r
-   : (_) == 'k' ? 36                           \\r
-   : (_) == 'l' ? 37                           \\r
-   : (_) == 'm' ? 38                           \\r
-   : (_) == 'n' ? 39                           \\r
-   : (_) == 'o' ? 40                           \\r
-   : (_) == 'p' ? 41                           \\r
-   : (_) == 'q' ? 42                           \\r
-   : (_) == 'r' ? 43                           \\r
-   : (_) == 's' ? 44                           \\r
-   : (_) == 't' ? 45                           \\r
-   : (_) == 'u' ? 46                           \\r
-   : (_) == 'v' ? 47                           \\r
-   : (_) == 'w' ? 48                           \\r
-   : (_) == 'x' ? 49                           \\r
-   : (_) == 'y' ? 50                           \\r
-   : (_) == 'z' ? 51                           \\r
-   : (_) == '0' ? 52                           \\r
-   : (_) == '1' ? 53                           \\r
-   : (_) == '2' ? 54                           \\r
-   : (_) == '3' ? 55                           \\r
-   : (_) == '4' ? 56                           \\r
-   : (_) == '5' ? 57                           \\r
-   : (_) == '6' ? 58                           \\r
-   : (_) == '7' ? 59                           \\r
-   : (_) == '8' ? 60                           \\r
-   : (_) == '9' ? 61                           \\r
-   : (_) == '+' ? 62                           \\r
-   : (_) == '/' ? 63                           \\r
-   : -1)\r
-\r
-static const signed char b64[0x100] = {\r
-  B64 (0), B64 (1), B64 (2), B64 (3),\r
-  B64 (4), B64 (5), B64 (6), B64 (7),\r
-  B64 (8), B64 (9), B64 (10), B64 (11),\r
-  B64 (12), B64 (13), B64 (14), B64 (15),\r
-  B64 (16), B64 (17), B64 (18), B64 (19),\r
-  B64 (20), B64 (21), B64 (22), B64 (23),\r
-  B64 (24), B64 (25), B64 (26), B64 (27),\r
-  B64 (28), B64 (29), B64 (30), B64 (31),\r
-  B64 (32), B64 (33), B64 (34), B64 (35),\r
-  B64 (36), B64 (37), B64 (38), B64 (39),\r
-  B64 (40), B64 (41), B64 (42), B64 (43),\r
-  B64 (44), B64 (45), B64 (46), B64 (47),\r
-  B64 (48), B64 (49), B64 (50), B64 (51),\r
-  B64 (52), B64 (53), B64 (54), B64 (55),\r
-  B64 (56), B64 (57), B64 (58), B64 (59),\r
-  B64 (60), B64 (61), B64 (62), B64 (63),\r
-  B64 (64), B64 (65), B64 (66), B64 (67),\r
-  B64 (68), B64 (69), B64 (70), B64 (71),\r
-  B64 (72), B64 (73), B64 (74), B64 (75),\r
-  B64 (76), B64 (77), B64 (78), B64 (79),\r
-  B64 (80), B64 (81), B64 (82), B64 (83),\r
-  B64 (84), B64 (85), B64 (86), B64 (87),\r
-  B64 (88), B64 (89), B64 (90), B64 (91),\r
-  B64 (92), B64 (93), B64 (94), B64 (95),\r
-  B64 (96), B64 (97), B64 (98), B64 (99),\r
-  B64 (100), B64 (101), B64 (102), B64 (103),\r
-  B64 (104), B64 (105), B64 (106), B64 (107),\r
-  B64 (108), B64 (109), B64 (110), B64 (111),\r
-  B64 (112), B64 (113), B64 (114), B64 (115),\r
-  B64 (116), B64 (117), B64 (118), B64 (119),\r
-  B64 (120), B64 (121), B64 (122), B64 (123),\r
-  B64 (124), B64 (125), B64 (126), B64 (127),\r
-  B64 (128), B64 (129), B64 (130), B64 (131),\r
-  B64 (132), B64 (133), B64 (134), B64 (135),\r
-  B64 (136), B64 (137), B64 (138), B64 (139),\r
-  B64 (140), B64 (141), B64 (142), B64 (143),\r
-  B64 (144), B64 (145), B64 (146), B64 (147),\r
-  B64 (148), B64 (149), B64 (150), B64 (151),\r
-  B64 (152), B64 (153), B64 (154), B64 (155),\r
-  B64 (156), B64 (157), B64 (158), B64 (159),\r
-  B64 (160), B64 (161), B64 (162), B64 (163),\r
-  B64 (164), B64 (165), B64 (166), B64 (167),\r
-  B64 (168), B64 (169), B64 (170), B64 (171),\r
-  B64 (172), B64 (173), B64 (174), B64 (175),\r
-  B64 (176), B64 (177), B64 (178), B64 (179),\r
-  B64 (180), B64 (181), B64 (182), B64 (183),\r
-  B64 (184), B64 (185), B64 (186), B64 (187),\r
-  B64 (188), B64 (189), B64 (190), B64 (191),\r
-  B64 (192), B64 (193), B64 (194), B64 (195),\r
-  B64 (196), B64 (197), B64 (198), B64 (199),\r
-  B64 (200), B64 (201), B64 (202), B64 (203),\r
-  B64 (204), B64 (205), B64 (206), B64 (207),\r
-  B64 (208), B64 (209), B64 (210), B64 (211),\r
-  B64 (212), B64 (213), B64 (214), B64 (215),\r
-  B64 (216), B64 (217), B64 (218), B64 (219),\r
-  B64 (220), B64 (221), B64 (222), B64 (223),\r
-  B64 (224), B64 (225), B64 (226), B64 (227),\r
-  B64 (228), B64 (229), B64 (230), B64 (231),\r
-  B64 (232), B64 (233), B64 (234), B64 (235),\r
-  B64 (236), B64 (237), B64 (238), B64 (239),\r
-  B64 (240), B64 (241), B64 (242), B64 (243),\r
-  B64 (244), B64 (245), B64 (246), B64 (247),\r
-  B64 (248), B64 (249), B64 (250), B64 (251),\r
-  B64 (252), B64 (253), B64 (254), B64 (255)\r
-};\r
-\r
-#if UCHAR_MAX == 255\r
-# define uchar_in_range(c) true\r
-#else\r
-# define uchar_in_range(c) ((c) <= 255)\r
-#endif\r
-\r
-/* Return true if CH is a character from the Base64 alphabet, and\r
-   false otherwise.  Note that '=' is padding and not considered to be\r
-   part of the alphabet.  */\r
-BOOL LIBNETXMS_EXPORTABLE\r
-isbase64 (char ch)\r
-{\r
-  return uchar_in_range (to_uchar (ch)) && 0 <= b64[to_uchar (ch)];\r
-}\r
-\r
-/* Decode base64 encoded input array IN of length INLEN to output\r
-   array OUT that can hold *OUTLEN bytes.  Return true if decoding was\r
-   successful, i.e. if the input was valid base64 data, false\r
-   otherwise.  If *OUTLEN is too small, as many bytes as possible will\r
-   be written to OUT.  On return, *OUTLEN holds the length of decoded\r
-   bytes in OUT.  Note that as soon as any non-alphabet characters are\r
-   encountered, decoding is stopped and false is returned.  This means\r
-   that, when applicable, you must remove any line terminators that is\r
-   part of the data stream before calling this function.  */\r
-BOOL LIBNETXMS_EXPORTABLE\r
-base64_decode (const char *in, size_t inlen,\r
-              char *out, size_t *outlen)\r
-{\r
-  size_t outleft = *outlen;\r
-\r
-  while (inlen >= 2)\r
-    {\r
-      if (!isbase64 (in[0]) || !isbase64 (in[1]))\r
-       break;\r
-\r
-      if (outleft)\r
-       {\r
-         *out++ = ((b64[to_uchar (in[0])] << 2)\r
-                   | (b64[to_uchar (in[1])] >> 4));\r
-         outleft--;\r
-       }\r
-\r
-      if (inlen == 2)\r
-       break;\r
-\r
-      if (in[2] == '=')\r
-       {\r
-         if (inlen != 4)\r
-           break;\r
-\r
-         if (in[3] != '=')\r
-           break;\r
-\r
-       }\r
-      else\r
-       {\r
-         if (!isbase64 (in[2]))\r
-           break;\r
-\r
-         if (outleft)\r
-           {\r
-             *out++ = (((b64[to_uchar (in[1])] << 4) & 0xf0)\r
-                       | (b64[to_uchar (in[2])] >> 2));\r
-             outleft--;\r
-           }\r
-\r
-         if (inlen == 3)\r
-           break;\r
-\r
-         if (in[3] == '=')\r
-           {\r
-             if (inlen != 4)\r
-               break;\r
-           }\r
-         else\r
-           {\r
-             if (!isbase64 (in[3]))\r
-               break;\r
-\r
-             if (outleft)\r
-               {\r
-                 *out++ = (((b64[to_uchar (in[2])] << 6) & 0xc0)\r
-                           | b64[to_uchar (in[3])]);\r
-                 outleft--;\r
-               }\r
-           }\r
-       }\r
-\r
-      in += 4;\r
-      inlen -= 4;\r
-    }\r
-\r
-  *outlen -= outleft;\r
-\r
-  if (inlen != 0)\r
-    return false;\r
-\r
-  return true;\r
-}\r
-\r
-/* Allocate an output buffer in *OUT, and decode the base64 encoded\r
-   data stored in IN of size INLEN to the *OUT buffer.  On return, the\r
-   size of the decoded data is stored in *OUTLEN.  OUTLEN may be NULL,\r
-   if the caller is not interested in the decoded length.  *OUT may be\r
-   NULL to indicate an out of memory error, in which case *OUTLEN\r
-   contains the size of the memory block needed.  The function returns\r
-   true on successful decoding and memory allocation errors.  (Use the\r
-   *OUT and *OUTLEN parameters to differentiate between successful\r
-   decoding and memory error.)  The function returns false if the\r
-   input was invalid, in which case *OUT is NULL and *OUTLEN is\r
-   undefined. */\r
-BOOL LIBNETXMS_EXPORTABLE\r
-base64_decode_alloc (const char *in, size_t inlen, char **out,\r
-                    size_t *outlen)\r
-{\r
-  /* This may allocate a few bytes too much, depending on input,\r
-     but it's not worth the extra CPU time to compute the exact amount.\r
-     The exact amount is 3 * inlen / 4, minus 1 if the input ends\r
-     with "=" and minus another 1 if the input ends with "==".\r
-     Dividing before multiplying avoids the possibility of overflow.  */\r
-  size_t needlen = 3 * (inlen / 4) + 2;\r
-\r
-  *out = (char *)malloc (needlen);\r
-  if (!*out)\r
-    return true;\r
-\r
-  if (!base64_decode (in, inlen, *out, &needlen))\r
-    {\r
-      free (*out);\r
-      *out = NULL;\r
-      return false;\r
-    }\r
-\r
-  if (outlen)\r
-    *outlen = needlen;\r
-\r
-  return true;\r
-}\r
+/* base64.c -- Encode binary data using printable characters.
+   Copyright (C) 1999, 2000, 2001, 2004, 2005, 2006 Free Software
+   Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Simon Josefsson.  Partially adapted from GNU MailUtils
+ * (mailbox/filter_trans.c, as of 2004-11-28).  Improved by review
+ * from Paul Eggert, Bruno Haible, and Stepan Kasal.
+ *
+ * See also RFC 3548 <http://www.ietf.org/rfc/rfc3548.txt>.
+ *
+ * Be careful with error checking.  Here is how you would typically
+ * use these functions:
+ *
+ * BOOL ok = base64_decode_alloc (in, inlen, &out, &outlen);
+ * if (!ok)
+ *   FAIL: input was not valid base64
+ * if (out == NULL)
+ *   FAIL: memory allocation error
+ * OK: data in OUT/OUTLEN
+ *
+ * size_t outlen = base64_encode_alloc (in, inlen, &out);
+ * if (out == NULL && outlen == 0 && inlen != 0)
+ *   FAIL: input too long
+ * if (out == NULL)
+ *   FAIL: memory allocation error
+ * OK: data in OUT/OUTLEN.
+ *
+ */
+
+#include "libnetxms.h"
+
+/* Get UCHAR_MAX. */
+#include <limits.h>
+
+/* C89 compliant way to cast 'char' to 'unsigned char'. */
+static inline unsigned char
+to_uchar (char ch)
+{
+  return ch;
+}
+
+/* Base64 encode IN array of size INLEN into OUT array of size OUTLEN.
+   If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as
+   possible.  If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero
+   terminate the output buffer. */
+void LIBNETXMS_EXPORTABLE
+base64_encode (const char *in, size_t inlen,
+              char *out, size_t outlen)
+{
+  static const char b64str[65] =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+  while (inlen && outlen)
+    {
+      *out++ = b64str[(to_uchar (in[0]) >> 2) & 0x3f];
+      if (!--outlen)
+       break;
+      *out++ = b64str[((to_uchar (in[0]) << 4)
+                      + (--inlen ? to_uchar (in[1]) >> 4 : 0))
+                     & 0x3f];
+      if (!--outlen)
+       break;
+      *out++ =
+       (inlen
+        ? b64str[((to_uchar (in[1]) << 2)
+                  + (--inlen ? to_uchar (in[2]) >> 6 : 0))
+                 & 0x3f]
+        : '=');
+      if (!--outlen)
+       break;
+      *out++ = inlen ? b64str[to_uchar (in[2]) & 0x3f] : '=';
+      if (!--outlen)
+       break;
+      if (inlen)
+       inlen--;
+      if (inlen)
+       in += 3;
+    }
+
+  if (outlen)
+    *out = '\0';
+}
+
+/* Allocate a buffer and store zero terminated base64 encoded data
+   from array IN of size INLEN, returning BASE64_LENGTH(INLEN), i.e.,
+   the length of the encoded data, excluding the terminating zero.  On
+   return, the OUT variable will hold a pointer to newly allocated
+   memory that must be deallocated by the caller.  If output string
+   length would overflow, 0 is returned and OUT is set to NULL.  If
+   memory allocation failed, OUT is set to NULL, and the return value
+   indicates length of the requested memory block, i.e.,
+   BASE64_LENGTH(inlen) + 1. */
+size_t LIBNETXMS_EXPORTABLE
+base64_encode_alloc (const char *in, size_t inlen, char **out)
+{
+  size_t outlen = 1 + BASE64_LENGTH (inlen);
+
+  /* Check for overflow in outlen computation.
+   *
+   * If there is no overflow, outlen >= inlen.
+   *
+   * If the operation (inlen + 2) overflows then it yields at most +1, so
+   * outlen is 0.
+   *
+   * If the multiplication overflows, we lose at least half of the
+   * correct value, so the result is < ((inlen + 2) / 3) * 2, which is
+   * less than (inlen + 2) * 0.66667, which is less than inlen as soon as
+   * (inlen > 4).
+   */
+  if (inlen > outlen)
+    {
+      *out = NULL;
+      return 0;
+    }
+
+  *out = (char *)malloc (outlen);
+  if (!*out)
+    return outlen;
+
+  base64_encode (in, inlen, *out, outlen);
+
+  return outlen - 1;
+}
+
+/* With this approach this file works independent of the charset used
+   (think EBCDIC).  However, it does assume that the characters in the
+   Base64 alphabet (A-Za-z0-9+/) are encoded in 0..255.  POSIX
+   1003.1-2001 require that char and unsigned char are 8-bit
+   quantities, though, taking care of that problem.  But this may be a
+   potential problem on non-POSIX C99 platforms.
+
+   IBM C V6 for AIX mishandles "#define B64(x) ...'x'...", so use "_"
+   as the formal parameter rather than "x".  */
+#define B64(_)                                 \
+  ((_) == 'A' ? 0                              \
+   : (_) == 'B' ? 1                            \
+   : (_) == 'C' ? 2                            \
+   : (_) == 'D' ? 3                            \
+   : (_) == 'E' ? 4                            \
+   : (_) == 'F' ? 5                            \
+   : (_) == 'G' ? 6                            \
+   : (_) == 'H' ? 7                            \
+   : (_) == 'I' ? 8                            \
+   : (_) == 'J' ? 9                            \
+   : (_) == 'K' ? 10                           \
+   : (_) == 'L' ? 11                           \
+   : (_) == 'M' ? 12                           \
+   : (_) == 'N' ? 13                           \
+   : (_) == 'O' ? 14                           \
+   : (_) == 'P' ? 15                           \
+   : (_) == 'Q' ? 16                           \
+   : (_) == 'R' ? 17                           \
+   : (_) == 'S' ? 18                           \
+   : (_) == 'T' ? 19                           \
+   : (_) == 'U' ? 20                           \
+   : (_) == 'V' ? 21                           \
+   : (_) == 'W' ? 22                           \
+   : (_) == 'X' ? 23                           \
+   : (_) == 'Y' ? 24                           \
+   : (_) == 'Z' ? 25                           \
+   : (_) == 'a' ? 26                           \
+   : (_) == 'b' ? 27                           \
+   : (_) == 'c' ? 28                           \
+   : (_) == 'd' ? 29                           \
+   : (_) == 'e' ? 30                           \
+   : (_) == 'f' ? 31                           \
+   : (_) == 'g' ? 32                           \
+   : (_) == 'h' ? 33                           \
+   : (_) == 'i' ? 34                           \
+   : (_) == 'j' ? 35                           \
+   : (_) == 'k' ? 36                           \
+   : (_) == 'l' ? 37                           \
+   : (_) == 'm' ? 38                           \
+   : (_) == 'n' ? 39                           \
+   : (_) == 'o' ? 40                           \
+   : (_) == 'p' ? 41                           \
+   : (_) == 'q' ? 42                           \
+   : (_) == 'r' ? 43                           \
+   : (_) == 's' ? 44                           \
+   : (_) == 't' ? 45                           \
+   : (_) == 'u' ? 46                           \
+   : (_) == 'v' ? 47                           \
+   : (_) == 'w' ? 48                           \
+   : (_) == 'x' ? 49                           \
+   : (_) == 'y' ? 50                           \
+   : (_) == 'z' ? 51                           \
+   : (_) == '0' ? 52                           \
+   : (_) == '1' ? 53                           \
+   : (_) == '2' ? 54                           \
+   : (_) == '3' ? 55                           \
+   : (_) == '4' ? 56                           \
+   : (_) == '5' ? 57                           \
+   : (_) == '6' ? 58                           \
+   : (_) == '7' ? 59                           \
+   : (_) == '8' ? 60                           \
+   : (_) == '9' ? 61                           \
+   : (_) == '+' ? 62                           \
+   : (_) == '/' ? 63                           \
+   : -1)
+
+static const signed char b64[0x100] = {
+  B64 (0), B64 (1), B64 (2), B64 (3),
+  B64 (4), B64 (5), B64 (6), B64 (7),
+  B64 (8), B64 (9), B64 (10), B64 (11),
+  B64 (12), B64 (13), B64 (14), B64 (15),
+  B64 (16), B64 (17), B64 (18), B64 (19),
+  B64 (20), B64 (21), B64 (22), B64 (23),
+  B64 (24), B64 (25), B64 (26), B64 (27),
+  B64 (28), B64 (29), B64 (30), B64 (31),
+  B64 (32), B64 (33), B64 (34), B64 (35),
+  B64 (36), B64 (37), B64 (38), B64 (39),
+  B64 (40), B64 (41), B64 (42), B64 (43),
+  B64 (44), B64 (45), B64 (46), B64 (47),
+  B64 (48), B64 (49), B64 (50), B64 (51),
+  B64 (52), B64 (53), B64 (54), B64 (55),
+  B64 (56), B64 (57), B64 (58), B64 (59),
+  B64 (60), B64 (61), B64 (62), B64 (63),
+  B64 (64), B64 (65), B64 (66), B64 (67),
+  B64 (68), B64 (69), B64 (70), B64 (71),
+  B64 (72), B64 (73), B64 (74), B64 (75),
+  B64 (76), B64 (77), B64 (78), B64 (79),
+  B64 (80), B64 (81), B64 (82), B64 (83),
+  B64 (84), B64 (85), B64 (86), B64 (87),
+  B64 (88), B64 (89), B64 (90), B64 (91),
+  B64 (92), B64 (93), B64 (94), B64 (95),
+  B64 (96), B64 (97), B64 (98), B64 (99),
+  B64 (100), B64 (101), B64 (102), B64 (103),
+  B64 (104), B64 (105), B64 (106), B64 (107),
+  B64 (108), B64 (109), B64 (110), B64 (111),
+  B64 (112), B64 (113), B64 (114), B64 (115),
+  B64 (116), B64 (117), B64 (118), B64 (119),
+  B64 (120), B64 (121), B64 (122), B64 (123),
+  B64 (124), B64 (125), B64 (126), B64 (127),
+  B64 (128), B64 (129), B64 (130), B64 (131),
+  B64 (132), B64 (133), B64 (134), B64 (135),
+  B64 (136), B64 (137), B64 (138), B64 (139),
+  B64 (140), B64 (141), B64 (142), B64 (143),
+  B64 (144), B64 (145), B64 (146), B64 (147),
+  B64 (148), B64 (149), B64 (150), B64 (151),
+  B64 (152), B64 (153), B64 (154), B64 (155),
+  B64 (156), B64 (157), B64 (158), B64 (159),
+  B64 (160), B64 (161), B64 (162), B64 (163),
+  B64 (164), B64 (165), B64 (166), B64 (167),
+  B64 (168), B64 (169), B64 (170), B64 (171),
+  B64 (172), B64 (173), B64 (174), B64 (175),
+  B64 (176), B64 (177), B64 (178), B64 (179),
+  B64 (180), B64 (181), B64 (182), B64 (183),
+  B64 (184), B64 (185), B64 (186), B64 (187),
+  B64 (188), B64 (189), B64 (190), B64 (191),
+  B64 (192), B64 (193), B64 (194), B64 (195),
+  B64 (196), B64 (197), B64 (198), B64 (199),
+  B64 (200), B64 (201), B64 (202), B64 (203),
+  B64 (204), B64 (205), B64 (206), B64 (207),
+  B64 (208), B64 (209), B64 (210), B64 (211),
+  B64 (212), B64 (213), B64 (214), B64 (215),
+  B64 (216), B64 (217), B64 (218), B64 (219),
+  B64 (220), B64 (221), B64 (222), B64 (223),
+  B64 (224), B64 (225), B64 (226), B64 (227),
+  B64 (228), B64 (229), B64 (230), B64 (231),
+  B64 (232), B64 (233), B64 (234), B64 (235),
+  B64 (236), B64 (237), B64 (238), B64 (239),
+  B64 (240), B64 (241), B64 (242), B64 (243),
+  B64 (244), B64 (245), B64 (246), B64 (247),
+  B64 (248), B64 (249), B64 (250), B64 (251),
+  B64 (252), B64 (253), B64 (254), B64 (255)
+};
+
+#if UCHAR_MAX == 255
+# define uchar_in_range(c) true
+#else
+# define uchar_in_range(c) ((c) <= 255)
+#endif
+
+/* Return true if CH is a character from the Base64 alphabet, and
+   false otherwise.  Note that '=' is padding and not considered to be
+   part of the alphabet.  */
+BOOL LIBNETXMS_EXPORTABLE
+isbase64 (char ch)
+{
+  return uchar_in_range (to_uchar (ch)) && 0 <= b64[to_uchar (ch)];
+}
+
+/* Decode base64 encoded input array IN of length INLEN to output
+   array OUT that can hold *OUTLEN bytes.  Return true if decoding was
+   successful, i.e. if the input was valid base64 data, false
+   otherwise.  If *OUTLEN is too small, as many bytes as possible will
+   be written to OUT.  On return, *OUTLEN holds the length of decoded
+   bytes in OUT.  Note that as soon as any non-alphabet characters are
+   encountered, decoding is stopped and false is returned.  This means
+   that, when applicable, you must remove any line terminators that is
+   part of the data stream before calling this function.  */
+BOOL LIBNETXMS_EXPORTABLE
+base64_decode (const char *in, size_t inlen,
+              char *out, size_t *outlen)
+{
+  size_t outleft = *outlen;
+
+  while (inlen >= 2)
+    {
+      if (!isbase64 (in[0]) || !isbase64 (in[1]))
+       break;
+
+      if (outleft)
+       {
+         *out++ = ((b64[to_uchar (in[0])] << 2)
+                   | (b64[to_uchar (in[1])] >> 4));
+         outleft--;
+       }
+
+      if (inlen == 2)
+       break;
+
+      if (in[2] == '=')
+       {
+         if (inlen != 4)
+           break;
+
+         if (in[3] != '=')
+           break;
+
+       }
+      else
+       {
+         if (!isbase64 (in[2]))
+           break;
+
+         if (outleft)
+           {
+             *out++ = (((b64[to_uchar (in[1])] << 4) & 0xf0)
+                       | (b64[to_uchar (in[2])] >> 2));
+             outleft--;
+           }
+
+         if (inlen == 3)
+           break;
+
+         if (in[3] == '=')
+           {
+             if (inlen != 4)
+               break;
+           }
+         else
+           {
+             if (!isbase64 (in[3]))
+               break;
+
+             if (outleft)
+               {
+                 *out++ = (((b64[to_uchar (in[2])] << 6) & 0xc0)
+                           | b64[to_uchar (in[3])]);
+                 outleft--;
+               }
+           }
+       }
+
+      in += 4;
+      inlen -= 4;
+    }
+
+  *outlen -= outleft;
+
+  if (inlen != 0)
+    return false;
+
+  return true;
+}
+
+/* Allocate an output buffer in *OUT, and decode the base64 encoded
+   data stored in IN of size INLEN to the *OUT buffer.  On return, the
+   size of the decoded data is stored in *OUTLEN.  OUTLEN may be NULL,
+   if the caller is not interested in the decoded length.  *OUT may be
+   NULL to indicate an out of memory error, in which case *OUTLEN
+   contains the size of the memory block needed.  The function returns
+   true on successful decoding and memory allocation errors.  (Use the
+   *OUT and *OUTLEN parameters to differentiate between successful
+   decoding and memory error.)  The function returns false if the
+   input was invalid, in which case *OUT is NULL and *OUTLEN is
+   undefined. */
+BOOL LIBNETXMS_EXPORTABLE
+base64_decode_alloc (const char *in, size_t inlen, char **out,
+                    size_t *outlen)
+{
+  /* This may allocate a few bytes too much, depending on input,
+     but it's not worth the extra CPU time to compute the exact amount.
+     The exact amount is 3 * inlen / 4, minus 1 if the input ends
+     with "=" and minus another 1 if the input ends with "==".
+     Dividing before multiplying avoids the possibility of overflow.  */
+  size_t needlen = 3 * (inlen / 4) + 2;
+
+  *out = (char *)malloc (needlen);
+  if (!*out)
+    return true;
+
+  if (!base64_decode (in, inlen, *out, &needlen))
+    {
+      free (*out);
+      *out = NULL;
+      return false;
+    }
+
+  if (outlen)
+    *outlen = needlen;
+
+  return true;
+}
index 33724e9..5ba209b 100644 (file)
-/*-\r
- * Copyright (c) 1992 The Regents of the University of California.\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- * 3. Neither the name of the University nor the names of its contributors\r
- *    may be used to endorse or promote products derived from this software\r
- *    without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "libnetxms.h"\r
-\r
-#if !(HAVE_WCSTOLL)\r
-\r
-#ifndef UNDER_CE\r
-#include <sys/types.h>\r
-#include <errno.h>\r
-#endif\r
-\r
-#include <ctype.h>\r
-#include <stdlib.h>\r
-\r
-/*\r
- * Convert a string to a long long.\r
- *\r
- * Ignores `locale' stuff.  Assumes that the upper and lower case\r
- * alphabets and digits are each contiguous.\r
- */\r
-\r
-INT64 LIBNETXMS_EXPORTABLE wcstoll(const WCHAR *nptr, WCHAR **endptr, int base)\r
-{\r
-       const WCHAR *s;\r
-       INT64 acc, cutoff;\r
-       wint_t c;\r
-       int neg, any, cutlim;\r
-\r
-       /*\r
-        * Skip white space and pick up leading +/- sign if any.\r
-        * If base is 0, allow 0x for hex and 0 for octal, else\r
-        * assume decimal; if base is already 16, allow 0x.\r
-        */\r
-       s = nptr;\r
-       do {\r
-               c = *s++;\r
-       } while (iswspace(c));\r
-       if (c == L'-') {\r
-               neg = 1;\r
-               c = *s++;\r
-       } else {\r
-               neg = 0;\r
-               if (c == L'+')\r
-                       c = *s++;\r
-       }\r
-       if ((base == 0 || base == 16) &&\r
-           c == L'0' && (*s == L'x' || *s == L'X')) {\r
-               c = s[1];\r
-               s += 2;\r
-               base = 16;\r
-       }\r
-       if (base == 0)\r
-               base = c == L'0' ? 8 : 10;\r
-\r
-       /*\r
-        * Compute the cutoff value between legal numbers and illegal\r
-        * numbers.  That is the largest legal value, divided by the\r
-        * base.  An input number that is greater than this value, if\r
-        * followed by a legal input character, is too big.  One that\r
-        * is equal to this value may be valid or not; the limit\r
-        * between valid and invalid numbers is then based on the last\r
-        * digit.  For instance, if the range for long longs is\r
-        * [-9223372036854775808..9223372036854775807] and the input base\r
-        * is 10, cutoff will be set to 922337203685477580 and cutlim to\r
-        * either 7 (neg==0) or 8 (neg==1), meaning that if we have\r
-        * accumulated a value > 922337203685477580, or equal but the\r
-        * next digit is > 7 (or 8), the number is too big, and we will\r
-        * return a range error.\r
-        *\r
-        * Set any if any `digits' consumed; make it negative to indicate\r
-        * overflow.\r
-        */\r
-       cutoff = neg ? LLONG_MIN : LLONG_MAX;\r
-       cutlim = (int)(cutoff % base);\r
-       cutoff /= base;\r
-       if (neg) {\r
-               if (cutlim > 0) {\r
-                       cutlim -= base;\r
-                       cutoff += 1;\r
-               }\r
-               cutlim = -cutlim;\r
-       }\r
-       for (acc = 0, any = 0;; c = *s++) {\r
-               if (iswdigit(c))\r
-                       c -= L'0';\r
-               else if (iswalpha(c))\r
-                       c -= iswupper(c) ? L'A' - 10 : L'a' - 10;\r
-               else\r
-                       break;\r
-               if (c >= base)\r
-                       break;\r
-               if (any < 0)\r
-                       continue;\r
-               if (neg) {\r
-                       if (acc < cutoff || (acc == cutoff && c > cutlim)) {\r
-                               any = -1;\r
-                               acc = LLONG_MIN;\r
-#ifndef UNDER_CE\r
-                               errno = ERANGE;\r
-#endif\r
-                       } else {\r
-                               any = 1;\r
-                               acc *= base;\r
-                               acc -= c;\r
-                       }\r
-               } else {\r
-                       if (acc > cutoff || (acc == cutoff && c > cutlim)) {\r
-                               any = -1;\r
-                               acc = LLONG_MAX;\r
-#ifndef UNDER_CE\r
-                               errno = ERANGE;\r
-#endif\r
-                       } else {\r
-                               any = 1;\r
-                               acc *= base;\r
-                               acc += c;\r
-                       }\r
-               }\r
-       }\r
-       if (endptr != 0)\r
-               *endptr = (WCHAR *) (any ? s - 1 : nptr);\r
-       return (acc);\r
-}\r
-\r
-#endif   /* !(HAVE_STRTOLL) */\r
+/*-
+ * Copyright (c) 1992 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "libnetxms.h"
+
+#if !(HAVE_WCSTOLL)
+
+#ifndef UNDER_CE
+#include <sys/types.h>
+#include <errno.h>
+#endif
+
+#include <ctype.h>
+#include <stdlib.h>
+
+/*
+ * Convert a string to a long long.
+ *
+ * Ignores `locale' stuff.  Assumes that the upper and lower case
+ * alphabets and digits are each contiguous.
+ */
+
+INT64 LIBNETXMS_EXPORTABLE wcstoll(const WCHAR *nptr, WCHAR **endptr, int base)
+{
+       const WCHAR *s;
+       INT64 acc, cutoff;
+       wint_t c;
+       int neg, any, cutlim;
+
+       /*
+        * Skip white space and pick up leading +/- sign if any.
+        * If base is 0, allow 0x for hex and 0 for octal, else
+        * assume decimal; if base is already 16, allow 0x.
+        */
+       s = nptr;
+       do {
+               c = *s++;
+       } while (iswspace(c));
+       if (c == L'-') {
+               neg = 1;
+               c = *s++;
+       } else {
+               neg = 0;
+               if (c == L'+')
+                       c = *s++;
+       }
+       if ((base == 0 || base == 16) &&
+           c == L'0' && (*s == L'x' || *s == L'X')) {
+               c = s[1];
+               s += 2;
+               base = 16;
+       }
+       if (base == 0)
+               base = c == L'0' ? 8 : 10;
+
+       /*
+        * Compute the cutoff value between legal numbers and illegal
+        * numbers.  That is the largest legal value, divided by the
+        * base.  An input number that is greater than this value, if
+        * followed by a legal input character, is too big.  One that
+        * is equal to this value may be valid or not; the limit
+        * between valid and invalid numbers is then based on the last
+        * digit.  For instance, if the range for long longs is
+        * [-9223372036854775808..9223372036854775807] and the input base
+        * is 10, cutoff will be set to 922337203685477580 and cutlim to
+        * either 7 (neg==0) or 8 (neg==1), meaning that if we have
+        * accumulated a value > 922337203685477580, or equal but the
+        * next digit is > 7 (or 8), the number is too big, and we will
+        * return a range error.
+        *
+        * Set any if any `digits' consumed; make it negative to indicate
+        * overflow.
+        */
+       cutoff = neg ? LLONG_MIN : LLONG_MAX;
+       cutlim = (int)(cutoff % base);
+       cutoff /= base;
+       if (neg) {
+               if (cutlim > 0) {
+                       cutlim -= base;
+                       cutoff += 1;
+               }
+               cutlim = -cutlim;
+       }
+       for (acc = 0, any = 0;; c = *s++) {
+               if (iswdigit(c))
+                       c -= L'0';
+               else if (iswalpha(c))
+                       c -= iswupper(c) ? L'A' - 10 : L'a' - 10;
+               else
+                       break;
+               if (c >= base)
+                       break;
+               if (any < 0)
+                       continue;
+               if (neg) {
+                       if (acc < cutoff || (acc == cutoff && c > cutlim)) {
+                               any = -1;
+                               acc = LLONG_MIN;
+#ifndef UNDER_CE
+                               errno = ERANGE;
+#endif
+                       } else {
+                               any = 1;
+                               acc *= base;
+                               acc -= c;
+                       }
+               } else {
+                       if (acc > cutoff || (acc == cutoff && c > cutlim)) {
+                               any = -1;
+                               acc = LLONG_MAX;
+#ifndef UNDER_CE
+                               errno = ERANGE;
+#endif
+                       } else {
+                               any = 1;
+                               acc *= base;
+                               acc += c;
+                       }
+               }
+       }
+       if (endptr != 0)
+               *endptr = (WCHAR *) (any ? s - 1 : nptr);
+       return (acc);
+}
+
+#endif   /* !(HAVE_STRTOLL) */
index 41bf5f6..e408e84 100644 (file)
-/*-\r
- * Copyright (c) 1992 The Regents of the University of California.\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- * 3. Neither the name of the University nor the names of its contributors\r
- *    may be used to endorse or promote products derived from this software\r
- *    without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "libnetxms.h"\r
-\r
-#if !(HAVE_WCSTOULL)\r
-\r
-#ifndef UNDER_CE\r
-#include <sys/types.h>\r
-#include <errno.h>\r
-#endif\r
-\r
-#include <ctype.h>\r
-#include <limits.h>\r
-#include <stdlib.h>\r
-\r
-/*\r
- * Convert a string to an 64 bit unsigned integer.\r
- *\r
- * Ignores `locale' stuff.  Assumes that the upper and lower case\r
- * alphabets and digits are each contiguous.\r
- */\r
-\r
-QWORD LIBNETXMS_EXPORTABLE wcstoull(const WCHAR *nptr, WCHAR **endptr, int base)\r
-{\r
-       const WCHAR *s;\r
-       QWORD acc, cutoff;\r
-   wint_t c;\r
-       int neg, any, cutlim;\r
-\r
-       /*\r
-        * See strtoq for comments as to the logic used.\r
-        */\r
-       s = nptr;\r
-       do {\r
-               c = *s++;\r
-       } while (iswspace(c));\r
-       if (c == L'-') {\r
-               neg = 1;\r
-               c = *s++;\r
-       } else { \r
-               neg = 0;\r
-               if (c == L'+')\r
-                       c = *s++;\r
-       }\r
-       if ((base == 0 || base == 16) &&\r
-           c == L'0' && (*s == L'x' || *s == L'X')) {\r
-               c = s[1];\r
-               s += 2;\r
-               base = 16;\r
-       }\r
-       if (base == 0)\r
-               base = c == L'0' ? 8 : 10;\r
-\r
-       cutoff = ULLONG_MAX / (QWORD)base;\r
-       cutlim = (int)(ULLONG_MAX % (QWORD)base);\r
-       for (acc = 0, any = 0;; c = *s++) {\r
-               if (iswdigit(c))\r
-                       c -= L'0';\r
-               else if (iswalpha(c))\r
-                       c -= iswupper(c) ? L'A' - 10 : L'a' - 10;\r
-               else\r
-                       break;\r
-               if (c >= base)\r
-                       break;\r
-               if (any < 0)\r
-                       continue;\r
-               if (acc > cutoff || (acc == cutoff && c > cutlim)) {\r
-                       any = -1;\r
-                       acc = ULLONG_MAX;\r
-#ifndef UNDER_CE\r
-                       errno = ERANGE;\r
-#endif\r
-               } else {\r
-                       any = 1;\r
-                       acc *= (QWORD)base;\r
-                       acc += c;\r
-               }\r
-       }\r
-       if (neg && any > 0)\r
-               acc = ~acc + 1;\r
-       if (endptr != 0)\r
-               *endptr = (WCHAR *) (any ? s - 1 : nptr);\r
-       return (acc);\r
-}\r
-\r
-#endif   /* !(HAVE_STRTOULL) */\r
+/*-
+ * Copyright (c) 1992 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "libnetxms.h"
+
+#if !(HAVE_WCSTOULL)
+
+#ifndef UNDER_CE
+#include <sys/types.h>
+#include <errno.h>
+#endif
+
+#include <ctype.h>
+#include <limits.h>
+#include <stdlib.h>
+
+/*
+ * Convert a string to an 64 bit unsigned integer.
+ *
+ * Ignores `locale' stuff.  Assumes that the upper and lower case
+ * alphabets and digits are each contiguous.
+ */
+
+QWORD LIBNETXMS_EXPORTABLE wcstoull(const WCHAR *nptr, WCHAR **endptr, int base)
+{
+       const WCHAR *s;
+       QWORD acc, cutoff;
+   wint_t c;
+       int neg, any, cutlim;
+
+       /*
+        * See strtoq for comments as to the logic used.
+        */
+       s = nptr;
+       do {
+               c = *s++;
+       } while (iswspace(c));
+       if (c == L'-') {
+               neg = 1;
+               c = *s++;
+       } else { 
+               neg = 0;
+               if (c == L'+')
+                       c = *s++;
+       }
+       if ((base == 0 || base == 16) &&
+           c == L'0' && (*s == L'x' || *s == L'X')) {
+               c = s[1];
+               s += 2;
+               base = 16;
+       }
+       if (base == 0)
+               base = c == L'0' ? 8 : 10;
+
+       cutoff = ULLONG_MAX / (QWORD)base;
+       cutlim = (int)(ULLONG_MAX % (QWORD)base);
+       for (acc = 0, any = 0;; c = *s++) {
+               if (iswdigit(c))
+                       c -= L'0';
+               else if (iswalpha(c))
+                       c -= iswupper(c) ? L'A' - 10 : L'a' - 10;
+               else
+                       break;
+               if (c >= base)
+                       break;
+               if (any < 0)
+                       continue;
+               if (acc > cutoff || (acc == cutoff && c > cutlim)) {
+                       any = -1;
+                       acc = ULLONG_MAX;
+#ifndef UNDER_CE
+                       errno = ERANGE;
+#endif
+               } else {
+                       any = 1;
+                       acc *= (QWORD)base;
+                       acc += c;
+               }
+       }
+       if (neg && any > 0)
+               acc = ~acc + 1;
+       if (endptr != 0)
+               *endptr = (WCHAR *) (any ? s - 1 : nptr);
+       return (acc);
+}
+
+#endif   /* !(HAVE_STRTOULL) */
index a497121..b107419 100644 (file)
@@ -1,89 +1,89 @@
-/* $Id$ */\r
-/* \r
-** NetXMS - Network Management System\r
-** Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Victor Kirhenshtein\r
-**\r
-** This program is free software; you can redistribute it and/or modify\r
-** it under the terms of the GNU General Public License as published by\r
-** the Free Software Foundation; either version 2 of the License, or\r
-** (at your option) any later version.\r
-**\r
-** This program is distributed in the hope that it will be useful,\r
-** but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-** GNU General Public License for more details.\r
-**\r
-** You should have received a copy of the GNU General Public License\r
-** along with this program; if not, write to the Free Software\r
-** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
-**\r
-** File: xml.cpp\r
-**\r
-**/\r
-\r
-#include "libnetxms.h"\r
-\r
-\r
-//\r
-// Encode string for XML\r
-//\r
-\r
-TCHAR LIBNETXMS_EXPORTABLE *EscapeStringForXML(const TCHAR *string, int length)\r
-{\r
-       TCHAR *out;\r
-       const TCHAR *in;\r
-       int inLen, outLen, pos;\r
-\r
-       // Calculate length\r
-       inLen = (length == -1) ? _tcslen(string) : length;\r
-       for(in = string, outLen = 0; (inLen > 0) && (*in != 0); in++, outLen++, inLen--)\r
-               if ((*in == _T('&')) || (*in == _T('<')) ||\r
-                   (*in == _T('>')) || (*in == _T('"')) ||\r
-                        (*in < 32))\r
-                       outLen += 5;\r
-       outLen++;\r
-       \r
-       // Convert string\r
-       out = (TCHAR *)malloc(outLen * sizeof(TCHAR));\r
-       inLen = (length == -1) ? _tcslen(string) : length;\r
-       for(in = string, pos = 0; inLen > 0; in++, inLen--)\r
-       {\r
-               switch(*in)\r
-               {\r
-                       case _T('&'):\r
-                               _tcscpy(&out[pos], _T("&amp;"));\r
-                               pos += 5;\r
-                               break;\r
-                       case _T('<'):\r
-                               _tcscpy(&out[pos], _T("&lt;"));\r
-                               pos += 4;\r
-                               break;\r
-                       case _T('>'):\r
-                               _tcscpy(&out[pos], _T("&gt;"));\r
-                               pos += 4;\r
-                               break;\r
-                       case _T('"'):\r
-                               _tcscpy(&out[pos], _T("&quot;"));\r
-                               pos += 6;\r
-                               break;\r
-                       case _T('\''):\r
-                               _tcscpy(&out[pos], _T("&apos;"));\r
-                               pos += 6;\r
-                               break;\r
-                       default:\r
-                               if (*in < 32)\r
-                               {\r
-                                       _sntprintf(&out[pos], 8, _T("&#x%02d;"), *in);\r
-                                       pos += 6;\r
-                               }\r
-                               else\r
-                               {\r
-                                       out[pos++] = *in;\r
-                               }\r
-                               break;\r
-               }\r
-       }\r
-       out[pos] = 0;\r
-\r
-       return out;\r
-}\r
+/* $Id$ */
+/* 
+** NetXMS - Network Management System
+** Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Victor Kirhenshtein
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** File: xml.cpp
+**
+**/
+
+#include "libnetxms.h"
+
+
+//
+// Encode string for XML
+//
+
+TCHAR LIBNETXMS_EXPORTABLE *EscapeStringForXML(const TCHAR *string, int length)
+{
+       TCHAR *out;
+       const TCHAR *in;
+       int inLen, outLen, pos;
+
+       // Calculate length
+       inLen = (length == -1) ? _tcslen(string) : length;
+       for(in = string, outLen = 0; (inLen > 0) && (*in != 0); in++, outLen++, inLen--)
+               if ((*in == _T('&')) || (*in == _T('<')) ||
+                   (*in == _T('>')) || (*in == _T('"')) ||
+                        (*in < 32))
+                       outLen += 5;
+       outLen++;
+       
+       // Convert string
+       out = (TCHAR *)malloc(outLen * sizeof(TCHAR));
+       inLen = (length == -1) ? _tcslen(string) : length;
+       for(in = string, pos = 0; inLen > 0; in++, inLen--)
+       {
+               switch(*in)
+               {
+                       case _T('&'):
+                               _tcscpy(&out[pos], _T("&amp;"));
+                               pos += 5;
+                               break;
+                       case _T('<'):
+                               _tcscpy(&out[pos], _T("&lt;"));
+                               pos += 4;
+                               break;
+                       case _T('>'):
+                               _tcscpy(&out[pos], _T("&gt;"));
+                               pos += 4;
+                               break;
+                       case _T('"'):
+                               _tcscpy(&out[pos], _T("&quot;"));
+                               pos += 6;
+                               break;
+                       case _T('\''):
+                               _tcscpy(&out[pos], _T("&apos;"));
+                               pos += 6;
+                               break;
+                       default:
+                               if (*in < 32)
+                               {
+                                       _sntprintf(&out[pos], 8, _T("&#x%02d;"), *in);
+                                       pos += 6;
+                               }
+                               else
+                               {
+                                       out[pos++] = *in;
+                               }
+                               break;
+               }
+       }
+       out[pos] = 0;
+
+       return out;
+}
index dc66eb9..64e196d 100644 (file)
-/* \r
-** NetXMS - Network Management System\r
-** NetXMS Scripting Language Interpreter\r
-** Copyright (C) 2005, 2006, 2007, 2008 Victor Kirhenshtein\r
-**\r
-** This program is free software; you can redistribute it and/or modify\r
-** it under the terms of the GNU General Public License as published by\r
-** the Free Software Foundation; either version 2 of the License, or\r
-** (at your option) any later version.\r
-**\r
-** This program is distributed in the hope that it will be useful,\r
-** but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-** GNU General Public License for more details.\r
-**\r
-** You should have received a copy of the GNU General Public License\r
-** along with this program; if not, write to the Free Software\r
-** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
-**\r
-** File: array.cpp\r
-**\r
-**/\r
-\r
-#include "libnxsl.h"\r
-\r
-\r
-//\r
-// Array constructors\r
-//\r
-\r
-NXSL_Array::NXSL_Array()\r
-{\r
-       m_refCount = 0;\r
-       m_size = 0;\r
-       m_allocated = 0;\r
-       m_data = NULL;\r
-}\r
-\r
-NXSL_Array::NXSL_Array(NXSL_Array *src)\r
-{\r
-       int i;\r
-\r
-       m_refCount = 0;\r
-       m_size = src->m_size;\r
-       m_allocated = src->m_size;\r
-       if (m_size > 0)\r
-       {\r
-               m_data = (NXSL_ArrayElement *)malloc(sizeof(NXSL_ArrayElement) * m_size);\r
-               for(i = 0; i < m_size; i++)\r
-               {\r
-                       m_data[i].index = src->m_data[i].index;\r
-                       m_data[i].value = new NXSL_Value(src->m_data[i].value);\r
-               }\r
-       }\r
-       else\r
-       {\r
-               m_data = NULL;\r
-       }\r
-}\r
-\r
-\r
-//\r
-// Array destructor\r
-//\r
-\r
-NXSL_Array::~NXSL_Array()\r
-{\r
-       int i;\r
-\r
-       for(i = 0; i < m_size; i++)\r
-               delete m_data[i].value;\r
-       safe_free(m_data);\r
-}\r
-\r
-\r
-//\r
-// Compare two ints\r
-//\r
-\r
-static int CompareElements(const void *p1, const void *p2)\r
-{\r
-       return COMPARE_NUMBERS(((NXSL_ArrayElement *)p1)->index, ((NXSL_ArrayElement *)p2)->index);\r
-}\r
-\r
-\r
-//\r
-// Get element\r
-//\r
-\r
-NXSL_Value *NXSL_Array::Get(int index)\r
-{\r
-       NXSL_ArrayElement *element, key;\r
-\r
-       key.index = index;\r
-       element = (NXSL_ArrayElement *)bsearch(&key, m_data, m_size, sizeof(NXSL_ArrayElement), CompareElements);\r
-       return (element != NULL) ? element->value : NULL;\r
-}\r
-\r
-\r
-//\r
-// Set element\r
-//\r
-\r
-void NXSL_Array::Set(int index, NXSL_Value *value)\r
-{\r
-       NXSL_ArrayElement *element, key;\r
-\r
-       key.index = index;\r
-       element = (NXSL_ArrayElement *)bsearch(&key, m_data, m_size, sizeof(NXSL_ArrayElement), CompareElements);\r
-       if (element != NULL)\r
-       {\r
-               delete element->value;\r
-               element->value = value;\r
-       }\r
-       else\r
-       {\r
-               if (m_size == m_allocated)\r
-               {\r
-                       m_allocated += 32;\r
-                       m_data = (NXSL_ArrayElement *)realloc(m_data, sizeof(NXSL_ArrayElement) * m_allocated);\r
-               }\r
-               m_data[m_size].index = index;\r
-               m_data[m_size].value = value;\r
-               m_size++;\r
-               qsort(m_data, m_size, sizeof(NXSL_ArrayElement), CompareElements);\r
-       }\r
-}\r
+/* 
+** NetXMS - Network Management System
+** NetXMS Scripting Language Interpreter
+** Copyright (C) 2005, 2006, 2007, 2008 Victor Kirhenshtein
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** File: array.cpp
+**
+**/
+
+#include "libnxsl.h"
+
+
+//
+// Array constructors
+//
+
+NXSL_Array::NXSL_Array()
+{
+       m_refCount = 0;
+       m_size = 0;
+       m_allocated = 0;
+       m_data = NULL;
+}
+
+NXSL_Array::NXSL_Array(NXSL_Array *src)
+{
+       int i;
+
+       m_refCount = 0;
+       m_size = src->m_size;
+       m_allocated = src->m_size;
+       if (m_size > 0)
+       {
+               m_data = (NXSL_ArrayElement *)malloc(sizeof(NXSL_ArrayElement) * m_size);
+               for(i = 0; i < m_size; i++)
+               {
+                       m_data[i].index = src->m_data[i].index;
+                       m_data[i].value = new NXSL_Value(src->m_data[i].value);
+               }
+       }
+       else
+       {
+               m_data = NULL;
+       }
+}
+
+
+//
+// Array destructor
+//
+
+NXSL_Array::~NXSL_Array()
+{
+       int i;
+
+       for(i = 0; i < m_size; i++)
+               delete m_data[i].value;
+       safe_free(m_data);
+}
+
+
+//
+// Compare two ints
+//
+
+static int CompareElements(const void *p1, const void *p2)
+{
+       return COMPARE_NUMBERS(((NXSL_ArrayElement *)p1)->index, ((NXSL_ArrayElement *)p2)->index);
+}
+
+
+//
+// Get element
+//
+
+NXSL_Value *NXSL_Array::Get(int index)
+{
+       NXSL_ArrayElement *element, key;
+
+       key.index = index;
+       element = (NXSL_ArrayElement *)bsearch(&key, m_data, m_size, sizeof(NXSL_ArrayElement), CompareElements);
+       return (element != NULL) ? element->value : NULL;
+}
+
+
+//
+// Set element
+//
+
+void NXSL_Array::Set(int index, NXSL_Value *value)
+{
+       NXSL_ArrayElement *element, key;
+
+       key.index = index;
+       element = (NXSL_ArrayElement *)bsearch(&key, m_data, m_size, sizeof(NXSL_ArrayElement), CompareElements);
+       if (element != NULL)
+       {
+               delete element->value;
+               element->value = value;
+       }
+       else
+       {
+               if (m_size == m_allocated)
+               {
+                       m_allocated += 32;
+                       m_data = (NXSL_ArrayElement *)realloc(m_data, sizeof(NXSL_ArrayElement) * m_allocated);
+               }
+               m_data[m_size].index = index;
+               m_data[m_size].value = value;
+               m_size++;
+               qsort(m_data, m_size, sizeof(NXSL_ArrayElement), CompareElements);
+       }
+}
index d593d7c..bb98c75 100644 (file)
@@ -1,17 +1,17 @@
-# Copyright (C) 2004 NetXMS Team <bugs@netxms.org>\r
-#  \r
-# This file is free software; as a special exception the author gives\r
-# unlimited permission to copy and/or distribute it, with or without \r
-# modifications, as long as this notice is preserved.\r
-# \r
-# This program is distributed in the hope that it will be useful, but\r
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the\r
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r
-\r
-INCLUDES=-I@top_srcdir@/include\r
-\r
-bin_PROGRAMS = nxcptest\r
-nxcptest_SOURCES = nxcptest.cpp\r
-nxcptest_LDADD = ../libnetxms/libnetxms.la\r
-\r
-EXTRA_DIST = nxcptest.dsp nxcptest.dsw nxcptest.h\r
+# Copyright (C) 2004 NetXMS Team <bugs@netxms.org>
+#  
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without 
+# modifications, as long as this notice is preserved.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+INCLUDES=-I@top_srcdir@/include
+
+bin_PROGRAMS = nxcptest
+nxcptest_SOURCES = nxcptest.cpp
+nxcptest_LDADD = ../libnetxms/libnetxms.la
+
+EXTRA_DIST = nxcptest.dsp nxcptest.dsw nxcptest.h
index 8767780..4f41d9d 100644 (file)
-/* $Id: nxscript.cpp 3272 2008-05-14 01:40:18Z alk $ */\r
-/* \r
-** NetXMS - Network Management System\r
-** NetXMS Scripting Host\r
-** Copyright (C) 2005, 2006, 2007, 2008 Victor Kirhenshtein\r
-**\r
-** This program is free software; you can redistribute it and/or modify\r
-** it under the terms of the GNU General Public License as published by\r
-** the Free Software Foundation; either version 2 of the License, or\r
-** (at your option) any later version.\r
-**\r
-** This program is distributed in the hope that it will be useful,\r
-** but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-** GNU General Public License for more details.\r
-**\r
-** You should have received a copy of the GNU General Public License\r
-** along with this program; if not, write to the Free Software\r
-** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
-**\r
-** File: nxcptest.cpp\r
-**\r
-**/\r
-\r
-#include "nxcptest.h"\r
-\r
-\r
-//\r
-// Constants\r
-//\r
-\r
-#define RAW_MSG_SIZE    262144\r
-\r
-\r
-//\r
-// Help text\r
-//\r
-\r
-static char m_szHelpText[] =\r
-   "NetXMS Communication Protocol Tester  Version " NETXMS_VERSION_STRING "\n"\r
-   "Copyright (c) 2008 Victor Kirhenshtein\n\n"\r
-   "Usage:\n"\r
-   "   nxcptest [options] host\n\n"\r
-   "Where valid options are:\n"\r
-   "   -h         : Show this help\n"\r
-       "   -p port    : Port to connect (default 4700)\n"\r
-   "   -v         : Show version and exit\n"\r
-   "\n";\r
-\r
-\r
-//\r
-// Receiver thread\r
-//\r
-\r
-static THREAD_RESULT THREAD_CALL RecvThread(void *arg)\r
-{\r
-   CSCP_MESSAGE *pRawMsg;\r
-   CSCPMessage *pMsg;\r
-       CSCP_BUFFER *pMsgBuffer;\r
-       CSCP_ENCRYPTION_CONTEXT *pCtx = NULL;\r
-   BYTE *pDecryptionBuffer = NULL;\r
-   int iErr;\r
-   char *xml;\r
-   WORD wFlags;\r
-\r
-   // Initialize raw message receiving function\r
-       pMsgBuffer = (CSCP_BUFFER *)malloc(sizeof(CSCP_BUFFER));\r
-   RecvNXCPMessage(0, NULL, pMsgBuffer, 0, NULL, NULL, 0);\r
-\r
-   pRawMsg = (CSCP_MESSAGE *)malloc(RAW_MSG_SIZE);\r
-#ifdef _WITH_ENCRYPTION\r
-   pDecryptionBuffer = (BYTE *)malloc(RAW_MSG_SIZE);\r
-#endif\r
-   while(1)\r
-   {\r
-      if ((iErr = RecvNXCPMessage((SOCKET)arg, pRawMsg, pMsgBuffer, RAW_MSG_SIZE,\r
-                                  &pCtx, pDecryptionBuffer, INFINITE)) <= 0)\r
-      {\r
-         break;\r
-      }\r
-\r
-      // Check if message is too large\r
-      if (iErr == 1)\r
-               {\r
-         printf("RECV ERROR: message is too large\n");\r
-         continue;\r
-               }\r
-\r
-      // Check for decryption failure\r
-      if (iErr == 2)\r
-      {\r
-         printf("RECV ERROR: decryption failure\n");\r
-         continue;\r
-      }\r
-\r
-      // Check that actual received packet size is equal to encoded in packet\r
-      if ((int)ntohl(pRawMsg->dwSize) != iErr)\r
-      {\r
-         printf("RECV ERROR: Actual message size doesn't match wSize value (%d,%d)\n", iErr, ntohl(pRawMsg->dwSize));\r
-         continue;   // Bad packet, wait for next\r
-      }\r
-\r
-      wFlags = ntohs(pRawMsg->wFlags);\r
-      if (wFlags & MF_BINARY)\r
-      {\r
-                       printf("WARNING: Binary message received\n");\r
-      }\r
-      else\r
-      {\r
-         // Create message object from raw message\r
-         pMsg = new CSCPMessage(pRawMsg);\r
-                       xml = pMsg->CreateXML();\r
-                       if (xml != NULL)\r
-                       {\r
-                               puts(xml);\r
-                               free(xml);\r
-                       }\r
-      }\r
-   }\r
-   if (iErr < 0)\r
-      printf("Session terminated (socket error %d)\n", WSAGetLastError());\r
-       else\r
-               printf("Session closed\n");\r
-       free(pMsgBuffer);\r
-       free(pRawMsg);\r
-#ifdef _WITH_ENCRYPTION\r
-   free(pDecryptionBuffer);\r
-#endif\r
-\r
-       return THREAD_OK;\r
-}\r
-\r
-\r
-//\r
-// Read XML document from stdin\r
-//\r
-\r
-static BOOL ReadXML(String &xml)\r
-{\r
-       char buffer[8192];\r
-\r
-       xml = "";\r
-       while(1)\r
-       {\r
-               fgets(buffer, 8192, stdin);\r
-               if (feof(stdin))\r
-                       return FALSE;\r
-               if (!strcmp(buffer, "%%\n"))\r
-                       break;\r
-               xml += buffer;\r
-       }\r
-       return TRUE;\r
-}\r
-\r
-\r
-//\r
-// Do protocol excahnge\r
-//\r
-\r
-static void Exchange(SOCKET hSocket)\r
-{\r
-       String xml;\r
-       CSCPMessage *msg;\r
-       CSCP_MESSAGE *rawMsg;\r
-\r
-       ThreadCreate(RecvThread, 0, (void *)hSocket);\r
-       printf("Enter XML messages separated by %%%% string\n");\r
-       while(1)\r
-       {\r
-               if (!ReadXML(xml))\r
-                       break;\r
-               msg = new CSCPMessage(xml);\r
-               rawMsg = msg->CreateMessage();\r
-               delete msg;\r
-               if ((DWORD)SendEx(hSocket, rawMsg, ntohl(rawMsg->dwSize), 0) != ntohl(rawMsg->dwSize))\r
-               {\r
-                       printf("Error sending message\n");\r
-                       free(rawMsg);\r
-                       break;\r
-               }\r
-               free(rawMsg);\r
-       }\r
-       shutdown(hSocket, 2);\r
-}\r
-\r
-\r
-//\r
-// main()\r
-//\r
-\r
-int main(int argc, char *argv[])\r
-{\r
-   struct sockaddr_in sa;\r
-       int port = 4700, ch;\r
-       SOCKET hSocket;\r
-\r
-   // Parse command line\r
-   opterr = 1;\r
-   while((ch = getopt(argc, argv, "hp:v")) != -1)\r
-   {\r
-      switch(ch)\r
-      {\r
-         case 'h':\r
-                               printf(m_szHelpText);\r
-            return 0;\r
-         case 'v':\r
-                               printf("NetXMS Communication Protocol Tester  Version " NETXMS_VERSION_STRING "\n"\r
-                                      "Copyright (c) 2008 Victor Kirhenshtein\n\n");\r
-            return 0;\r
-                       case 'p':\r
-                               port = strtol(optarg, NULL, 0);\r
-                               break;\r
-         case '?':\r
-            return 1;\r
-         default:\r
-            break;\r
-      }\r
-   }\r
-\r
-   if (argc - optind < 1)\r
-   {\r
-      printf("Required arguments missing\n");\r
-      return 1;\r
-   }\r
-\r
-#ifdef _WIN32\r
-   WSADATA wsaData;\r
-\r
-   if (WSAStartup(2, &wsaData) != 0)\r
-   {\r
-      _tprintf(_T("Unable to initialize Windows sockets\n"));\r
-      return 4;\r
-   }\r
-#endif\r
-\r
-   // Create socket\r
-   hSocket = socket(AF_INET, SOCK_STREAM, 0);\r
-   if (hSocket == -1)\r
-   {\r
-      printf("Call to socket() failed");\r
-      goto connect_cleanup;\r
-   }\r
-\r
-   // Fill in address structure\r
-   memset(&sa, 0, sizeof(sa));\r
-   sa.sin_family = AF_INET;\r
-   sa.sin_addr.s_addr = ResolveHostName(argv[optind]);\r
-   sa.sin_port = htons((WORD)port);\r
-       if ((sa.sin_addr.s_addr == INADDR_ANY) || (sa.sin_addr.s_addr == INADDR_NONE))\r
-       {\r
-               printf("Cannot resolve host name or invalid IP address\n");\r
-               goto connect_cleanup;\r
-       }\r
-\r
-   // Connect to server\r
-   if (connect(hSocket, (struct sockaddr *)&sa, sizeof(sa)) == -1)\r
-   {\r
-      printf("Cannot establish connection with %s:%d\n", argv[optind], port);\r
-      goto connect_cleanup;\r
-   }\r
-\r
-       Exchange(hSocket);\r
-\r
-connect_cleanup:\r
-       if (hSocket != -1)\r
-               closesocket(hSocket);\r
-   return 0;\r
-}\r
+/* $Id: nxscript.cpp 3272 2008-05-14 01:40:18Z alk $ */
+/* 
+** NetXMS - Network Management System
+** NetXMS Scripting Host
+** Copyright (C) 2005, 2006, 2007, 2008 Victor Kirhenshtein
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** File: nxcptest.cpp
+**
+**/
+
+#include "nxcptest.h"
+
+
+//
+// Constants
+//
+
+#define RAW_MSG_SIZE    262144
+
+
+//
+// Help text
+//
+
+static char m_szHelpText[] =
+   "NetXMS Communication Protocol Tester  Version " NETXMS_VERSION_STRING "\n"
+   "Copyright (c) 2008 Victor Kirhenshtein\n\n"
+   "Usage:\n"
+   "   nxcptest [options] host\n\n"
+   "Where valid options are:\n"
+   "   -h         : Show this help\n"
+       "   -p port    : Port to connect (default 4700)\n"
+   "   -v         : Show version and exit\n"
+   "\n";
+
+
+//
+// Receiver thread
+//
+
+static THREAD_RESULT THREAD_CALL RecvThread(void *arg)
+{
+   CSCP_MESSAGE *pRawMsg;
+   CSCPMessage *pMsg;
+       CSCP_BUFFER *pMsgBuffer;
+       CSCP_ENCRYPTION_CONTEXT *pCtx = NULL;
+   BYTE *pDecryptionBuffer = NULL;
+   int iErr;
+   char *xml;
+   WORD wFlags;
+
+   // Initialize raw message receiving function
+       pMsgBuffer = (CSCP_BUFFER *)malloc(sizeof(CSCP_BUFFER));
+   RecvNXCPMessage(0, NULL, pMsgBuffer, 0, NULL, NULL, 0);
+
+   pRawMsg = (CSCP_MESSAGE *)malloc(RAW_MSG_SIZE);
+#ifdef _WITH_ENCRYPTION
+   pDecryptionBuffer = (BYTE *)malloc(RAW_MSG_SIZE);
+#endif
+   while(1)
+   {
+      if ((iErr = RecvNXCPMessage((SOCKET)arg, pRawMsg, pMsgBuffer, RAW_MSG_SIZE,
+                                  &pCtx, pDecryptionBuffer, INFINITE)) <= 0)
+      {
+         break;
+      }
+
+      // Check if message is too large
+      if (iErr == 1)
+               {
+         printf("RECV ERROR: message is too large\n");
+         continue;
+               }
+
+      // Check for decryption failure
+      if (iErr == 2)
+      {
+         printf("RECV ERROR: decryption failure\n");
+         continue;
+      }
+
+      // Check that actual received packet size is equal to encoded in packet
+      if ((int)ntohl(pRawMsg->dwSize) != iErr)
+      {
+         printf("RECV ERROR: Actual message size doesn't match wSize value (%d,%d)\n", iErr, ntohl(pRawMsg->dwSize));
+         continue;   // Bad packet, wait for next
+      }
+
+      wFlags = ntohs(pRawMsg->wFlags);
+      if (wFlags & MF_BINARY)
+      {
+                       printf("WARNING: Binary message received\n");
+      }
+      else
+      {
+         // Create message object from raw message
+         pMsg = new CSCPMessage(pRawMsg);
+                       xml = pMsg->CreateXML();
+                       if (xml != NULL)
+                       {
+                               puts(xml);
+                               free(xml);
+                       }
+      }
+   }
+   if (iErr < 0)
+      printf("Session terminated (socket error %d)\n", WSAGetLastError());
+       else
+               printf("Session closed\n");
+       free(pMsgBuffer);
+       free(pRawMsg);
+#ifdef _WITH_ENCRYPTION
+   free(pDecryptionBuffer);
+#endif
+
+       return THREAD_OK;
+}
+
+
+//
+// Read XML document from stdin
+//
+
+static BOOL ReadXML(String &xml)
+{
+       char buffer[8192];
+
+       xml = "";
+       while(1)
+       {
+               fgets(buffer, 8192, stdin);
+               if (feof(stdin))
+                       return FALSE;
+               if (!strcmp(buffer, "%%\n"))
+                       break;
+               xml += buffer;
+       }
+       return TRUE;
+}
+
+
+//
+// Do protocol excahnge
+//
+
+static void Exchange(SOCKET hSocket)
+{
+       String xml;
+       CSCPMessage *msg;
+       CSCP_MESSAGE *rawMsg;
+
+       ThreadCreate(RecvThread, 0, (void *)hSocket);
+       printf("Enter XML messages separated by %%%% string\n");
+       while(1)
+       {
+               if (!ReadXML(xml))
+                       break;
+               msg = new CSCPMessage(xml);
+               rawMsg = msg->CreateMessage();
+               delete msg;
+               if ((DWORD)SendEx(hSocket, rawMsg, ntohl(rawMsg->dwSize), 0) != ntohl(rawMsg->dwSize))
+               {
+                       printf("Error sending message\n");
+                       free(rawMsg);
+                       break;
+               }
+               free(rawMsg);
+       }
+       shutdown(hSocket, 2);
+}
+
+
+//
+// main()
+//
+
+int main(int argc, char *argv[])
+{
+   struct sockaddr_in sa;
+       int port = 4700, ch;
+       SOCKET hSocket;
+
+   // Parse command line
+   opterr = 1;
+   while((ch = getopt(argc, argv, "hp:v")) != -1)
+   {
+      switch(ch)
+      {
+         case 'h':
+                               printf(m_szHelpText);
+            return 0;
+         case 'v':
+                               printf("NetXMS Communication Protocol Tester  Version " NETXMS_VERSION_STRING "\n"
+                                      "Copyright (c) 2008 Victor Kirhenshtein\n\n");
+            return 0;
+                       case 'p':
+                               port = strtol(optarg, NULL, 0);
+                               break;
+         case '?':
+            return 1;
+         default:
+            break;
+      }
+   }
+
+   if (argc - optind < 1)
+   {
+      printf("Required arguments missing\n");
+      return 1;
+   }
+
+#ifdef _WIN32
+   WSADATA wsaData;
+
+   if (WSAStartup(2, &wsaData) != 0)
+   {
+      _tprintf(_T("Unable to initialize Windows sockets\n"));
+      return 4;
+   }
+#endif
+
+   // Create socket
+   hSocket = socket(AF_INET, SOCK_STREAM, 0);
+   if (hSocket == -1)
+   {
+      printf("Call to socket() failed");
+      goto connect_cleanup;
+   }
+
+   // Fill in address structure
+   memset(&sa, 0, sizeof(sa));
+   sa.sin_family = AF_INET;
+   sa.sin_addr.s_addr = ResolveHostName(argv[optind]);
+   sa.sin_port = htons((WORD)port);
+       if ((sa.sin_addr.s_addr == INADDR_ANY) || (sa.sin_addr.s_addr == INADDR_NONE))
+       {
+               printf("Cannot resolve host name or invalid IP address\n");
+               goto connect_cleanup;
+       }
+
+   // Connect to server
+   if (connect(hSocket, (struct sockaddr *)&sa, sizeof(sa)) == -1)
+   {
+      printf("Cannot establish connection with %s:%d\n", argv[optind], port);
+      goto connect_cleanup;
+   }
+
+       Exchange(hSocket);
+
+connect_cleanup:
+       if (hSocket != -1)
+               closesocket(hSocket);
+   return 0;
+}
index 24b216d..cda2174 100644 (file)
-# Microsoft Developer Studio Project File - Name="nxcptest" - Package Owner=<4>\r
-# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
-# ** DO NOT EDIT **\r
-\r
-# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
-\r
-CFG=nxcptest - Win32 Debug\r
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
-!MESSAGE use the Export Makefile command and run\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "nxcptest.mak".\r
-!MESSAGE \r
-!MESSAGE You can specify a configuration when running NMAKE\r
-!MESSAGE by defining the macro CFG on the command line. For example:\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "nxcptest.mak" CFG="nxcptest - Win32 Debug"\r
-!MESSAGE \r
-!MESSAGE Possible choices for configuration are:\r
-!MESSAGE \r
-!MESSAGE "nxcptest - Win32 Release" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "nxcptest - Win32 Debug" (based on "Win32 (x86) Console Application")\r
-!MESSAGE \r
-\r
-# Begin Project\r
-# PROP AllowPerConfigDependencies 0\r
-# PROP Scc_ProjName ""\r
-# PROP Scc_LocalPath ""\r
-CPP=cl.exe\r
-RSC=rc.exe\r
-\r
-!IF  "$(CFG)" == "nxcptest - Win32 Release"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 0\r
-# PROP BASE Output_Dir "Release"\r
-# PROP BASE Intermediate_Dir "Release"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 0\r
-# PROP Output_Dir "Release"\r
-# PROP Intermediate_Dir "Release"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD CPP /nologo /MD /W3 /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
-# ADD RSC /l 0x409 /d "NDEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libnetxms.lib libnxsl.lib ws2_32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\libnetxms\Release" /libpath:"..\libnxsl\Release"\r
-# Begin Special Build Tool\r
-SOURCE="$(InputPath)"\r
-PostBuild_Desc=Copy files\r
-PostBuild_Cmds=copy Release\nxcptest.exe C:\NetXMS\bin\r
-# End Special Build Tool\r
-\r
-!ELSEIF  "$(CFG)" == "nxcptest - Win32 Debug"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 1\r
-# PROP BASE Output_Dir "Debug"\r
-# PROP BASE Intermediate_Dir "Debug"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 1\r
-# PROP Output_Dir "Debug"\r
-# PROP Intermediate_Dir "Debug"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
-# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
-# ADD RSC /l 0x409 /d "_DEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libnetxms.lib libnxsl.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\libnetxms\Debug" /libpath:"..\libnxsl\Debug"\r
-# Begin Special Build Tool\r
-SOURCE="$(InputPath)"\r
-PostBuild_Desc=Copy files\r
-PostBuild_Cmds=copy Debug\nxcptest.exe ..\..\bin\r
-# End Special Build Tool\r
-\r
-!ENDIF \r
-\r
-# Begin Target\r
-\r
-# Name "nxcptest - Win32 Release"\r
-# Name "nxcptest - Win32 Debug"\r
-# Begin Group "Source Files"\r
-\r
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
-# Begin Source File\r
-\r
-SOURCE=.\nxcptest.cpp\r
-# End Source File\r
-# End Group\r
-# Begin Group "Header Files"\r
-\r
-# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
-# Begin Source File\r
-\r
-SOURCE=..\..\include\nms_common.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\include\nms_cscp.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\include\nms_threads.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\include\nms_util.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\nxcptest.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\include\nxsl.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\include\nxsl_classes.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\include\unicode.h\r
-# End Source File\r
-# End Group\r
-# Begin Group "Resource Files"\r
-\r
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
-# End Group\r
-# End Target\r
-# End Project\r
+# Microsoft Developer Studio Project File - Name="nxcptest" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=nxcptest - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "nxcptest.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "nxcptest.mak" CFG="nxcptest - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "nxcptest - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "nxcptest - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "nxcptest - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libnetxms.lib libnxsl.lib ws2_32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\libnetxms\Release" /libpath:"..\libnxsl\Release"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy files
+PostBuild_Cmds=copy Release\nxcptest.exe C:\NetXMS\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "nxcptest - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libnetxms.lib libnxsl.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\libnetxms\Debug" /libpath:"..\libnxsl\Debug"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy files
+PostBuild_Cmds=copy Debug\nxcptest.exe ..\..\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "nxcptest - Win32 Release"
+# Name "nxcptest - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\nxcptest.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\include\nms_common.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\nms_cscp.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\nms_threads.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\nms_util.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\nxcptest.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\nxsl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\nxsl_classes.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\unicode.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
index 5323b28..7010108 100644 (file)
@@ -1,35 +1,35 @@
-/* \r
-** NetXMS - Network Management System\r
-** NetXMS Scripting Host\r
-** Copyright (C) 2005 Victor Kirhenshtein\r
-**\r
-** This program is free software; you can redistribute it and/or modify\r
-** it under the terms of the GNU General Public License as published by\r
-** the Free Software Foundation; either version 2 of the License, or\r
-** (at your option) any later version.\r
-**\r
-** This program is distributed in the hope that it will be useful,\r
-** but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-** GNU General Public License for more details.\r
-**\r
-** You should have received a copy of the GNU General Public License\r
-** along with this program; if not, write to the Free Software\r
-** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
-**\r
-** File: nxcptest.h\r
-**\r
-**/\r
-\r
-#ifndef _nxcptest_h_\r
-#define _nxcptest_h_\r
-\r
-#include <nms_common.h>\r
-#include <nms_util.h>\r
-#include <nxcpapi.h>\r
-\r
-#if HAVE_GETOPT_H\r
-#include <getopt.h>\r
-#endif\r
-\r
-#endif\r
+/* 
+** NetXMS - Network Management System
+** NetXMS Scripting Host
+** Copyright (C) 2005 Victor Kirhenshtein
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** File: nxcptest.h
+**
+**/
+
+#ifndef _nxcptest_h_
+#define _nxcptest_h_
+
+#include <nms_common.h>
+#include <nms_util.h>
+#include <nxcpapi.h>
+
+#if HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+
+#endif
index c7183c3..2503372 100644 (file)
-/* $Id$ */\r
-/* \r
-** NetXMS - Network Management System\r
-** Copyright (C) 2003, 2004, 2005, 2006, 2007 Victor Kirhenshtein\r
-**\r
-** This program is free software; you can redistribute it and/or modify\r
-** it under the terms of the GNU General Public License as published by\r
-** the Free Software Foundation; either version 2 of the License, or\r
-** (at your option) any later version.\r
-**\r
-** This program is distributed in the hope that it will be useful,\r
-** but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-** GNU General Public License for more details.\r
-**\r
-** You should have received a copy of the GNU General Public License\r
-** along with this program; if not, write to the Free Software\r
-** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
-**\r
-** File: nxsl_classes.cpp\r
-**\r
-**/\r
-\r
-#include "nxcore.h"\r
-\r
-\r
-//\r
-// Implementation of "NetXMS node" class\r
-//\r
-\r
-NXSL_NodeClass::NXSL_NodeClass()\r
-               :NXSL_Class()\r
-{\r
-   strcpy(m_szName, "NetXMS_Node");\r
-}\r
-\r
-NXSL_Value *NXSL_NodeClass::GetAttr(NXSL_Object *pObject, char *pszAttr)\r
-{\r
-   Node *pNode;\r
-   NXSL_Value *pValue = NULL;\r
-   char szBuffer[256];\r
-\r
-   pNode = (Node *)pObject->Data();\r
-   if (!strcmp(pszAttr, "name"))\r
-   {\r
-      pValue = new NXSL_Value(pNode->Name());\r
-   }\r
-   else if (!strcmp(pszAttr, "id"))\r
-   {\r
-      pValue = new NXSL_Value(pNode->Id());\r
-   }\r
-   else if (!strcmp(pszAttr, "ipAddr"))\r
-   {\r
-      IpToStr(pNode->IpAddr(), szBuffer);\r
-      pValue = new NXSL_Value(szBuffer);\r
-   }\r
-   else if (!strcmp(pszAttr, "isAgent"))\r
-   {\r
-      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_NATIVE_AGENT) ? 1 : 0));\r
-   }\r
-   else if (!strcmp(pszAttr, "isSNMP"))\r
-   {\r
-      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_SNMP) ? 1 : 0));\r
-   }\r
-   else if (!strcmp(pszAttr, "isBridge"))\r
-   {\r
-      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_BRIDGE) ? 1 : 0));\r
-   }\r
-   else if (!strcmp(pszAttr, "isRouter"))\r
-   {\r
-      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_ROUTER) ? 1 : 0));\r
-   }\r
-   else if (!strcmp(pszAttr, "isPrinter"))\r
-   {\r
-      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_PRINTER) ? 1 : 0));\r
-   }\r
-   else if (!strcmp(pszAttr, "isCDP"))\r
-   {\r
-      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_CDP) ? 1 : 0));\r
-   }\r
-   else if (!strcmp(pszAttr, "isSONMP"))\r
-   {\r
-      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_SONMP) ? 1 : 0));\r
-   }\r
-   else if (!strcmp(pszAttr, "isLLDP"))\r
-   {\r
-      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_LLDP) ? 1 : 0));\r
-   }\r
-   else if (!strcmp(pszAttr, "snmpVersion"))\r
-   {\r
-      pValue = new NXSL_Value((LONG)pNode->GetSNMPVersion());\r
-   }\r
-   else if (!strcmp(pszAttr, "snmpOID"))\r
-   {\r
-      pValue = new NXSL_Value(pNode->GetSNMPObjectId());\r
-   }\r
-   else if (!strcmp(pszAttr, "agentVersion"))\r
-   {\r
-      pValue = new NXSL_Value(pNode->GetAgentVersion());\r
-   }\r
-   else if (!strcmp(pszAttr, "platformName"))\r
-   {\r
-      pValue = new NXSL_Value(pNode->GetPlatformName());\r
-   }\r
-   return pValue;\r
-}\r
-\r
-\r
-//\r
-// Implementation of "NetXMS event" class\r
-//\r
-\r
-NXSL_EventClass::NXSL_EventClass()\r
-                :NXSL_Class()\r
-{\r
-   strcpy(m_szName, "NetXMS_Event");\r
-}\r
-\r
-NXSL_Value *NXSL_EventClass::GetAttr(NXSL_Object *pObject, char *pszAttr)\r
-{\r
-   Event *event;\r
-   NXSL_Value *value = NULL;\r
-\r
-   event = (Event *)pObject->Data();\r
-   if (!strcmp(pszAttr, "code"))\r
-   {\r
-      value = new NXSL_Value(event->Code());\r
-   }\r
-   else if (!strcmp(pszAttr, "id"))\r
-   {\r
-      value = new NXSL_Value(event->Id());\r
-   }\r
-   else if (!strcmp(pszAttr, "timestamp"))\r
-   {\r
-      value = new NXSL_Value(event->TimeStamp());\r
-   }\r
-   else if (!strcmp(pszAttr, "message"))\r
-   {\r
-      value = new NXSL_Value(event->Message());\r
-   }\r
-   else if (!strcmp(pszAttr, "userTag"))\r
-   {\r
-      value = new NXSL_Value(event->UserTag());\r
-   }\r
-   else if (!strcmp(pszAttr, "parameters"))\r
-   {\r
-               NXSL_Array *array = new NXSL_Array;\r
-               DWORD i;\r
-\r
-               for(i = 0; i < event->GetParametersCount(); i++)\r
-                       array->Set((int)(i + 1), new NXSL_Value(event->GetParameter(i)));\r
-      value = new NXSL_Value(array);\r
-   }\r
-   return value;\r
-}\r
-\r
-\r
-//\r
-// Class objects\r
-//\r
-\r
-NXSL_NodeClass g_nxslNodeClass;\r
-NXSL_EventClass g_nxslEventClass;\r
+/* $Id$ */
+/* 
+** NetXMS - Network Management System
+** Copyright (C) 2003, 2004, 2005, 2006, 2007 Victor Kirhenshtein
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** File: nxsl_classes.cpp
+**
+**/
+
+#include "nxcore.h"
+
+
+//
+// Implementation of "NetXMS node" class
+//
+
+NXSL_NodeClass::NXSL_NodeClass()
+               :NXSL_Class()
+{
+   strcpy(m_szName, "NetXMS_Node");
+}
+
+NXSL_Value *NXSL_NodeClass::GetAttr(NXSL_Object *pObject, char *pszAttr)
+{
+   Node *pNode;
+   NXSL_Value *pValue = NULL;
+   char szBuffer[256];
+
+   pNode = (Node *)pObject->Data();
+   if (!strcmp(pszAttr, "name"))
+   {
+      pValue = new NXSL_Value(pNode->Name());
+   }
+   else if (!strcmp(pszAttr, "id"))
+   {
+      pValue = new NXSL_Value(pNode->Id());
+   }
+   else if (!strcmp(pszAttr, "ipAddr"))
+   {
+      IpToStr(pNode->IpAddr(), szBuffer);
+      pValue = new NXSL_Value(szBuffer);
+   }
+   else if (!strcmp(pszAttr, "isAgent"))
+   {
+      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_NATIVE_AGENT) ? 1 : 0));
+   }
+   else if (!strcmp(pszAttr, "isSNMP"))
+   {
+      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_SNMP) ? 1 : 0));
+   }
+   else if (!strcmp(pszAttr, "isBridge"))
+   {
+      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_BRIDGE) ? 1 : 0));
+   }
+   else if (!strcmp(pszAttr, "isRouter"))
+   {
+      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_ROUTER) ? 1 : 0));
+   }
+   else if (!strcmp(pszAttr, "isPrinter"))
+   {
+      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_PRINTER) ? 1 : 0));
+   }
+   else if (!strcmp(pszAttr, "isCDP"))
+   {
+      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_CDP) ? 1 : 0));
+   }
+   else if (!strcmp(pszAttr, "isSONMP"))
+   {
+      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_SONMP) ? 1 : 0));
+   }
+   else if (!strcmp(pszAttr, "isLLDP"))
+   {
+      pValue = new NXSL_Value((LONG)((pNode->Flags() & NF_IS_LLDP) ? 1 : 0));
+   }
+   else if (!strcmp(pszAttr, "snmpVersion"))
+   {
+      pValue = new NXSL_Value((LONG)pNode->GetSNMPVersion());
+   }
+   else if (!strcmp(pszAttr, "snmpOID"))
+   {
+      pValue = new NXSL_Value(pNode->GetSNMPObjectId());
+   }
+   else if (!strcmp(pszAttr, "agentVersion"))
+   {
+      pValue = new NXSL_Value(pNode->GetAgentVersion());
+   }
+   else if (!strcmp(pszAttr, "platformName"))
+   {
+      pValue = new NXSL_Value(pNode->GetPlatformName());
+   }
+   return pValue;
+}
+
+
+//
+// Implementation of "NetXMS event" class
+//
+
+NXSL_EventClass::NXSL_EventClass()
+                :NXSL_Class()
+{
+   strcpy(m_szName, "NetXMS_Event");
+}
+
+NXSL_Value *NXSL_EventClass::GetAttr(NXSL_Object *pObject, char *pszAttr)
+{
+   Event *event;
+   NXSL_Value *value = NULL;
+
+   event = (Event *)pObject->Data();
+   if (!strcmp(pszAttr, "code"))
+   {
+      value = new NXSL_Value(event->Code());
+   }
+   else if (!strcmp(pszAttr, "id"))
+   {
+      value = new NXSL_Value(event->Id());
+   }
+   else if (!strcmp(pszAttr, "timestamp"))
+   {
+      value = new NXSL_Value(event->TimeStamp());
+   }
+   else if (!strcmp(pszAttr, "message"))
+   {
+      value = new NXSL_Value(event->Message());
+   }
+   else if (!strcmp(pszAttr, "userTag"))
+   {
+      value = new NXSL_Value(event->UserTag());
+   }
+   else if (!strcmp(pszAttr, "parameters"))
+   {
+               NXSL_Array *array = new NXSL_Array;
+               DWORD i;
+
+               for(i = 0; i < event->GetParametersCount(); i++)
+                       array->Set((int)(i + 1), new NXSL_Value(event->GetParameter(i)));
+      value = new NXSL_Value(array);
+   }
+   return value;
+}
+
+
+//
+// Class objects
+//
+
+NXSL_NodeClass g_nxslNodeClass;
+NXSL_EventClass g_nxslEventClass;
index 5cafe8e..702c436 100644 (file)
@@ -1,10 +1,10 @@
-INCLUDES=-I@top_srcdir@/include -I@top_srcdir@/src/server/include\r
-\r
-lib_LTLIBRARIES = libnxddr_odbc.la\r
-libnxddr_odbc_la_SOURCES = odbc.cpp\r
-libnxddr_odbc_la_LDFLAGS = -version-info $(NETXMS_LIBRARY_VERSION) ../../../libnetxms/libnetxms.la\r
-\r
-EXTRA_DIST = odbc.dsp odbc.dsw odbcdrv.h\r
-\r
-install-exec-hook:\r
-       if test "x`uname -s`" = "xAIX" ; then $(AR) x $(libdir)/libnxddr_odbc.a $(libdir)/libnxddr_odbc.so.0 ; fi\r
+INCLUDES=-I@top_srcdir@/include -I@top_srcdir@/src/server/include
+
+lib_LTLIBRARIES = libnxddr_odbc.la
+libnxddr_odbc_la_SOURCES = odbc.cpp
+libnxddr_odbc_la_LDFLAGS = -version-info $(NETXMS_LIBRARY_VERSION) ../../../libnetxms/libnetxms.la
+
+EXTRA_DIST = odbc.dsp odbc.dsw odbcdrv.h
+
+install-exec-hook:
+       if test "x`uname -s`" = "xAIX" ; then $(AR) x $(libdir)/libnxddr_odbc.a $(libdir)/libnxddr_odbc.so.0 ; fi
index 0c29b33..eec8e00 100644 (file)
@@ -1,65 +1,65 @@
-/* \r
-** HP Data Protector integration module\r
-** Copyright (C) 2008 Victor Kirhenshtein\r
-**\r
-** This program is free software; you can redistribute it and/or modify\r
-** it under the terms of the GNU General Public License as published by\r
-** the Free Software Foundation; either version 2 of the License, or\r
-** (at your option) any later version.\r
-**\r
-** This program is distributed in the hope that it will be useful,\r
-** but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-** GNU General Public License for more details.\r
-**\r
-** You should have received a copy of the GNU General Public License\r
-** along with this program; if not, write to the Free Software\r
-** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
-**\r
-** File: hpdp.cpp\r
-**\r
-**/\r
-\r
-#include "hpdp.h"\r
-\r
-\r
-//\r
-// SNMP trap handler\r
-//\r
-\r
-static BOOL TrapHandler(SNMP_PDU *pdu, Node *pNode)\r
-{\r
-       if (_tcscmp(pdu->GetTrapId()->GetValueAsText(), _T(".1.3.6.1.4.1.??????")))\r
-               return FALSE;\r
-\r
-       return TRUE;\r
-}\r
-\r
-\r
-//\r
-// Module entry point\r
-//\r
-\r
-extern "C" BOOL EXPORT NetXMSModuleInit(NXMODULE *module)\r
-{\r
-       module->dwSize = sizeof(NXMODULE);\r
-       _tcscpy(module->szName, _T("HPDP"));\r
-       module->pfTrapHandler = TrapHandler;\r
-       return TRUE;\r
-}\r
-\r
-\r
-//\r
-// DLL Entry point\r
-//\r
-\r
-#ifdef _WIN32\r
-\r
-BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)\r
-{\r
-   if (dwReason == DLL_PROCESS_ATTACH)\r
-      DisableThreadLibraryCalls(hInstance);\r
-   return TRUE;\r
-}\r
-\r
-#endif\r
+/* 
+** HP Data Protector integration module
+** Copyright (C) 2008 Victor Kirhenshtein
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** File: hpdp.cpp
+**
+**/
+
+#include "hpdp.h"
+
+
+//
+// SNMP trap handler
+//
+
+static BOOL TrapHandler(SNMP_PDU *pdu, Node *pNode)
+{
+       if (_tcscmp(pdu->GetTrapId()->GetValueAsText(), _T(".1.3.6.1.4.1.??????")))
+               return FALSE;
+
+       return TRUE;
+}
+
+
+//
+// Module entry point
+//
+
+extern "C" BOOL EXPORT NetXMSModuleInit(NXMODULE *module)
+{
+       module->dwSize = sizeof(NXMODULE);
+       _tcscpy(module->szName, _T("HPDP"));
+       module->pfTrapHandler = TrapHandler;
+       return TRUE;
+}
+
+
+//
+// DLL Entry point
+//
+
+#ifdef _WIN32
+
+BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
+{
+   if (dwReason == DLL_PROCESS_ATTACH)
+      DisableThreadLibraryCalls(hInstance);
+   return TRUE;
+}
+
+#endif
index 54c6410..1a649e9 100644 (file)
-# Microsoft Developer Studio Project File - Name="hpdp" - Package Owner=<4>\r
-# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
-# ** DO NOT EDIT **\r
-\r
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
-\r
-CFG=hpdp - Win32 Debug AMD64\r
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
-!MESSAGE use the Export Makefile command and run\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "hpdp.mak".\r
-!MESSAGE \r
-!MESSAGE You can specify a configuration when running NMAKE\r
-!MESSAGE by defining the macro CFG on the command line. For example:\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "hpdp.mak" CFG="hpdp - Win32 Debug AMD64"\r
-!MESSAGE \r
-!MESSAGE Possible choices for configuration are:\r
-!MESSAGE \r
-!MESSAGE "hpdp - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
-!MESSAGE "hpdp - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
-!MESSAGE "hpdp - Win32 Release AMD64" (based on "Win32 (x86) Dynamic-Link Library")\r
-!MESSAGE "hpdp - Win32 Debug AMD64" (based on "Win32 (x86) Dynamic-Link Library")\r
-!MESSAGE \r
-\r
-# Begin Project\r
-# PROP AllowPerConfigDependencies 0\r
-# PROP Scc_ProjName ""\r
-# PROP Scc_LocalPath ""\r
-CPP=cl.exe\r
-MTL=midl.exe\r
-RSC=rc.exe\r
-\r
-!IF  "$(CFG)" == "hpdp - Win32 Release"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 0\r
-# PROP BASE Output_Dir "Release"\r
-# PROP BASE Intermediate_Dir "Release"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 0\r
-# PROP Output_Dir "Release"\r
-# PROP Intermediate_Dir "Release"\r
-# PROP Ignore_Export_Lib 1\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /c\r
-# ADD CPP /nologo /MD /W3 /O2 /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /c\r
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
-# ADD BASE RSC /l 0x809 /d "NDEBUG"\r
-# ADD RSC /l 0x809 /d "NDEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib libnetxms.lib libnxsnmp.lib libnxsrv.lib /nologo /dll /machine:I386 /out:"Release/hpdp.nxm" /libpath:"..\..\..\libnetxms\Release" /libpath:"..\..\..\libnxsnmp\Release" /libpath:"..\..\libnxsrv\Release"\r
-# Begin Special Build Tool\r
-SOURCE="$(InputPath)"\r
-PostBuild_Desc=Copy files\r
-PostBuild_Cmds=copy Release\hpdp.nxm C:\NetXMS\bin\r
-# End Special Build Tool\r
-\r
-!ELSEIF  "$(CFG)" == "hpdp - Win32 Debug"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 1\r
-# PROP BASE Output_Dir "Debug"\r
-# PROP BASE Intermediate_Dir "Debug"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 1\r
-# PROP Output_Dir "Debug"\r
-# PROP Intermediate_Dir "Debug"\r
-# PROP Ignore_Export_Lib 1\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /GZ /c\r
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
-# ADD BASE RSC /l 0x809 /d "_DEBUG"\r
-# ADD RSC /l 0x809 /d "_DEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib libnetxms.lib libnxsnmp.lib libnxsrv.lib /nologo /dll /debug /machine:I386 /out:"Debug/hpdp.nxm" /pdbtype:sept /libpath:"..\..\..\libnetxms\Debug" /libpath:"..\..\..\libnxsnmp\Debug" /libpath:"..\..\libnxsrv\Debug"\r
-# Begin Special Build Tool\r
-SOURCE="$(InputPath)"\r
-PostBuild_Desc=Copy files\r
-PostBuild_Cmds=copy Debug\hpdp.nxm ..\..\..\..\bin\r
-# End Special Build Tool\r
-\r
-!ELSEIF  "$(CFG)" == "hpdp - Win32 Release AMD64"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 0\r
-# PROP BASE Output_Dir "odbc___Win32_Release_AMD64"\r
-# PROP BASE Intermediate_Dir "odbc___Win32_Release_AMD64"\r
-# PROP BASE Ignore_Export_Lib 0\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 0\r
-# PROP Output_Dir "Release64"\r
-# PROP Intermediate_Dir "Release64"\r
-# PROP Ignore_Export_Lib 1\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /c\r
-# ADD CPP /nologo /MD /W3 /O2 /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /D "__64BIT__" /FD /c\r
-# SUBTRACT CPP /YX\r
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
-# ADD BASE RSC /l 0x809 /d "NDEBUG"\r
-# ADD RSC /l 0x809 /d "NDEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/hpdp.ddr"\r
-# ADD LINK32 bufferoverflowU.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib libnetxms.lib libnxsnmp.lib libnxsrv.lib /nologo /dll /machine:I386 /out:"Release64/hpdp.nxm" /libpath:"..\..\..\libnetxms\Release64" /libpath:"..\..\..\libnxsnmp\Release64" /libpath:"..\..\libnxsrv\Release64" /machine:AMD64\r
-# SUBTRACT LINK32 /pdb:none\r
-# Begin Special Build Tool\r
-SOURCE="$(InputPath)"\r
-PostBuild_Desc=Copy files\r
-PostBuild_Cmds=copy Release64\hpdp.nxm C:\NetXMS\bin64\r
-# End Special Build Tool\r
-\r
-!ELSEIF  "$(CFG)" == "hpdp - Win32 Debug AMD64"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 1\r
-# PROP BASE Output_Dir "odbc___Win32_Debug_AMD64"\r
-# PROP BASE Intermediate_Dir "odbc___Win32_Debug_AMD64"\r
-# PROP BASE Ignore_Export_Lib 0\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 1\r
-# PROP Output_Dir "Debug64"\r
-# PROP Intermediate_Dir "Debug64"\r
-# PROP Ignore_Export_Lib 1\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Gm /Zi /Od /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /D "__64BIT__" /FD /GZ /c\r
-# SUBTRACT CPP /YX\r
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
-# ADD BASE RSC /l 0x809 /d "_DEBUG"\r
-# ADD RSC /l 0x809 /d "_DEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/hpdp.ddr" /pdbtype:sept\r
-# ADD LINK32 bufferoverflowU.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib libnetxms.lib libnxsnmp.lib libnxsrv.lib /nologo /dll /debug /machine:I386 /out:"Debug64/hpdp.nxm" /pdbtype:sept /libpath:"..\..\..\libnetxms\Debug64" /libpath:"..\..\..\libnxsnmp\Debug64" /libpath:"..\..\libnxsrv\Debug64" /machine:AMD64\r
-# SUBTRACT LINK32 /pdb:none\r
-# Begin Special Build Tool\r
-SOURCE="$(InputPath)"\r
-PostBuild_Desc=Copy files\r
-PostBuild_Cmds=copy Debug64\hpdp.nxm ..\..\..\..\bin64\r
-# End Special Build Tool\r
-\r
-!ENDIF \r
-\r
-# Begin Target\r
-\r
-# Name "hpdp - Win32 Release"\r
-# Name "hpdp - Win32 Debug"\r
-# Name "hpdp - Win32 Release AMD64"\r
-# Name "hpdp - Win32 Debug AMD64"\r
-# Begin Group "Source Files"\r
-\r
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
-# Begin Source File\r
-\r
-SOURCE=.\hpdp.cpp\r
-# End Source File\r
-# End Group\r
-# Begin Group "Header Files"\r
-\r
-# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
-# Begin Source File\r
-\r
-SOURCE=.\hpdp.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\..\..\include\nms_common.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\include\nms_core.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\include\nms_events.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\..\..\include\nms_util.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\include\nxmodule.h\r
-# End Source File\r
-# End Group\r
-# Begin Group "Resource Files"\r
-\r
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
-# End Group\r
-# End Target\r
-# End Project\r
+# Microsoft Developer Studio Project File - Name="hpdp" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=hpdp - Win32 Debug AMD64
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "hpdp.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "hpdp.mak" CFG="hpdp - Win32 Debug AMD64"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "hpdp - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "hpdp - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "hpdp - Win32 Release AMD64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "hpdp - Win32 Debug AMD64" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "hpdp - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib libnetxms.lib libnxsnmp.lib libnxsrv.lib /nologo /dll /machine:I386 /out:"Release/hpdp.nxm" /libpath:"..\..\..\libnetxms\Release" /libpath:"..\..\..\libnxsnmp\Release" /libpath:"..\..\libnxsrv\Release"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy files
+PostBuild_Cmds=copy Release\hpdp.nxm C:\NetXMS\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "hpdp - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib libnetxms.lib libnxsnmp.lib libnxsrv.lib /nologo /dll /debug /machine:I386 /out:"Debug/hpdp.nxm" /pdbtype:sept /libpath:"..\..\..\libnetxms\Debug" /libpath:"..\..\..\libnxsnmp\Debug" /libpath:"..\..\libnxsrv\Debug"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy files
+PostBuild_Cmds=copy Debug\hpdp.nxm ..\..\..\..\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "hpdp - Win32 Release AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "odbc___Win32_Release_AMD64"
+# PROP BASE Intermediate_Dir "odbc___Win32_Release_AMD64"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release64"
+# PROP Intermediate_Dir "Release64"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /D "__64BIT__" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/hpdp.ddr"
+# ADD LINK32 bufferoverflowU.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib libnetxms.lib libnxsnmp.lib libnxsrv.lib /nologo /dll /machine:I386 /out:"Release64/hpdp.nxm" /libpath:"..\..\..\libnetxms\Release64" /libpath:"..\..\..\libnxsnmp\Release64" /libpath:"..\..\libnxsrv\Release64" /machine:AMD64
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy files
+PostBuild_Cmds=copy Release64\hpdp.nxm C:\NetXMS\bin64
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "hpdp - Win32 Debug AMD64"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "odbc___Win32_Debug_AMD64"
+# PROP BASE Intermediate_Dir "odbc___Win32_Debug_AMD64"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug64"
+# PROP Intermediate_Dir "Debug64"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /Zi /Od /I "..\..\include" /I "..\..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HPDP_EXPORTS" /D "__64BIT__" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/hpdp.ddr" /pdbtype:sept
+# ADD LINK32 bufferoverflowU.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib libnetxms.lib libnxsnmp.lib libnxsrv.lib /nologo /dll /debug /machine:I386 /out:"Debug64/hpdp.nxm" /pdbtype:sept /libpath:"..\..\..\libnetxms\Debug64" /libpath:"..\..\..\libnxsnmp\Debug64" /libpath:"..\..\libnxsrv\Debug64" /machine:AMD64
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy files
+PostBuild_Cmds=copy Debug64\hpdp.nxm ..\..\..\..\bin64
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "hpdp - Win32 Release"
+# Name "hpdp - Win32 Debug"
+# Name "hpdp - Win32 Release AMD64"
+# Name "hpdp - Win32 Debug AMD64"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\hpdp.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\hpdp.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\include\nms_common.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\nms_core.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\nms_events.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\include\nms_util.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\nxmodule.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
index 6ef1479..6b01e72 100644 (file)
@@ -1,37 +1,37 @@
-/* \r
-** HP Data Protector integration module\r
-** Copyright (C) 2008 Victor Kirhenshtein\r
-**\r
-** This program is free software; you can redistribute it and/or modify\r
-** it under the terms of the GNU General Public License as published by\r
-** the Free Software Foundation; either version 2 of the License, or\r
-** (at your option) any later version.\r
-**\r
-** This program is distributed in the hope that it will be useful,\r
-** but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-** GNU General Public License for more details.\r
-**\r
-** You should have received a copy of the GNU General Public License\r
-** along with this program; if not, write to the Free Software\r
-** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
-**\r
-** File: hpdp.h\r
-**\r
-**/\r
-\r
-#ifndef _hpdp_h_\r
-#define _hpdp_h_\r
-\r
-#include <nms_common.h>\r
-#include <nms_util.h>\r
-#include <nms_core.h>\r
-#include <nxmodule.h>\r
-\r
-#ifdef _WIN32\r
-#define EXPORT __declspec(dllexport)\r
-#else\r
-#define EXPORT\r
-#endif   /* _WIN32 */\r
-\r
-#endif\r
+/* 
+** HP Data Protector integration module
+** Copyright (C) 2008 Victor Kirhenshtein
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** File: hpdp.h
+**
+**/
+
+#ifndef _hpdp_h_
+#define _hpdp_h_
+
+#include <nms_common.h>
+#include <nms_util.h>
+#include <nms_core.h>
+#include <nxmodule.h>
+
+#ifdef _WIN32
+#define EXPORT __declspec(dllexport)
+#else
+#define EXPORT
+#endif   /* _WIN32 */
+
+#endif