ncdengine/provider/protocol/inc/ncdsessionhandler.h
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/protocol/inc/ncdsessionhandler.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 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:   MNcdSessionHandler interface
+*
+*/
+
+
+#ifndef C_NCDSESSIONHANDLER_H
+#define C_NCDSESSIONHANDLER_H
+
+#include <e32base.h>
+
+/**
+ * Session handler interface
+ */
+class MNcdSessionHandler
+    {
+public:
+    /**
+     * Creates a session for the given server and namespace. If there is an
+     * existing session for the server and namespace, it is overwritten.
+     * 
+     * @param aServerURI Server URI. Case insensitive!
+     * @param aNamespace Name space of the session.
+     * @param aSessionId Session id from server.
+     */
+    virtual void CreateSessionL( const TDesC& aServerUri,
+        const TDesC& aNameSpace,
+        const TDesC& aSessionId ) = 0;
+    
+    /**
+     * Removes a session for a given server.
+     *
+     * @param aServerURI Server URI. Case insensitive!
+     * @param aNamespace Name space of the session.
+     */
+    virtual void RemoveSession( const TDesC& aServerUri,
+        const TDesC& aNameSpace ) = 0;
+    
+    /**
+     * Removes all sessions.
+     */
+    virtual void RemoveAllSessions() = 0;
+    
+    /**
+     * Returns the session ID for the server URI
+     *
+     * @param aServerUri Server URI
+     * @param aNamespace Name space of the session.
+     * @return Session ID
+     */
+    virtual const TDesC& Session( const TDesC& aServerUri,
+        const TDesC& aNameSpace ) = 0;
+    
+    /**
+     * Checks whether a session exists for a given server.
+     *
+     * @param aServerURI Server URI. Case insensitive!
+     * @param aNamespace Name space of the session.
+     * @return TBool ETrue if a session exists, EFalse otherwise.
+     */
+    virtual TBool DoesSessionExist( const TDesC& aServerUri,
+        const TDesC& aNameSpace ) = 0;
+    
+protected:
+
+    virtual ~MNcdSessionHandler()
+        {
+        }
+    };
+
+
+class CNcdKeyValuePair;
+
+/**
+ * Server session handling interface.
+ * This is used by the protocol parser.
+ */
+class CNcdSessionHandler : public CBase,
+    public MNcdSessionHandler
+    {
+public:
+
+    /**
+     * Creates a new session handler
+     * 
+     * @return A new session handler
+     */
+    static CNcdSessionHandler* NewL();
+
+
+    /**
+     * Destructor
+     */
+    ~CNcdSessionHandler();
+    
+public:
+
+    /**
+     * @see MNcdSessionHandler::CreateSessions()
+     */
+    void CreateSessionL( const TDesC& aServerUri, const TDesC& aNameSpace,
+         const TDesC& aSessionId );
+    
+    /**
+     * @see MNcdSessionHandler::RemoveSession()
+     */
+    void RemoveSession( const TDesC& aServerUri,
+        const TDesC& aNameSpace  );
+    
+    /**
+     * @see MNcdSessionHandler::RemoveAllSessions()
+     */
+    virtual void RemoveAllSessions();
+    
+    /**
+     * @see MNcdSessionHandler::Session()
+     */
+    const TDesC& Session( const TDesC& aServerUri,
+        const TDesC& aNameSpace );
+    
+    /**
+     * @see MNcdSessionHandler::DoesSessionExist()
+     */
+    TBool DoesSessionExist( const TDesC& aServerUri,
+        const TDesC& aNameSpace );
+
+private:
+
+    // Search for the session
+    TInt FindSession( const TDesC& aServerUri,
+        const TDesC& aNameSpace );
+        
+private:
+    class CNcdServerSession : public CBase
+        {
+        
+    public: // Constructor & destructor
+        
+        /**
+         * Creates a new server session
+         * 
+         * @param aServerURI Server URI. Case insensitive!
+         * @param aNamespace Name space of the session.
+         * @param aSessionId Session id from server.
+         * @return A new server session object.
+         */
+        static CNcdServerSession* NewL( const TDesC& aServerUri,
+            const TDesC& aNameSpace,
+            const TDesC& aSessionId );
+        
+        /**
+         * Creates a new server session and leaves it on the cleanup stack.
+         * 
+         * @param aServerURI Server URI. Case insensitive!
+         * @param aNamespace Name space of the session.
+         * @param aSessionId Session id from server.
+         * @return A new server session object.
+         */
+        static CNcdServerSession* NewLC( const TDesC& aServerUri,
+            const TDesC& aNameSpace,
+            const TDesC& aSessionId );
+
+        /**
+         * Destructor
+         */
+        ~CNcdServerSession();
+        
+    public: // New functions
+    
+        const TDesC& ServerUri();
+        const TDesC& NameSpace();
+        const TDesC& SessionId();
+        
+    private: // Constructors
+    
+        CNcdServerSession();
+        
+        void ConstructL( const TDesC& aServerUri,
+            const TDesC& aNameSpace,
+            const TDesC& aSessionId );
+        
+    private: // Member data
+    
+        HBufC* iServerUri;
+        HBufC* iNameSpace;
+        HBufC* iSessionId;
+        
+        };
+    
+private:
+    
+    // Session array
+    RPointerArray<CNcdServerSession> iSessions;
+    };
+
+#endif // C_NCDSESSIONHANDLER_H