diff -r 000000000000 -r 62f9d29f7211 webservices/wsstar/wsstarplugin/inc/wsstarplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/wsstar/wsstarplugin/inc/wsstarplugin.h Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,324 @@ +/* +* Copyright (c) 2006-2006 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: Header declaration +* +*/ + + + + + + + + + + + + +#ifndef WSSTAR_PLUGIN_H +#define WSSTAR_PLUGIN_H + +// INCLUDES +#include +#include + +#include "senserviceinvocationframework.h" // internal Framework\inc + +#include "wsstarcons.h" +#include "sensessionhandler.h" +#include "senmessagehandler.h" +#include "wsstarhandlercontext.h" +#include "wsstarsessioncontext.h" +#include "wsstarmessagecontext.h" +#include "SenSoapMessage.h" +#include "SenXmlConstants.h" +#include "SenSoapConstants.h" + +// DATA TYPES +typedef RSenPointerMap RMapHandlers; +/** + * WSStar Plugin framework. + * An implementation of the CSIF definition. This is concrete + * class, instance of which ECOM framework gives to ECOM clients. + */ +class CWSStarPlugin : public CSIF + { + public: + /** + * Function: NewL + * + * Description: Create instance of concrete implementation. Note that ECOM + * interface implementations can only have two signatures for + * NewL: + * - NewL without parameters (used here) + * - NewL with TAny* pointer, which may provide some client + * data + * + * @return Instance of this class. + * + * Note: The interface, which is abstract base class of this + * implementation, also provides NewL method. Normally abstract + * classes do not provide NewL, because they cannot create + * instances of themselves. + * @since S60 4.0 + */ + static CWSStarPlugin* NewL(TAny* aManager); + + + public: + + + /** + * Methods implementing CSIF ECOM interface + * For convenience of components classes + * @since S60 4.0 + */ + //RFileLogger* Log() const; + + /** + * Return a system wide unique string to identify this framework + * + * @return TDesC8 that uniquely identifies this framework. + * @since S60 4.0 + */ + virtual const TDesC8& Id(); + + /** + * Try to find one or more session services that match the given + * ServiceDescription.If not finded new session is created and added into + * coreManager + * Return the number of ServiceDescriptions that were added. + * + * @param aPattern - A ServiceDescriptin that should be treated as a + * pattern + * @param aRemoteConsumer - the consumer sending the request + * @param aErrorMsg - in case that return value is negative, this may contain + * error as descriptor (SOAP Fault etc) + * @return (TInt) count of matching ServiceDescriptions that were added or error + * @since S60 4.0 + */ + virtual TInt AddServiceDescriptionL( MSenServiceDescription& aPattern, + MSenRemoteServiceConsumer& aRemoteConsumer, + HBufC8*& aErrorMsg ); + + /** + * Attempt to register the ServiceDescription. + * In fact session is created but not vaidated and added into CoreManager. + * So registering different to adding that it doesnt validate, just register. + * Common issue is increase core database by one session (validated or not) + * @param aServiceDescription A ServiceDescription + * + * @return TInt aError - indicates the error or KErrNone if successful + * @since S60 4.0 + */ + virtual TInt RegisterServiceDescriptionL(MSenServiceDescription& aServiceDescription); + + + /** + * Attempt to unregister the ServiceDescription from the ServiceManager + * that owns the framework. + * This is a callback used by the ServiceManager. + * + * @param aServiceDescription A ServiceDescription + * + * @return TInt aError - indicates the error or KErrNone if successful + * @since S60 4.0 + */ + virtual TInt UnregisterServiceDescriptionL( + MSenServiceDescription& aServiceDescription); + + /** + * Create a ServiceSession based upon the given ServiceDescription. + * The ServiceSession is expected to be "valid", i.e. ready for use + * by a client. + * + * @param aServiceDescription A ServiceDescription + * + * @param aNewSession (CSenServiceSession) + * + * @return TInt error or KErrNone if successful + * @since S60 4.0 + */ + virtual TInt CreateServiceSessionL( MSenServiceDescription& aServiceDescription, + MSenServiceDescription& aPattern, + CSenServiceSession*& aNewSession, + MSenRemoteServiceConsumer& aRemoteConsumer, + HBufC8*& /* aErrorMsg */ ); + + /** + * Return a new instance of a framework specific class that + * implements the ServiceDesccription interface. + * + * @param new service description + * (which typically derives from CSenServiceSession) + * + * @return TInt error or KErrNone if successful + * @since S60 4.0 + */ + virtual CSenWSDescription* NewServiceDescriptionL(); + + /** + * Return the ServiceManager for which this instance is working. + * This is used by the ServiceSession instances created by this framework. + * + * Note, in Sen, MSenCoreServiceManager IS SINGLETON(!), so all Frameworks + * return their "owner" - that is - the only service manager in + * Sen Framework + * + * @return (MSenCoreServiceManager) + * @since S60 4.0 + */ + virtual MSenCoreServiceManager& Manager(); + + + /** + * Set the ServiceManager to which this instance reports. + * The (singleton) ServiceManager calls this method when + * it instantiates a framework. + * + * @param aServiceManager The singleton ServiceManager in the system. + * @since S60 4.0 + */ + virtual void SetManager(MSenCoreServiceManager& aServiceManager); + + + /** + * Return an object that can do SAX based parsing of a XML fragment + * that contains framework specific configuration information. + * The ServiceManager asks for this BaseFragment upon startup + * in order to give this framework a chance to read its configuration + * information from the central ServiceManager configuration document. + * + * @return (CSenBaseFragment) + * @since S60 4.0 + */ + virtual CSenBaseFragment& ConfigParser(); + + /** + * Read the ServiceInvocationFramework configuration. + * This method is invoked by the ServiceManager when it read config. + * @since S60 4.0 + */ + virtual void StartElementL(const TDesC8& aNsUri, + const TDesC8& aLocalName, + const TDesC8& aQName, + const RAttributeArray& aAttrs); + + /** + * Read the ServiceInvocationFramework configuration. + * This method is invoked by the ServiceManager when it read config. + * @since S60 4.0 + */ + virtual void EndElementL(const TDesC8& aNsUri, + const TDesC8& aLocalName, + const TDesC8& aQName); + + //derived from SenBaseFragment + virtual HBufC8* AsXmlL(); + virtual HBufC* AsXmlUnicodeL(); + + //derived from SIF + virtual TInt OnEvent(const TInt aEvent, + TAny* /* aArgument */); + virtual TAny* ExtendedInterface(); + + virtual TInt SetTransportPropertiesL(MSenTransport& /* aTransport */); + + + //----------------------Outbound direction + /** + * Function: temporary. Call in proper order session handlers during validation phase + * @return number of added descriptions into coreManager or error + * @since S60 4.0 + */ + TInt ProcessOutboundValidationL( MSenServiceDescription& aPattern, + MSenRemoteServiceSession* aRemoteServiceSession, + HBufC8*& aErrorMessage ); + /** + * Function: temporary. Call in proper order message handlers during outbound message phase + * @return symbian error + * @since S60 4.0 + */ + TInt ProcessOutboundMessageL( CWSStarMessageContext*& aMsgCtx, + const TDesC8* aBody, + CSenSoapMessage*& aReadyMsg ); + + //----------------------Inbound direction + /** + * Function: temporary. Call in proper order message handlers during inbound message phase + * @return symbian error + * @since S60 4.0 + */ + TInt ProcessInboundMessageL( CWSStarMessageContext*& aMsgCtx, + CSenSoapMessage*& aMsg ); + + /** + * Function: temporary. Call in proper order session handlers during inbound dispatch phase + * @return symbian error + * @since S60 4.0 + */ + TInt ProcessInboundDispatchL( MSenRemoteServiceSession* aRemoteServiceSession, + CSenSoapMessage*& aMsg ); + + //----------------------temporary methods + // (till moment when engine with handlers will be available) + + MSenHandler* Handler(const TDesC8& aCue); + TInt DeviceId(TPtrC8& aValue); + MSenHandler* PolicyHandler(); + TInt PolicyConsumerAddedL(CSenServiceSession* aNewSession, MSenRemoteServiceConsumer& aRemoteConsumer); + + public: // destructor + virtual ~CWSStarPlugin(); + + protected: + /** + * Function: CSenWsiPlugin + * + * Discussion: Perform the first phase of two phase construction + */ + CWSStarPlugin(MSenCoreServiceManager& aManager); + + /** + * Function: ConstructL + * + * Discussion: Perform the second phase construction of a + * CImplementationClassPlus object. + */ + void ConstructL(); + + private: + void AddHandlerTag(TPtr8& aXml, const TDesC8& aHandlerClassName); + void AddHandlerL(const TDesC8& aHandlerClassName, const TDesC8& aVersion, SenHandler::THandlerType aType); + void RemoveHandler(const TDesC8& aCue); + void GenerateDeviceIdL(); + TInt IssuePolicyDownloadL( CSenWSDescription* aSession ); + void VerifyPermissionOnEachSessionL(); + + private: // data + MSenCoreServiceManager& iManager; + //mesg handlers has to be separate to session handlers (separate table) becouse common handlerBase + // doesnt have name method + RPointerArray iMsgHandlers; + RPointerArray iSessionHandlers; + RSenPointerMap iVersions; + RPointerArray iHandlerContexts; + HBufC8* iDeviceId; + TBool iDbReadDone; + TInt iConsumerCount; + }; + + +#endif // WSSTAR_PLUGIN_H +