webservices/wscore/inc/senxmldao.h
changeset 0 62f9d29f7211
child 12 20aafbbfb68e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wscore/inc/senxmldao.h	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,359 @@
+/*
+* Copyright (c) 2002-2005 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 SEN_XML_DAO_H
+#define SEN_XML_DAO_H
+
+//  INCLUDES
+#include <flogger.h>
+#include <e32std.h>
+
+#include <SenXmlReader.h>
+#include <SenBaseFragment.h>
+#include "senwsdescription.h"
+#include <MSenServiceDescription.h>
+#include "senpointermap.h"
+
+#include "msendao.h"
+
+// CONSTANTS
+const TInt KStateParsingFramework = 4;          // even ones ignore(0), odd ones save(1)
+const TInt KStateParsingServiceDescription = 6;
+const TInt KStateParsingTransport = 8;
+
+// DATA TYPES
+enum TFileOperationState
+    {
+    ESenIdle = 0,
+    ESenReading,
+    ESenSaveNeeded,
+    ESenSaving
+    };
+
+// FORWARD DECLARATIONS
+class RWriteStream;
+class RReadStream;
+class RSenServiceManager;
+class MSenCoreServiceManager;
+class CSIF;
+class CSenSecurityMechanism;
+class CSenProvider;
+class CSenHostletLookupInfo;
+
+// TYPEDEF
+typedef RSenPointerMap<TDesC8, HBufC8> RTransportMap;
+typedef RPointerArray<CSenProvider> RProviderArray;
+typedef RSenPointerMap<CSenHostletLookupInfo, CSenProvider> RProviderMap;
+
+// CLASS DECLARATION
+class CSenXMLDAO :  public CSenBaseFragment,
+                    public MSenDAO
+    {
+    public: // Constructors and destructor
+        static CSenXMLDAO* NewL(MSenCoreServiceManager& aManager);
+        static CSenXMLDAO* NewLC(MSenCoreServiceManager& aManager);
+    
+        virtual ~CSenXMLDAO();
+
+        // New functions
+        
+        virtual MSIF* Framework(const TDesC8& aFramework);
+        virtual TInt Add(CSenWSDescription& aDescription);
+        virtual TInt Add(CSIF& aFramework);
+        virtual TBool Remove(CSenWSDescription& aDescription);
+        virtual void Remove(CSIF& aFramework);
+
+        /**
+        * The ownership of the returned ServiceDescription is NOT transferred  
+        */
+        virtual CSenWSDescription* FindMatchingServiceDescriptionL( CSenWSDescription& aSd ); // codescannerwarnings
+
+        virtual CSenWSDescription* FindMatchingSDAndBestScoreL(
+                                            CSenWSDescription& aSd,
+                                            TInt &aBestScore);	//CodeScannerWarnings
+
+        virtual CSenWSDescription* FindScoreMatchingServiceDescriptionL(
+                                            CSenWSDescription& aSd,
+                                            TInt aBestScore);	//CodeScannerWarnings
+
+        virtual CSenWSDescription* FindExactServiceDescriptionL( CSenWSDescription& aSd );	//CodeScannerWarnings
+
+        virtual TInt AddServiceDescriptionToFrameworksL( CSenWSDescription& aPattern,
+                                                         MSenRemoteServiceConsumer& aRemoteConsumer,
+                                                         
+                                                         HBufC8*& aErrorMsg );
+
+        virtual TInt NotifyFrameworksL(const TDesC8& aFrameworkID,
+                                       const TInt aEvent,
+                                       TAny* aArgument);
+
+        virtual TInt FindAllMatchingServiceDescriptions(RWSDescriptionArray& aMatches,
+                                                        const TDesC8& aContract);
+
+        virtual TInt FindAllMatchingServiceDescriptions(RWSDescriptionArray& aMatches,
+                                                        MSenServiceDescription& aPattern);
+
+        virtual TInt ContainsServiceDescriptionL(TBool& aContains,
+                                                 CSenWSDescription& aPattern);
+
+        virtual TInt SaveL(const CSenServiceSession& aServiceSession);
+        virtual TInt SaveL(const CSIF& aServiceInvocationFramework);
+        virtual CSenXmlReader* XMLReader();
+        void Load();
+        TInt ProxyPort();
+        const TDesC8& ProxyHost();
+        CDesC8Array& SupportedFrameworksL();
+
+        MSIF* CSenXMLDAO::DefaultFrameworkL(const TDesC8& aFrameworkID, 
+                                            const TDesC8& aCue);
+
+        TBool Owns(CSenWSDescription* aSD);
+
+        TPtrC8 TransportPluginCueBySchemeL(const TPtrC8& aScheme);
+
+        virtual MSenProvider& LookupHostletForL(const TDesC8& aHostletEndpoint,
+                                                 const TDesC& aReqThreadId,
+                                                 const TDesC8& aReqConsumerId);
+
+        virtual TInt ReleaseHostletL(const MSenProvider* aHostlet,
+                                      const TDesC& aReqThreadId,
+                                      const TDesC8& aReqConsumerId);
+
+
+		/** Improved heuristics from Session DB removal / cleanups 
+		*
+		* It finds all matching ServiceDescription elements using the service description 
+		* passed argument and add the touch attribute to all matched ServiceDescription
+		* elements with current tick count value.
+		* If touch attribute already there it will be replaced with new current 
+		* tick count value.
+		*
+		* @param asd   is the new established session service description.
+		* Leave codes: Symbian system-wide error codes.  
+		*/
+		void UpdateTouchSessionDBL(MSenServiceDescription& asd);
+    protected:
+    
+        // New functions
+        
+        void StartElementL(const TDesC8& aURI,
+                           const TDesC8& aLocalName,
+                           const TDesC8& aName,
+                           const RAttributeArray& aAttributes);
+
+        void EndElementL(const TDesC8& aURI,
+                         const TDesC8& aLocalName,
+                         const TDesC8& aName);
+
+    private:
+    
+        /**
+        * C++ default constructor.
+        */
+        CSenXMLDAO(MSenCoreServiceManager& aManager);
+    
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        // New functions
+        TInt Save();
+        void WriteL();
+        void ReadL();
+        RFileLogger* Log() const;
+
+        TInt SizeOfSessionsXmlInBytesL();
+        TInt SizeOfFrameworksXmlInBytesL();
+
+        TInt CheckDefaultFrameworks();
+        TInt CheckDefaultTransports();
+        /** Improved heuristics from Session DB removal / cleanups
+	    *
+	    * Checks touch attribute value for all ServiceDescription elements.
+	    * If that exceeds the tick counts value for two weeks (Max tick count)
+	    *  or If it is greater than current tick count, it removes the corresponding 
+	    * ServiceDescription element from the SenConfiguration element child list.  
+	    * 
+	    * 1 millisec = 1 tick
+		* 86400 sec = 1 day
+		* 86400*1000 millisec = 1 day
+		* 86400*14*1000 = 1209600000 millisec = 2 weeks
+		* So if attr val >= 1209600000 or > current tick count.
+		* Note: always attr val should be <= current tick count.
+		*
+	    * eg;
+	    * Before call to CleanupUnusedSessionDBL()
+	    * <SenConfiguration xmlns="urn:com.nokia.Sen.config.1.0">
+	    * ........
+	    * ........
+  		* <ServiceDescription framework="ID-WSF" touch="2000000000">
+  		* ........
+  		*.........
+  		* </ServiceDescription>
+		* <ServiceDescription framework="ID-WSF" touch="20000">
+		* ..........
+		* .......
+  		* </ServiceDescription>
+  		* <ServiceDescription framework="ID-WSF">
+		* ..........
+		* .......
+  		* </ServiceDescription>
+  		* </SenConfiguration>
+		* 
+		* After call to CleanupUnusedSessionDBL()
+	    * <SenConfiguration xmlns="urn:com.nokia.Sen.config.1.0">
+	    * ........
+	    * ........
+  		* <ServiceDescription framework="ID-WSF" touch="20000">
+		* ..........
+		* .......
+  		* </ServiceDescription>
+  		* <ServiceDescription framework="ID-WSF">
+		* ..........
+		* .......
+  		* </ServiceDescription>
+  		* </SenConfiguration>
+  		* 
+		* Leave codes: Symbian system-wide error codes.
+	    */
+        void CleanupUnusedSessionDBL();
+
+    private: // Data
+        MSenCoreServiceManager& iManager;
+        TFileOperationState iReadingConfig;
+        TInt iErrorState;
+        TFileName iFileName;
+        RPointerArray<CSenWSDescription> iSessions;
+        RPointerArray<CSIF> iFrameworks;
+        CSenWSDescription* iServiceDescription;
+        CSenBaseFragment* iFrameworkConfigParser;
+        TBool iDefaultFrameworkCheckedToExist;
+        HBufC8* iProxyHost;     // owned
+        TInt    iProxyPort;
+        RTransportMap iTransportMap;
+        TBool iDefaultTransportMapChecked;
+        RProviderArray iSharableProviders;
+        RProviderMap iUnsharableProviders;
+        CSenDomFragment* ipTransportDelegate;
+    };
+
+
+/** 
+* THostletRequester class is used to identify the identity
+* requesting service (looking up) certain hostlet (a local
+* service provider provider).
+* Class instance constructs from full thread name (unique id #1)
+* and unique consumer id; typically some UNR (unique id # 2).
+* Equals operator is overloaded providing quick matching 
+* mechanism for hostlet-requester -type searches performed within
+* a pointer map.
+*/
+class CSenHostletLookupInfo : public CBase
+    {
+    public:
+        /** 
+        * @param aThreadIdAsFullName is unique identifier for some
+        *        thread, which is requesting service from certain
+        *        hostlet (local service provider).
+        * @param aConsumerIdUrn is unique identifier for some
+        *        service consumer, which is requesting certain
+        *        hostlet (local service provider).
+        */
+        static CSenHostletLookupInfo* NewL(const TDesC& aThreadIdFullName,
+                                          const TDesC8& aConsumerIdUrn);
+        /** 
+        * @param aThreadIdAsFullName is unique identifier for some
+        *        thread, which is requesting service from certain
+        *        hostlet (local service provider).
+        * @param aConsumerIdUrn is unique identifier for some
+        *        service consumer, which is requesting certain
+        *        hostlet (local service provider).
+        */
+        static CSenHostletLookupInfo* NewLC(const TDesC& aThreadIdFullName,
+                                           const TDesC8& aConsumerIdUrn);
+
+
+        /** 
+        * C++ destructor
+        */
+        ~CSenHostletLookupInfo();
+
+        /** 
+        * Getter for thread id (full thread name) of the first requester/invoker
+        */
+        TPtrC ThreadId() const;
+
+        /** 
+        * Getter for consumer id (typically some URN) of the first requester/invoker
+        */
+        TPtrC8 ConsumerId() const;
+
+        /** 
+        * Getter for current lookup count (active requesters)
+        */
+        TInt LookupCount() const;
+
+        /** 
+        * Increase method for lookup count (called once per lookup)
+        */
+        void IncrementLookupCount();
+
+        /** 
+        * Decrease method for lookup count (called once per release)
+        */
+        void DecrementLookupCount();
+        
+        /** 
+        * Implement equals operation, so that pointer map can be used.
+        */
+        TBool operator==(const CSenHostletLookupInfo& aHostletRequestor);
+
+    private:
+
+        /** 
+        * C++ constructor
+        */
+        CSenHostletLookupInfo();
+        
+        /** 
+        * @param aThreadIdAsFullName is unique identifier for some
+        *        thread, which is requesting service from certain
+        *        hostlet (local service provider).
+        * @param aConsumerIdUrn is unique identifier for some
+        *        service consumer, which is requesting certain
+        *        hostlet (local service provider).
+        */
+        void ConstructL(const TDesC& aThreadIdFullName,
+                        const TDesC8& aConsumerIdUrn);
+
+    private:
+        HBufC* ipFullThreadName;     // owned
+        HBufC8* ipUniqueConsumerId;  // owned
+        TInt* ipLookupCount;           // count of currently active requesters
+    };
+
+#endif // SEN_XML_DAO_H
+
+// End of File