--- 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);
-}
-
-
-
-