diff -r 7fdc9a71d314 -r 8ad140f3dd41 hti/PC_Tools/HTIGateway/HtiGateway/inc/SOAPHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hti/PC_Tools/HTIGateway/HtiGateway/inc/SOAPHandler.h Wed Oct 13 16:17:58 2010 +0300 @@ -0,0 +1,193 @@ +/* +* 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: +* This file contains header of SOAPHandler class +*/ + +#ifndef __SOAP__HANDLER_H_ +#define __SOAP__HANDLER_H_ + +#include "thread.h" +#include "HtiSoapHandlerInterface.h" +#include "HtiPluginDll.h" + +#include + +using namespace std; + +#define LOOP_WAIT_INTERVAL INFINITE //in ms +#define LOOP_CHECK_INTERVAL 100 //in ms + +//forward decl. +class HtiDispatcher; +class HtiMessage; + +//********************************************************************************** +// Class SOAPHandler +// +// This class is used to handle SOAP requests, send HtiMessages +// and handle HTI responses by using loaded HtiPluginDll +//********************************************************************************** +class SoapHandler: public Thread, public HtiSoapHandlerInterface +{ +public: + SoapHandler(const string& pluginName); + virtual ~SoapHandler(); + + inline void SetDispatcher( HtiDispatcher* dispatcher); + + /** + * This method is used to init HtiPluginDll + */ + bool LoadPlugin(); + + inline char* soapAction(){return m_HtiPlugin->soapActionName();}; + inline int serviceUID(){return m_HtiPlugin->serviceUID();}; + + /** + * Just a wrapper around soap_serve() created by gSOAP + * called by DataGatewaySOAPServerThread for a new SOAP request + * return true if request can be processed + */ + bool ServeSoap(struct soap* soapEnv); + + /** + * Actual SOAP request processing in the thread + * if it was accepted in ServeSoap() + * The request is processed using HtiPluginDll + */ + void DoServeSoap(); + + /** + * This method tells whether or not this handler is currently busy processing request + */ + bool IsBusyForSoapRequest(); + + /** + * This method tells whether or not this handler is currently busy processing hti message + */ + bool IsBusyForHtiMessage(); + + /* + * This method is used to check if SoapHandler is currently waiting for Hti Message + */ + bool IsWaitsForHtiMessage(); + + /** + * Notification function called when handler receive + * new HTI message from Symbian side + */ + void ProcessHtiResponse(); + + /** + * This loop waits until either a SOAP request or HTI response event has arrived + * When one of them arrives, it is handled and the loop starts again to wait + * for a new request or response + */ + void Run(); + void Stop(); + + /** + * wait for hti message + * Suspend thread until HtiMessage for the loaded plug-in is received + * Return true if hti message is received or false if timeout + */ + bool WaitForHtiMessage( DWORD timeout ); + inline bool WaitForHtiMessage( ){return WaitForHtiMessage( INFINITE );}; + + int ReceivedHtiMessageBodySize(); + void* ReceivedHtiMessageBody(); + + /* + * HtiPluginDll's call this method + * It creates a HtiMessage of the data given as parameters and sends it using HtiDispatcher + */ + void SendHtiMessage( DWORD serviceId, void* body, DWORD len ); + void SendHtiMessage( DWORD serviceId, void* body, DWORD len, BYTE priority ); + + //error message + bool IsReceivedHtiError(); + int HtiErrorCode(); + int HtiServiceErrorCode(); + char* HtiServiceErrorDerscription(); + void SendSoapFaultFromReceivedHtiError(); + + /** + * This method is called when incoming data has been read from CommChannelPlugin + * The method sets m_hReceiveHtiEvent to signaled state(Run method waits this event object to become signaled) + */ + bool ReceiveHtiMessage(HtiMessage* message); + +private: + + void CleanSoapEnv(); + +// data members +protected: + string m_PluginName; + + HtiPluginDll* m_HtiPlugin; + + HtiDispatcher* m_HtiDispatcher; + + /** + * Message passed to the handler by AcceptHtiMessage() + * It is usually processed than + */ + HtiMessage* m_ReceiveHtiMsg; + + bool m_Running; + +private: + /** + * used to wait for messages from symbian-side + */ + HANDLE m_hReceiveHtiEvent; + + /** + * used to wait for SOAP request + */ + HANDLE m_hReceiveSoapEvent; + + /** + * Used to allow define either thread is busy + */ + HANDLE m_hHandlerCanAcceptSoapRequest; + HANDLE m_hHandlerCanAcceptHtiMessage; + + /** + * Needed to dispatch error messages without tartet service uid + **/ + HANDLE m_hHandlerWaitsHtiMessage; + + /** + * Local gSOAP env + */ + struct soap* m_SoapEnv; +}; +/* +inline HtiMessage* SoapHandler::GetReceivedHtiMessage() +{ + HtiMessage* r = m_ReceiveHtiMsg; + m_ReceiveHtiMsg = NULL; + return r; +} +*/ + +inline void SoapHandler::SetDispatcher( HtiDispatcher* dispatcher) +{ + m_HtiDispatcher = dispatcher; +} + +#endif //__SOAP__HANDLER_H_ \ No newline at end of file