--- /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