webservices/wsstar/wsstarplugin/inc/wsstarplugin.h
changeset 0 62f9d29f7211
--- /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 <e32std.h>
+#include <flogger.h>
+
+#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<TDesC8, TDesC8> 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<CSenMessageHandler> iMsgHandlers;
+        RPointerArray<CSenSessionHandler> iSessionHandlers;
+        RSenPointerMap<TDesC8, TDesC8> iVersions;
+        RPointerArray<CWSStarHandlerContext> iHandlerContexts;
+        HBufC8* iDeviceId;
+        TBool iDbReadDone;
+        TInt iConsumerCount;
+    };
+
+
+#endif // WSSTAR_PLUGIN_H
+