hti/PC_Tools/HTIGateway/ServicePlugins/HtiStif/HtiStif.cpp
branchRCL_3
changeset 19 07b41fa8d1dd
parent 18 3406c99bc375
child 20 ca8a1b6995f6
--- a/hti/PC_Tools/HTIGateway/ServicePlugins/HtiStif/HtiStif.cpp	Thu Jul 15 20:25:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1047 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-* 
-* Description:
-*/
-#include "HtiStifH.h"
-#include "HtiPlugin.h"
-#include "HtiSoapHandlerInterface.h"
-#include "../../htigateway/inc/DllModule.h"
-
-
-#include <iosfwd>
-#include <sstream>
-
-
-//**********************************************************************************
-// CONSTANTS
-//
-//**********************************************************************************
-
-// commands
-const BYTE CMD_STIF_OPEN				= 0x01;
-const BYTE CMD_STIF_CLOSE				= 0x02;
-const BYTE CMD_STIF_LOAD_MODULE			= 0x03;
-const BYTE CMD_STIF_UNLOAD_MODULE		= 0x04;
-const BYTE CMD_STIF_LIST_CASES			= 0x05;
-const BYTE CMD_STIF_START_CASE			= 0x06;
-const BYTE CMD_STIF_CANCEL_CASE			= 0x07;
-const BYTE CMD_STIF_PAUSE_CASE			= 0x08;
-const BYTE CMD_STIF_RESUME_CASE			= 0x09;
-const BYTE CMD_STIF_ADD_CASE_FILE		= 0x0A;
-const BYTE CMD_STIF_REMOVE_CASE_FILE	= 0x0B;
-const BYTE CMD_STIF_CASE_MESSAGE		= 0x0C;
-const BYTE CMD_STIF_SET_DEVICEID		= 0x0D;
-const BYTE CMD_STIF_TEST_COMPLETED		= 0x0E;
-const BYTE CMD_STIF_ATS_MESSAGE			= 0x0F;
-const BYTE CMD_STIF_SET_ATTRIBUTE		= 0x10;
-
-// timeouts
-const int TIMEOUT_10_SECONDS = 10000;
-
-// soap-action for this plugin
-const char soapAction[] = "HtiStif";
-
-// error codes for handle_received_message()
-#define HTI_RECV_ASYNC_CALL_SERVICED      1
-#define HTI_RECV_OK                       0
-#define HTI_RECV_GEN_ERROR                -1
-#define HTI_RECV_ERROR_MESSAGE            -2
-#define HTI_RECV_TIMEOUT                  -3
-#define HTI_RECV_ASYNC_CALL_SERVICE_ERROR -4
-#define HTI_RECV_ROUGUE_MESSAGE           -5
-#define HTI_RECV_UNKOWN_MESSAGE           -6
-
-//**********************************************************************************
-// FORWARD DECLARATIONS
-//
-//**********************************************************************************
-
-class HtiStifMsg;
-class HtiStifClients;
-class HtiStifSenderDll;
-//class HtiStifResults
-
-//int GetParameters(char* in, int inLen, char** parameters, int &size);
-int handle_received_message(HtiSoapHandlerInterface* handler, BOOL isSoapCallActive);
-void SetSoapFaultFromReceivedHtiError(struct soap *soap, BYTE *receivedMsgBody, int receivedMsgBodyLen);
-
-
-//**********************************************************************************
-// GLOBAL VARIABLES
-//
-//**********************************************************************************
-//HtiStifResults g_testCaseResults;
-HtiStifSenderDll *g_HtiStifSenderDll;
-HtiStifClients *g_HtiStifClients;
-
-//**********************************************************************************
-// HELPER FUNCTIONS/CLASSES
-//
-//**********************************************************************************
-
-//**********************************************************************************
-// HtiStifMsg
-//**********************************************************************************
-class HtiStifMsg
-{
-public:
-	HtiStifMsg(BYTE command);
-
-	BYTE* GetMsgBody() { return msgBody; };
-	int GetMsgLen() { return msgBodyLen; };
-
-	void AddString(char* string);
-	void AddIntAsString(int value);
-	void AddByte(BYTE byte);
-	void AddParameterSeparator();
-
-	int CheckResponseCommandCode(struct soap *soap, BYTE commandCode);
-
-	int SendReceiveMsg(struct soap *soap, int timeout);
-
-private:
-	void IncBodySize(int size);
-	BYTE *msgBody; // NOTE: deleted when sent or by gateway when received
-	int msgBodyLen;
-};
-
-HtiStifMsg::HtiStifMsg(BYTE command)
-{
-	msgBody = new BYTE[1];
-	msgBody[0] = command;
-	msgBodyLen = 1;
-}
-
-void HtiStifMsg::IncBodySize(int size)
-{
-	BYTE *newMsgBody = new BYTE[msgBodyLen+size];
-	memcpy(newMsgBody, msgBody, msgBodyLen);
-	delete msgBody;
-	msgBody = newMsgBody;
-	msgBodyLen += size;
-}
-
-void HtiStifMsg::AddString(char* string)
-{
-	int stringLen = (int) strlen(string);
-	int writePos = msgBodyLen;
-	IncBodySize(stringLen);
-	memcpy(msgBody+writePos, string, stringLen);
-}
-
-void HtiStifMsg::AddIntAsString(int value)
-{
-	char buf[50];
-	_itoa(value, buf, 10);
-	AddString(buf);
-}
-
-void HtiStifMsg::AddByte(BYTE byte)
-{
-	int writePos = msgBodyLen;
-	IncBodySize(1);
-	msgBody[writePos] = byte;
-}
-
-void HtiStifMsg::AddParameterSeparator()
-{
-	AddByte('|');
-}
-
-int HtiStifMsg::SendReceiveMsg(struct soap* soap, int timeout)
-{
-	//dump(msgBody, msgBodyLen);
-
-	BYTE commandCode = msgBody[0];
-
-	// Send the message to symbian side
-	HtiSoapHandlerInterface* handler = static_cast<HtiSoapHandlerInterface*>(soap->user);
-	handler->SendHtiMessage(HTI_STIF_UID, msgBody, msgBodyLen);
-
-	// Clean these up for received HTI message
-	delete msgBody;
-	msgBody = NULL;
-	msgBodyLen = 0;
-
-	while(1)
-	{
-		if (handler->WaitForHtiMessage(timeout))
-		{
-			int err = handle_received_message(handler, TRUE);
-
-			// NOTE: this will be destroyed by gateway
-			msgBody = (BYTE*) handler->ReceivedHtiMessageBody();
-			msgBodyLen = handler->ReceivedHtiMessageBodySize();
-			
-			// Received a HTI initiated msg
-			// Start waiting again
-			if( (err == HTI_RECV_ASYNC_CALL_SERVICED) || 
-				(err == HTI_RECV_ASYNC_CALL_SERVICE_ERROR) )
-			{
-                continue;
-			}
-
-			if( err == HTI_RECV_ERROR_MESSAGE )
-				SetSoapFaultFromReceivedHtiError(soap, msgBody, msgBodyLen);
-
-			return err;
-		}
-		else
-		{
-			// timeout
-			soap->error = soap_receiver_fault(soap, "HtiGateway", "No response from symbian side");
-			return HTI_RECV_TIMEOUT;
-		}
-	}
-}
-
-int HtiStifMsg::CheckResponseCommandCode(struct soap *soap, BYTE commandCode)
-{
-	int result = SOAP_OK;
-	
-	if( msgBody[0] != commandCode )
-	{
-		char msg[] = "incorrect response CommandCode (expected 0x%x, got 0x%x)";
-		int msgLen = _scprintf(msg, commandCode, msgBody[0])+1; // +1 for nul char
-		char *buf = new char[msgLen];
-		sprintf(buf, msg, commandCode, msgBody[0]);
-		soap->error = soap_receiver_fault(soap, "HtiError", buf);
-		delete buf;
-		result = SOAP_FAULT;
-	}
-
-	return result;
-}
-
-//**********************************************************************************
-// HtiStifClients
-//**********************************************************************************
-class HtiStifClients
-{
-public:
-	HtiStifClients() {m_size = 0; m_clients = NULL;};
-	~HtiStifClients();
-	int Add(char* host);
-	int Remove(char* host);
-	int NrOfClients() {return m_size;};
-	const char* Get(int index) {return m_clients[index];};
-private:
-	int m_size;
-	char **m_clients;
-};
-
-HtiStifClients::~HtiStifClients()
-{
-	for(int i=0; i<m_size; i++)
-		delete m_clients[i];
-	free(m_clients);
-	m_size = 0;
-}
-
-int HtiStifClients::Add(char* host)
-{
-	// check if host already exist
-	for(int i=0; i<m_size; i++)
-	{
-		if(!strcmp(m_clients[i], host))
-			return -1;
-	}
-
-	// alloc space for new pointer array
-	char **new_clients = (char**) malloc(sizeof(char*)*(m_size+1));
-	
-	// copy data
-	for(int i=0; i<m_size; i++)
-		new_clients[i] = m_clients[i];
-
-	// free previous pointer array & set new one
-	free(m_clients);
-	m_clients = new_clients;
-
-	// alloc space for host
-	char* buf = new char[strlen(host)+1]; // +1 for nul
-	strcpy(buf, host);
-	new_clients[m_size] = buf;
-
-	// update size
-	m_size += 1;
-
-	return 0;
-}
-
-int HtiStifClients::Remove(char* host)
-{
-	int err = -1;
-
-	// alloc a smaller pointer array
-	char **new_clients = (char**) malloc(sizeof(char*)*(m_size-1));
-	
-	// copy data except removed
-	int j=0;
-	for(int i=0; i<m_size; i++)
-	{
-		if(!strcmp(m_clients[i],host))
-		{
-			delete m_clients[i]; // delete removed host
-			err = 0;
-			continue;
-		}
-
-		new_clients[j] = m_clients[i];
-		j++;
-	}
-
-	// did not find host?
-	if(err != 0)
-	{
-		free(new_clients);
-		return err;
-	}
-
-	// free previous pointer array & set new one
-	free(m_clients);
-	m_clients = new_clients;
-
-	// update size
-	m_size -= 1;
-
-	return err;
-}
-
-
-
-//**********************************************************************************
-// HtiStifSenderDll
-//**********************************************************************************
-class HtiStifSenderDll : public CDLLModule
-{
-public:
-
-	DECLARE_DLL_FUNCTION(int, __cdecl,
-						soap_send_ns1__stifMessage, (soap *, const char *, const char *, char *, void *))
-	DECLARE_DLL_FUNCTION(int, __cdecl,
-						soap_send_ns1__stifResult, (soap *, const char *, const char *, ns1__HtiStifResult, void *))
-
-    BEGIN_DLL_INIT()
-		INIT_DLL_FUNCTION(int, __cdecl,
-			 soap_send_ns1__stifMessage, (soap *, const char *, const char *, char *, void *), "soap_send_ns1__stifMessage")
-		INIT_DLL_FUNCTION(int, __cdecl,
-			 soap_send_ns1__stifResult, (soap *, const char *, const char *, ns1__HtiStifResult, void *), "soap_send_ns1__stifResult")
-	END_DLL_INIT()
-};
-
-void SetSoapFaultFromReceivedHtiError(struct soap *soap, BYTE *receivedMsgBody, int receivedMsgBodyLen)
-{
-	if( receivedMsgBodyLen == 10 )
-	{
-		// This is a standard error message
-		// (eg. not authenticated)
-		HtiSoapHandlerInterface* handler =
-			static_cast<HtiSoapHandlerInterface*>(soap->user);
-		handler->SendSoapFaultFromReceivedHtiError();
-		return;
-	}
-
-	// Get error codes
-	int frameworkErrorCode = *((BYTE*)(receivedMsgBody + 1));
-	int serviceErrorCode = *((DWORD*)(receivedMsgBody + 2));
-
-	// Get error description
-	// NOTE: first byte is skipped because it contains the command code
-	int serviceErrorDescLen = receivedMsgBodyLen - 11;
-	char* serviceErrorDesc = new char[receivedMsgBodyLen - 11 + 1];
-	memcpy(serviceErrorDesc, receivedMsgBody+11, serviceErrorDescLen);
-	serviceErrorDesc[serviceErrorDescLen] = 0x0;
-
-	// Fill the xml struct
-	std::stringstream s;
-	s<<"<htiError xmlns=\'urn:hti/fault\'><frameworkErrorCode>";
-	s<<frameworkErrorCode;
-	s<<"</frameworkErrorCode><serviceErrorCode>";
-	s<<serviceErrorCode;
-	s<<"</serviceErrorCode><serviceErrorDescription>";
-	s<<serviceErrorDesc;
-    s<<"</serviceErrorDescription>";
-	s<<"</htiError>";
-	
-	soap->error = soap_receiver_fault(soap, "HtiError", s.str().c_str() );
-
-	delete serviceErrorDesc;
-}
-
-//**********************************************************************************
-// handle_received_message
-//**********************************************************************************
-int handle_received_message(HtiSoapHandlerInterface* handler, BOOL isSoapCallActive)
-{
-	if(handler->IsReceivedHtiError())
-		return HTI_RECV_ERROR_MESSAGE;
-
-	// Get message
-	BYTE *msgBody = (BYTE*) handler->ReceivedHtiMessageBody();
-	int msgBodyLen = handler->ReceivedHtiMessageBodySize();
-
-	switch(msgBody[0])
-	{
-	// Initiated by SOAP
-	case CMD_STIF_OPEN:
-	case CMD_STIF_CLOSE:		
-	case CMD_STIF_LOAD_MODULE:
-	case CMD_STIF_UNLOAD_MODULE:
-	case CMD_STIF_LIST_CASES:
-	case CMD_STIF_START_CASE:
-	case CMD_STIF_CANCEL_CASE:
-	case CMD_STIF_PAUSE_CASE:
-	case CMD_STIF_RESUME_CASE:
-	case CMD_STIF_ADD_CASE_FILE:
-	case CMD_STIF_REMOVE_CASE_FILE:
-	case CMD_STIF_CASE_MESSAGE:
-	case CMD_STIF_SET_DEVICEID:
-	case CMD_STIF_SET_ATTRIBUTE:
-		if(isSoapCallActive)
-			return HTI_RECV_OK;
-		else
-		{
-			printf("HtiStif: Received a known but unexpected message (command code 0x%x)\n", msgBody[0]);
-			return HTI_RECV_ROUGUE_MESSAGE;
-		}
-        break;
-
-	// Initiated by HTI
-	case CMD_STIF_TEST_COMPLETED:
-		{
-			// Make copy of parameters
-			char *params = new char[msgBodyLen];
-			memcpy(params, msgBody+1, msgBodyLen-1);
-			params[msgBodyLen-1] = 0x0; // add nul to make strtok easier
-			
-			// Get data from params
-			char *testCaseId = strtok(params, "|");
-			char *testResult = strtok(NULL, "|");
-			char *testExecutionResult = strtok(NULL, "|");
-			char *resultDescription = strtok(NULL, "|");
-
-			// Check if all is there
-			if( !testCaseId || !testResult || !testExecutionResult)
-			{
-				printf("HtiStif: Received incomplete testcase result\n" );
-				delete params;
-				return HTI_RECV_ASYNC_CALL_SERVICE_ERROR;
-			}
-			
-			// Get soap env
-			struct soap soap;
-			soap_init(&soap);
-			soap.namespaces = namespaces;
-
-			// Fill HtiStifResult
-			struct ns1__HtiStifResult result;
-			result.caseId = atoi(testCaseId);
-			result.caseResult = atoi(testResult);
-			result.executionResult = atoi(testExecutionResult);
-			if(resultDescription)
-			{
-				result.resultDescription = (char*) soap_malloc( &soap, strlen(resultDescription)+1 );
-				strcpy(result.resultDescription, resultDescription);
-			}
-			else
-				result.resultDescription = NULL;
-			
-			delete params; // not needed anymore
-			
-			// Send the HtiStifResult to registered clients
-			for(int i=0; i<g_HtiStifClients->NrOfClients(); i++)
-			{
-				if(g_HtiStifSenderDll->soap_send_ns1__stifResult(&soap, g_HtiStifClients->Get(i), soapAction, result, NULL) != SOAP_OK)
-					printf("HtiStif: error sending stifResult to %s\n", g_HtiStifClients->Get(i) );
-			}
-			soap_destroy(&soap);
-			soap_end(&soap);
-			soap_done(&soap);
-
-			return HTI_RECV_ASYNC_CALL_SERVICED;
-		}
-		break;
-
-	case CMD_STIF_ATS_MESSAGE:
-		{
-			// Get soap env
-			struct soap soap;
-			soap_init(&soap);
-			soap.namespaces = namespaces;
-
-			// Get message
-			// NOTE: messages are in string format so they don't have nul-characters
-			// This might change in the future and then xsd__string will no do for this task.
-			char* msg = (char*) soap_malloc(&soap, msgBodyLen);
-			memcpy(msg, msgBody+1, msgBodyLen-1);
-			msg[msgBodyLen-1] = 0x0; // add nul
-
-			// Send the HtiStifResult to registered clients
-			for(int i=0; i<g_HtiStifClients->NrOfClients(); i++)
-			{
-				if(g_HtiStifSenderDll->soap_send_ns1__stifMessage(&soap, g_HtiStifClients->Get(i), soapAction, msg, NULL) != SOAP_OK)
-					printf("HtiStif: error sending stifMessage to %s\n", g_HtiStifClients->Get(i) );
-			}
-			soap_destroy(&soap);
-			soap_end(&soap);
-			soap_done(&soap);
-			
-			return HTI_RECV_ASYNC_CALL_SERVICED;
-		}
-		break;
-
-
-	default:
-		printf("HtiStif: Received an unkown message (command code 0x%x, sync call active %d)\n", msgBody[0], isSoapCallActive);
-		return HTI_RECV_UNKOWN_MESSAGE;
-		break;
-	}
-
-	// Should never come here
-	return HTI_RECV_GEN_ERROR;
-}
-
-
-
-//**********************************************************************************
-// SOAP FUNCTIONS
-//
-//**********************************************************************************
-
-//**********************************************************************************
-// ns1__openStif()
-//**********************************************************************************
-int ns1__openStif(struct soap* soap, char *iniFile, struct ns1__openStifResponse *out)
-{
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_OPEN);
-	if(iniFile != NULL)
-	{
-		if(strlen(iniFile) != 0)
-			msg.AddString(iniFile);
-	}
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check response command code
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_OPEN) )
-		return SOAP_FAULT;
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__closeStif()
-//**********************************************************************************
-int ns1__closeStif(struct soap* soap, void *_, struct ns1__closeStifResponse *out)
-{
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_CLOSE);
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check response command code
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_CLOSE) )
-		return SOAP_FAULT;
-
-	return SOAP_OK;
-}
-
-
-//**********************************************************************************
-// ns1__loadStifTestModule()
-//**********************************************************************************
-int ns1__loadStifTestModule(struct soap* soap, char *moduleName, char *iniFile, char *&moduleNameLoaded)
-{
-	// Parameter check
-	if(check_mandatory_string_parameter(soap, moduleName, "moduleName"))
-		return SOAP_FAULT;
-
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_LOAD_MODULE);
-	msg.AddString(moduleName);
-	if(iniFile != NULL)
-	{
-		if(strlen(iniFile) != 0)
-		{
-			msg.AddParameterSeparator();
-			msg.AddString(iniFile);
-		}
-	}
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check CommandCode
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_LOAD_MODULE) )
-		return SOAP_FAULT;
-
-	int moduleNameLoadedLen = msg.GetMsgLen()-1; // remaining msgBody
-	moduleNameLoaded = (char*) soap_malloc(soap, moduleNameLoadedLen+1); // +1 for nul char
-	memcpy(moduleNameLoaded, msg.GetMsgBody()+1, moduleNameLoadedLen);
-	moduleNameLoaded[moduleNameLoadedLen] = 0x0; // add nul char
-	
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__unloadStifTestModule()
-//**********************************************************************************
-int ns1__unloadStifTestModule(struct soap* soap, char *moduleName, char *&moduleNameUnloaded)
-{
-	// Parameter check
-	if(check_mandatory_string_parameter(soap, moduleName, "moduleName"))
-		return SOAP_FAULT;
-
-		// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_UNLOAD_MODULE);
-	msg.AddString(moduleName);
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check CommandCode
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_UNLOAD_MODULE) )
-		return SOAP_FAULT;
-
-	int moduleNameUnloadedLen = msg.GetMsgLen()-1; // remaining msgBody
-	moduleNameUnloaded = (char*) soap_malloc(soap, moduleNameUnloadedLen+1); // +1 for nul char
-	memcpy(moduleNameUnloaded, msg.GetMsgBody()+1, moduleNameUnloadedLen);
-	moduleNameUnloaded[moduleNameUnloadedLen] = 0x0; // add nul char
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__listStifTestCases()
-//**********************************************************************************
-int ns1__listStifTestCases(struct soap* soap, char *moduleName, struct ArrayOfTestCases *testCases)
-{
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_LIST_CASES);
-	if(moduleName != NULL)
-	{
-		if(strlen(moduleName) != 0)
-			msg.AddString(moduleName);
-	}
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check CommandCode
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_LIST_CASES) )
-		return SOAP_FAULT;
-
-	// No testcases found
-	if(msg.GetMsgLen() <= 1)
-		return SOAP_OK;
-
-	// make a copy of the list
-	char* testCaseTitleList = new char[msg.GetMsgLen()];
-	memcpy(testCaseTitleList, msg.GetMsgBody()+1, msg.GetMsgLen());
-	testCaseTitleList[msg.GetMsgLen()-1] = 0x0; //add nul to make life easier
-
-	// Get number of testcases
-	char* testcase = strtok( testCaseTitleList, "|" );
-
-	// Only one testcase ?
-	if(testcase == NULL)
-	{
-		testCases->__size = 1;
-		testCases->__ptr = (char**) soap_malloc(soap, sizeof(char**));
-		testCases->__ptr[0] = (char*) soap_malloc(soap, msg.GetMsgLen());
-		memcpy(testCases->__ptr[0], testCaseTitleList, msg.GetMsgLen()); // (remember we added nul)	
-		delete testCaseTitleList;
-		return SOAP_OK;
-	}
-
-	// ..no! we have at least two
-	while(testcase != NULL)
-	{
-		testCases->__size++;
-		testcase = strtok( NULL, "|" ); // continue with testCaseTitleList
-	}
-	
-	// Now that we know the number of testcases title we can alloc soap space for 
-	// pointers and copy testcase titles to soap space.
-	testCases->__ptr = (char**) soap_malloc(soap, sizeof(char**)*testCases->__size);
-
-	// reset testCaseTitleList from previous strtok
-	memcpy(testCaseTitleList, msg.GetMsgBody()+1, msg.GetMsgLen());
-	testCaseTitleList[msg.GetMsgLen()-1] = 0x0; //add nul to make life easier
-
-	int i = 0;
-	testcase = strtok( testCaseTitleList, "|" );
-	while(testcase != NULL)
-	{
-		int testCaseLen = (int) strlen(testcase);
-		testCases->__ptr[i] = (char*) soap_malloc(soap, testCaseLen+1);
-		memcpy(testCases->__ptr[i], testcase, testCaseLen);
-		testCases->__ptr[i][testCaseLen] = 0x0; // add nul char
-		i++;
-		testcase = strtok( NULL, "|" );
-	}
-	delete testCaseTitleList;
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__startStifTestCase()
-//**********************************************************************************
-int ns1__startStifTestCase(struct soap* soap, char *moduleName, int testCaseIndex, int &testCaseId)
-{
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_START_CASE);
-
-	if(moduleName != NULL)
-	{
-		if(strlen(moduleName) != 0)
-		{
-			msg.AddString(moduleName);
-			msg.AddParameterSeparator();
-		}
-	}
-    msg.AddIntAsString(testCaseIndex);
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check response command code
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_START_CASE) )
-		return SOAP_FAULT;
-
-	// Get testCaseId
-	char* tmp = new char[msg.GetMsgLen()];
-	memcpy(tmp, msg.GetMsgBody()+1, msg.GetMsgLen()-1);
-	tmp[msg.GetMsgLen()-1] = 0x0; // add nul
-	testCaseId = atoi(tmp);
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__cancelStifTestCase()
-//**********************************************************************************
-int ns1__cancelStifTestCase(struct soap* soap, int testCaseId, struct ns1__cancelStifTestCaseResponse *out)
-{
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_CANCEL_CASE);
-	msg.AddIntAsString(testCaseId);
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check response command code
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_CANCEL_CASE) )
-		return SOAP_FAULT;
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__pauseStifTestCase()
-//**********************************************************************************
-int ns1__pauseStifTestCase(struct soap* soap, int testCaseId, struct ns1__pauseStifTestCaseResponse *out)
-{
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_PAUSE_CASE);
-	msg.AddIntAsString(testCaseId);
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check response command code
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_PAUSE_CASE) )
-		return SOAP_FAULT;
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__resumeStifTestCase()
-//**********************************************************************************
-int ns1__resumeStifTestCase(struct soap* soap, int testCaseId, struct ns1__resumeStifTestCaseResponse *out)
-{
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_RESUME_CASE);
-	msg.AddIntAsString(testCaseId);
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check response command code
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_RESUME_CASE) )
-		return SOAP_FAULT;
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__addStifTestCaseFile()
-//**********************************************************************************
-int ns1__addStifTestCaseFile(struct soap* soap, char *moduleName, char *testCaseFile, struct ns1__addStifTestCaseFileResponse *out)
-{
-	// Parameter check
-	if( check_mandatory_string_parameter(soap, moduleName, "moduleName") ||
-		check_mandatory_string_parameter(soap, testCaseFile, "testCaseFile") )
-		return SOAP_FAULT;
-
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_ADD_CASE_FILE);
-	msg.AddString(moduleName);
-	msg.AddParameterSeparator();
-	msg.AddString(testCaseFile);
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check response command code
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_ADD_CASE_FILE) )
-		return SOAP_FAULT;
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__removeStifTestCaseFile()
-//**********************************************************************************
-int ns1__removeStifTestCaseFile(struct soap* soap, char *moduleName, char *testCaseFile, struct ns1__removeStifTestCaseFileResponse *out)
-{
-	// Parameter check
-	if( check_mandatory_string_parameter(soap, moduleName, "moduleName") ||
-		check_mandatory_string_parameter(soap, testCaseFile, "testCaseFile") )
-		return SOAP_FAULT;
-
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_REMOVE_CASE_FILE);
-	msg.AddString(moduleName);
-	msg.AddParameterSeparator();
-	msg.AddString(testCaseFile);
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check response command code
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_REMOVE_CASE_FILE) )
-		return SOAP_FAULT;
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__setDeviceId()
-//**********************************************************************************
-int ns1__setDeviceId(struct soap* soap, int deviceId, struct ns1__setDeviceIdResponse *out)
-{
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_SET_DEVICEID);
-	msg.AddIntAsString(deviceId);
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check response command code
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_SET_DEVICEID) )
-		return SOAP_FAULT;
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__queryStifTestCaseResult()
-//**********************************************************************************
-int ns1__queryStifTestCaseResult(struct soap* soap, int testCaseId, queryStifTestCaseResultResponse &r)
-{
-	soap->error = soap_receiver_fault(soap, "HtiGateway", "queryStifTestCaseResult: not supported");
-	return SOAP_FAULT;
-}
-
-//**********************************************************************************
-// ns1__runStifTestCase()
-//**********************************************************************************
-int ns1__runStifTestCase(struct soap* soap, char *moduleName, int testCaseIndex, struct runStifTestCaseResponse &r)
-{
-	soap->error = soap_receiver_fault(soap, "HtiGateway", "runStifTestCase: not supported");
-	return SOAP_FAULT;
-}
-
-//**********************************************************************************
-// ns1__register()
-//**********************************************************************************
-int ns1__register(struct soap* soap, char *host, struct ns1__registerResponse *out)
-{
-	if(check_mandatory_string_parameter(soap, host, "host"))
-		return SOAP_FAULT;
-
-	if(g_HtiStifClients->Add(host) != 0)
-	{
-		soap->error = soap_receiver_fault(soap, "HtiGateway", "register: host already registered");
-		return SOAP_FAULT;
-	}
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__deregister()
-//**********************************************************************************
-int ns1__deregister(struct soap* soap, char *host, struct ns1__deregisterResponse *out)
-{
-	if(check_mandatory_string_parameter(soap, host, "host"))
-		return SOAP_FAULT;
-
-	if(g_HtiStifClients->Remove(host) != 0)
-	{
-		soap->error = soap_receiver_fault(soap, "HtiGateway", "deregister: did not find host");
-        return SOAP_FAULT;
-	}
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__stifMessage()
-//**********************************************************************************
-int ns1__stifMessage(struct soap* soap, char *message, struct ns1__stifMessageResponse *out)
-{
-	// Parameter check
-	if( check_mandatory_string_parameter(soap, message, "message") )
-		return SOAP_FAULT;
-
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_CASE_MESSAGE);
-	msg.AddString(message);
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check response command code
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_CASE_MESSAGE) )
-		return SOAP_FAULT;
-
-	return SOAP_OK;
-}
-
-//**********************************************************************************
-// ns1__setAttribute()
-//**********************************************************************************
-int ns1__setAttribute(struct soap* soap, 
-					  char *attribute, 
-					  char *value, 
-                      struct ns1__SetAttributeResponse *out)
-{
-	// Parameter check
-	if( check_mandatory_string_parameter(soap, attribute, "attribute") ||
-		check_mandatory_string_parameter(soap, value, "value") )
-		return SOAP_FAULT;
-
-	// Assemble HTI message
-	HtiStifMsg msg(CMD_STIF_SET_ATTRIBUTE);
-	msg.AddString(attribute);
-	msg.AddParameterSeparator();
-	msg.AddString(value);
-
-	// Send msg and receive response
-	if( msg.SendReceiveMsg(soap, TIMEOUT_10_SECONDS) != ERROR_SUCCESS )
-		return SOAP_FAULT;
-
-	// Check response command code
-	if( msg.CheckResponseCommandCode(soap, CMD_STIF_SET_ATTRIBUTE) )
-		return SOAP_FAULT;
-
-	return SOAP_OK;
-}
-
-
-//**********************************************************************************
-// EXPORTED FUNCTIONS
-//
-//**********************************************************************************
-
-//**********************************************************************************
-// DllMain
-//**********************************************************************************
-BOOL WINAPI DllMain(
-    HINSTANCE hinstDLL,  // handle to DLL module
-    DWORD fdwReason,     // reason for calling function
-    LPVOID lpReserved )  // reserved
-{
-    switch( fdwReason ) 
-    { 
-        case DLL_PROCESS_ATTACH:
-
-			g_HtiStifClients = new HtiStifClients;
-			
-			// Load HtiStifSender
-			g_HtiStifSenderDll = new HtiStifSenderDll;
-			if( g_HtiStifSenderDll->Init("serviceplugins/HtiStifSender.dll") != TRUE)
-			{
-				printf("HtiStif: could not load HtiStifSender.dll");
-				return FALSE;
-			}
-			
-			// Check exported functions
-			if( !g_HtiStifSenderDll->soap_send_ns1__stifMessage )
-			{
-				printf("HtiStif: HtiStifSender.dll - exported function soap_send_ns1__stifMessage() not found");
-				return FALSE;
-			}
-
-			if( !g_HtiStifSenderDll->soap_send_ns1__stifResult )
-			{
-				printf("HtiStif: HtiStifSender.dll - exported function soap_send_ns1__stifResult() not found");
-				return FALSE;
-			}
-	        break;
-
-        case DLL_PROCESS_DETACH:
-
-			// Delete HtiStifSender
- 			delete g_HtiStifSenderDll;
-
-			delete g_HtiStifClients;
-
-            break;
-    }
-    return TRUE;
-}
-
-//**********************************************************************************
-// hti_serve
-//**********************************************************************************
-int hti_serve(HtiSoapHandlerInterface* handler)
-{
-	return handle_received_message(handler, FALSE);
-}
-
-
-
-