diff -r 86a2e675b80a -r 813b186005b6 hti/PC_Tools/HTIGateway/ServicePlugins/HtiStif/HtiStif.cpp --- a/hti/PC_Tools/HTIGateway/ServicePlugins/HtiStif/HtiStif.cpp Mon Jun 28 15:36:07 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 -#include - - -//********************************************************************************** -// 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(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(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<<""; - s<"; - s<"; - s<"; - s<<""; - - 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; iNrOfClients(); 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; iNrOfClients(); 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); -} - - - -