Index: build/win32/project/dummy.h
===================================================================
--- build/win32/project/dummy.h	(revision 0)
+++ build/win32/project/dummy.h	(working copy)
@@ -0,0 +1,6 @@
+#ifndef _DUMMY_H_
+#define _DUMMY_H_
+
+#define VER_FILEDESCRIPTION_STR		"dummy.dll"
+
+#endif
Index: build/win32/project/Makefile_dummy
===================================================================
--- build/win32/project/Makefile_dummy	(revision 0)
+++ build/win32/project/Makefile_dummy	(working copy)
@@ -0,0 +1,6 @@
+PROGNAME = ..\..\..\bin\win32\dummy.dll
+INCS = /I .\ /I ..\include /I ..\..\..\include
+CFLAGS = $(INCS) /O2 /Ob1 /GF /FD /EHsc /MT /Gy /W3 /c /TC /D _WINDOWS /D _WIN32_WINNT=0x0500 /D _CONSOLE /D UNICODE /D _UNICODE /D NDEBUG /D WIN32 /D HAVE_WINLDAP_H /D HAVE_ASSERT_H /D ZABBIX_SERVICE /D "_VC80_UPGRADE=0x0600" /D HAVE_IPV6
+LFLAGS = /INCREMENTAL:NO /PDB:"dummy.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE:NO /MACHINE:X86 /DLL
+
+include Makefile_dummy.inc
Index: build/win32/project/Makefile_dummy.inc
===================================================================
--- build/win32/project/Makefile_dummy.inc	(revision 0)
+++ build/win32/project/Makefile_dummy.inc	(working copy)
@@ -0,0 +1,21 @@
+CC = cl.exe /nologo
+LINKER = link.exe /NOLOGO
+RC = rc.exe /d "DUMMY" /d _WINDOWS
+MC = mc.exe
+MT = mt.exe
+DESC_H = dummy.h
+OBJS  = ..\..\..\src\modules\dummyWin\dummy.o
+
+LIBS = ws2_32.lib psapi.lib pdh.lib Wldap32.lib advapi32.lib uuid.lib Iphlpapi.lib
+
+all: $(PROGNAME)
+
+clean:
+	del $(OBJS) $(RESOURCE_RES) $(MESSAGES_H) $(PROGNAME) messages.rc MSG00001.bin zabbix_get.exe.manifest
+
+$(PROGNAME): $(MESSAGES_H) $(OBJS) $(RESOURCE_RES)
+	$(LINKER) $(OBJS) $(RESOURCE_RES) /OUT:$(PROGNAME) $(LFLAGS) $(LIBS)
+	$(MT) /outputresource:"$(PROGNAME);#1"  /nologo
+
+..\..\..\src\modules\dummyWin\dummy.o: ..\..\..\src\modules\dummyWin\dummy.c
+	$(CC) ..\..\..\src\modules\dummyWin\dummy.c /Fo"..\..\..\src\modules\dummyWin\dummy.o" $(CFLAGS)
Index: src/modules/dummyWin/dummy.c
===================================================================
--- src/modules/dummyWin/dummy.c	(revision 0)
+++ src/modules/dummyWin/dummy.c	(working copy)
@@ -0,0 +1,196 @@
+/*
+** Zabbix
+** Copyright (C) 2001-2014 Zabbix SIA
+**
+** 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+**/
+
+#include "sysinc.h"
+#include "module.h"
+#include <windows.h>
+/* the variable keeps timeout setting for item processing */
+static int	item_timeout = 0;
+
+__declspec(dllexport)  int	zbx_module_dummy_ping(AGENT_REQUEST *request, AGENT_RESULT *result);
+__declspec(dllexport)  int	zbx_module_dummy_echo(AGENT_REQUEST *request, AGENT_RESULT *result);
+__declspec(dllexport)  int	zbx_module_dummy_random(AGENT_REQUEST *request, AGENT_RESULT *result);
+
+static ZBX_METRIC keys[] =
+/*      KEY                     FLAG		FUNCTION        	TEST PARAMETERS */
+{
+	{"dummy.ping",		0,		zbx_module_dummy_ping,	NULL},
+	{"dummy.echo",		CF_HAVEPARAMS,	zbx_module_dummy_echo, 	"a message"},
+	{"dummy.random",	CF_HAVEPARAMS,	zbx_module_dummy_random,"1,1000"},
+	{NULL}
+};
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_api_version                                           *
+ *                                                                            *
+ * Purpose: returns version number of the module interface                    *
+ *                                                                            *
+ * Return value: ZBX_MODULE_API_VERSION_ONE - the only version supported by   *
+ *               Zabbix currently                                             *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) int	zbx_module_api_version()
+{
+	return ZBX_MODULE_API_VERSION_ONE;
+}
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_item_timeout                                          *
+ *                                                                            *
+ * Purpose: set timeout value for processing of items                         *
+ *                                                                            *
+ * Parameters: timeout - timeout in seconds, 0 - no timeout set               *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) void	zbx_module_item_timeout(int timeout)
+{
+	item_timeout = timeout;
+}
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_item_list                                             *
+ *                                                                            *
+ * Purpose: returns list of item keys supported by the module                 *
+ *                                                                            *
+ * Return value: list of item keys                                            *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) ZBX_METRIC	*zbx_module_item_list()
+{
+	return keys;
+}
+
+__declspec(dllexport) int	zbx_module_dummy_ping(AGENT_REQUEST *request, AGENT_RESULT *result)
+{
+	SET_UI64_RESULT(result, 1);
+
+	return SYSINFO_RET_OK;
+}
+
+__declspec(dllexport) int	zbx_module_dummy_echo(AGENT_REQUEST *request, AGENT_RESULT *result)
+{
+	char	*param;
+
+	if (1 != request->nparam)
+	{
+		/* set optional error message */
+		SET_MSG_RESULT(result, _strdup("Invalid number of parameters"));
+		return SYSINFO_RET_FAIL;
+	}
+
+	param = get_rparam(request, 0);
+
+	SET_STR_RESULT(result, _strdup(param));
+
+	return SYSINFO_RET_OK;
+}
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_dummy_random                                          *
+ *                                                                            *
+ * Purpose: a main entry point for processing of an item                      *
+ *                                                                            *
+ * Parameters: request - structure that contains item key and parameters      *
+ *              request->key - item key without parameters                    *
+ *              request->nparam - number of parameters                        *
+ *              request->timeout - processing should not take longer than     *
+ *                                 this number of seconds                     *
+ *              request->params[N-1] - pointers to item key parameters        *
+ *                                                                            *
+ *             result - structure that will contain result                    *
+ *                                                                            *
+ * Return value: SYSINFO_RET_FAIL - function failed, item will be marked      *
+ *                                 as not supported by zabbix                 *
+ *               SYSINFO_RET_OK - success                                     *
+ *                                                                            *
+ * Comment: get_rparam(request, N-1) can be used to get a pointer to the Nth  *
+ *          parameter starting from 0 (first parameter). Make sure it exists  *
+ *          by checking value of request->nparam.                             *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) int	zbx_module_dummy_random(AGENT_REQUEST *request, AGENT_RESULT *result)
+{
+	char	*param1, *param2;
+	int	from, to;
+
+	if (request->nparam != 2)
+	{
+		/* set optional error message */
+		SET_MSG_RESULT(result, _strdup("Invalid number of parameters"));
+		return SYSINFO_RET_FAIL;
+	}
+
+	param1 = get_rparam(request, 0);
+	param2 = get_rparam(request, 1);
+
+	/* there is no strict validation of parameters for simplicity sake */
+	from = atoi(param1);
+	to = atoi(param2);
+
+	if (from > to)
+	{
+		SET_MSG_RESULT(result, _strdup("Incorrect range given"));
+		return SYSINFO_RET_FAIL;
+	}
+
+	SET_UI64_RESULT(result, from + rand() % (to - from + 1));
+
+	return SYSINFO_RET_OK;
+}
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_init                                                  *
+ *                                                                            *
+ * Purpose: the function is called on agent startup                           *
+ *          It should be used to call any initialization routines             *
+ *                                                                            *
+ * Return value: ZBX_MODULE_OK - success                                      *
+ *               ZBX_MODULE_FAIL - module initialization failed               *
+ *                                                                            *
+ * Comment: the module won't be loaded in case of ZBX_MODULE_FAIL             *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) int	zbx_module_init()
+{
+	/* initialization for dummy.random */
+	srand(time(NULL));
+
+	return ZBX_MODULE_OK;
+}
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_uninit                                                *
+ *                                                                            *
+ * Purpose: the function is called on agent shutdown                          *
+ *          It should be used to cleanup used resources if there are any      *
+ *                                                                            *
+ * Return value: ZBX_MODULE_OK - success                                      *
+ *               ZBX_MODULE_FAIL - function failed                            *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) int	zbx_module_uninit()
+{
+	return ZBX_MODULE_OK;
+}
Index: src/modules/dummyWin/dummy.c
===================================================================
--- src/modules/dummyWin/dummy.c	(revision 0)
+++ src/modules/dummyWin/dummy.c	(working copy)
@@ -0,0 +1,196 @@
+/*
+** Zabbix
+** Copyright (C) 2001-2014 Zabbix SIA
+**
+** 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+**/
+
+#include "sysinc.h"
+#include "module.h"
+#include <windows.h>
+/* the variable keeps timeout setting for item processing */
+static int	item_timeout = 0;
+
+__declspec(dllexport)  int	zbx_module_dummy_ping(AGENT_REQUEST *request, AGENT_RESULT *result);
+__declspec(dllexport)  int	zbx_module_dummy_echo(AGENT_REQUEST *request, AGENT_RESULT *result);
+__declspec(dllexport)  int	zbx_module_dummy_random(AGENT_REQUEST *request, AGENT_RESULT *result);
+
+static ZBX_METRIC keys[] =
+/*      KEY                     FLAG		FUNCTION        	TEST PARAMETERS */
+{
+	{"dummy.ping",		0,		zbx_module_dummy_ping,	NULL},
+	{"dummy.echo",		CF_HAVEPARAMS,	zbx_module_dummy_echo, 	"a message"},
+	{"dummy.random",	CF_HAVEPARAMS,	zbx_module_dummy_random,"1,1000"},
+	{NULL}
+};
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_api_version                                           *
+ *                                                                            *
+ * Purpose: returns version number of the module interface                    *
+ *                                                                            *
+ * Return value: ZBX_MODULE_API_VERSION_ONE - the only version supported by   *
+ *               Zabbix currently                                             *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) int	zbx_module_api_version()
+{
+	return ZBX_MODULE_API_VERSION_ONE;
+}
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_item_timeout                                          *
+ *                                                                            *
+ * Purpose: set timeout value for processing of items                         *
+ *                                                                            *
+ * Parameters: timeout - timeout in seconds, 0 - no timeout set               *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) void	zbx_module_item_timeout(int timeout)
+{
+	item_timeout = timeout;
+}
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_item_list                                             *
+ *                                                                            *
+ * Purpose: returns list of item keys supported by the module                 *
+ *                                                                            *
+ * Return value: list of item keys                                            *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) ZBX_METRIC	*zbx_module_item_list()
+{
+	return keys;
+}
+
+__declspec(dllexport) int	zbx_module_dummy_ping(AGENT_REQUEST *request, AGENT_RESULT *result)
+{
+	SET_UI64_RESULT(result, 1);
+
+	return SYSINFO_RET_OK;
+}
+
+__declspec(dllexport) int	zbx_module_dummy_echo(AGENT_REQUEST *request, AGENT_RESULT *result)
+{
+	char	*param;
+
+	if (1 != request->nparam)
+	{
+		/* set optional error message */
+		SET_MSG_RESULT(result, _strdup("Invalid number of parameters"));
+		return SYSINFO_RET_FAIL;
+	}
+
+	param = get_rparam(request, 0);
+
+	SET_STR_RESULT(result, _strdup(param));
+
+	return SYSINFO_RET_OK;
+}
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_dummy_random                                          *
+ *                                                                            *
+ * Purpose: a main entry point for processing of an item                      *
+ *                                                                            *
+ * Parameters: request - structure that contains item key and parameters      *
+ *              request->key - item key without parameters                    *
+ *              request->nparam - number of parameters                        *
+ *              request->timeout - processing should not take longer than     *
+ *                                 this number of seconds                     *
+ *              request->params[N-1] - pointers to item key parameters        *
+ *                                                                            *
+ *             result - structure that will contain result                    *
+ *                                                                            *
+ * Return value: SYSINFO_RET_FAIL - function failed, item will be marked      *
+ *                                 as not supported by zabbix                 *
+ *               SYSINFO_RET_OK - success                                     *
+ *                                                                            *
+ * Comment: get_rparam(request, N-1) can be used to get a pointer to the Nth  *
+ *          parameter starting from 0 (first parameter). Make sure it exists  *
+ *          by checking value of request->nparam.                             *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) int	zbx_module_dummy_random(AGENT_REQUEST *request, AGENT_RESULT *result)
+{
+	char	*param1, *param2;
+	int	from, to;
+
+	if (request->nparam != 2)
+	{
+		/* set optional error message */
+		SET_MSG_RESULT(result, _strdup("Invalid number of parameters"));
+		return SYSINFO_RET_FAIL;
+	}
+
+	param1 = get_rparam(request, 0);
+	param2 = get_rparam(request, 1);
+
+	/* there is no strict validation of parameters for simplicity sake */
+	from = atoi(param1);
+	to = atoi(param2);
+
+	if (from > to)
+	{
+		SET_MSG_RESULT(result, _strdup("Incorrect range given"));
+		return SYSINFO_RET_FAIL;
+	}
+
+	SET_UI64_RESULT(result, from + rand() % (to - from + 1));
+
+	return SYSINFO_RET_OK;
+}
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_init                                                  *
+ *                                                                            *
+ * Purpose: the function is called on agent startup                           *
+ *          It should be used to call any initialization routines             *
+ *                                                                            *
+ * Return value: ZBX_MODULE_OK - success                                      *
+ *               ZBX_MODULE_FAIL - module initialization failed               *
+ *                                                                            *
+ * Comment: the module won't be loaded in case of ZBX_MODULE_FAIL             *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) int	zbx_module_init()
+{
+	/* initialization for dummy.random */
+	srand(time(NULL));
+
+	return ZBX_MODULE_OK;
+}
+
+/******************************************************************************
+ *                                                                            *
+ * Function: zbx_module_uninit                                                *
+ *                                                                            *
+ * Purpose: the function is called on agent shutdown                          *
+ *          It should be used to cleanup used resources if there are any      *
+ *                                                                            *
+ * Return value: ZBX_MODULE_OK - success                                      *
+ *               ZBX_MODULE_FAIL - function failed                            *
+ *                                                                            *
+ ******************************************************************************/
+__declspec(dllexport) int	zbx_module_uninit()
+{
+	return ZBX_MODULE_OK;
+}
