PECengine/PresenceServer2/ServerSrc/CPEngCSPSessManager.h
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/PresenceServer2/ServerSrc/CPEngCSPSessManager.h	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,507 @@
+/*
+* Copyright (c) 2002 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:  One Session manager of the presence server
+* 				 Handles all management concerning one network session
+*  				 Opening, closing, ownership handling, updating
+*  				 of Session related data to network
+*
+*/
+
+
+
+#ifndef __CPENGCSPSESSMANAGER_H__
+#define __CPENGCSPSESSMANAGER_H__
+
+//  INCLUDES
+#include	<e32base.h>
+
+#include	"MPEngRequestHandlerObserver.h"
+#include	"MPEngSessionStatusObserver.h"
+
+#include	"PEngPresenceEngineConsts2.h"
+#include	"RPEngStorageAdminSubClient.h"
+
+
+// FORWARD DECLARATIONS
+class	MPEngRequestHandler;
+class	CPEngIncomingDataHandler;
+class	MPEngServer;
+class	CPEngSessionSlotId;
+class	CPEngAppAccessContainer;
+class	MPEngSubSession;
+class	MPEngTransactionFactory;
+class   RPEngStorageAdminClient;
+class   MPEngAccessHandler;
+class   MPEngPureDataHandler;
+class   RPEngMessage;
+
+// CLASS DECLARATION
+/**
+ *  One Session manager of the presence server
+ *  Handles all management concerning one network session
+ *  Opening, closing, ownership handling, updating
+ *  of Session related data to network
+ *
+ *  @lib PEngServer2
+ *  @since 3.0
+ */
+NONSHARABLE_CLASS( CPEngCSPSessManager ):
+        public CBase,
+        public MPEngRequestHandlerObserver,
+        public MPEngSessionStatusObserver
+    {
+public:  // Constructors and destructor
+
+    /**
+     * Two-phased constructor.
+     */
+    static CPEngCSPSessManager* NewLC( MPEngServer& aServer,
+    const CPEngSessionSlotId& aSessId,
+    RPEngStorageAdminClient& aAdmin );
+
+    /**
+     * Destructor.
+     */
+    ~CPEngCSPSessManager();
+
+private: // new function of MPEngRequestHandlerObserver
+    /**
+     *  Remove calling request handler from array of pending requests
+     *
+     *  @see <MPEngRequestHandlerObserver.h>
+     *  @since 3.0
+     */
+    void CompleteRequestHandler(
+        MPEngRequestHandler* aRequestHandler );
+
+    /**
+     *  Set Session slot state to open
+     *
+     *  @see <MPEngRequestHandlerObserver.h>
+     *  @since 3.0
+     */
+    void SetCSPSessionOpenedL();
+
+private: // ne functions from MPEngSessionStatusObserver
+
+    /**
+     *	Handle Session status change
+     *
+     *  @since 3.0
+     *
+     *  @param new session slot state
+     *  @param session slot event
+     */
+    void StatusChangedL( TPEngNWSessionSlotState aNewState,
+                         TPEngNWSessionSlotEvent aNewEvent );
+
+public: // Slot management support
+
+    /**
+     *  Open method for clean up stack support
+     *
+     *  @since 3.0
+     */
+    void Open();
+
+    /**
+     *  Close method for clean up stack support
+     *
+     *  @since 3.0
+     */
+    void Close();
+
+    /**
+     *  Open method for sub-sessions
+     *	Reference to the Sub-session is stored
+     *	for future notifications
+     *
+     *  @since 3.0
+     *	@param aServSubSession server sub-session
+     */
+    void OpenL( MPEngSubSession& aServSubSession );
+
+    /**
+     *  Close method for the sub-session
+     *
+     *  @since 3.0
+     * 	@param aServSubSession server sub-session
+     */
+    void Close( MPEngSubSession* aServSubSession );
+
+    /**
+     *	Open reference to the session manager by the app Id
+     *
+     *  @since 3.0
+     *  @param aAppId application Id to open reference
+     */
+    void AttachAppIdL( const TDesC& aAppId );
+
+    /**
+     *	Close reference to the session manager by the app Id
+     *
+     *  @since 3.0
+     *  @param aAppId application Id to open reference
+     */
+    void DetachAppId( const TDesC& aAppId );
+
+    /**
+     *  Check if application Id is active
+     *
+     *  @since 3.0
+     *  @param aAppId application Id
+     */
+    void AppIdActiveL( const TDesC& aAppId );
+
+    /**
+     *	Reserve Session slot for Process Id
+     *
+     *  @since 3.0
+     *  @param aAppId application Id
+     *  @param aProcessId process Id to reserve
+     */
+    void ReserveProcessL( const TDesC& aAppId,
+                          const TDesC& aProcessId );
+
+    /**
+     *	Activate Process id
+     *  Function leaves if there is not such a combination of
+     *  process Id and application id registered
+     *
+     *  @since 3.0
+     *  @param aAppId application Id
+     *  @param aProcessId process Id to activate
+     */
+    void ActivateProcessL( const TDesC& aAppId,
+                           const TDesC& aProcessId );
+
+    /**
+     *  Session slot Id
+     *
+     *  @since 3.0
+     *  @return session slot Id
+     */
+    const CPEngSessionSlotId& SessionId() const;
+
+public: // Request handling
+
+    /**
+     *  Handle asynchronous request
+     *
+     *  @since 3.0
+     *  @param aMessage RPEngMessage of the request
+     *  @param aServSubSession server sub-session
+     *  @param aServSessionId server session Id
+     *  @param aServSubSessionId server sub-session Id of the request
+     */
+    void HandleAsynchronousRequestL(
+        const RPEngMessage& aMessage,
+        MPEngSubSession& aServSubSession,
+        TInt32 aServSessionId,
+        TInt   aServSubSessionId );
+
+    /**
+     *  Handle synchronous request
+     *
+     *  @since 3.0
+     *  @param aMessage RPEngMessage of the request
+     *  @param aServSessionId server session Id
+     *  @param aServSubSessionId server sub-session Id of the request
+     */
+    void HandleSynchronousRequestL(
+        const RPEngMessage& aMessage,
+        TInt32 aServSessionId,
+        TInt   aServSubSessionId );
+
+    /**
+     *	Handle Log In Request
+     *
+     *	@since 3.0
+     *  @param aMessage RPEngMessage of the request
+     *  @param aServSubSession server sub-session
+     *  @param aServSessionId server session Id
+     *  @param aServSubSessionId server sub-session Id of the request
+     */
+    void HandleLogInRequestL(	const RPEngMessage& aMessage,
+                              MPEngSubSession& aSubSession,
+                              TInt32 aServSessionId,
+                              TInt   aServSubSessionId );
+
+    /**
+     *	Handle Log Oout Request
+     *
+     *	@since 3.0
+     *  @param aMessage RPEngMessage of the request
+     *  @param aServSubSession server sub-session
+     *  @param aServSessionId server session Id
+     *  @param aServSubSessionId server sub-session Id of the request
+     */
+    void HandleForceLogOutRequestL( const RPEngMessage& aMessage,
+                                    MPEngSubSession& aSubSession,
+                                    TInt32 aServSessionId,
+                                    TInt   aServSubSessionId );
+
+    /**
+     *  Close reference to the session manager by the app Id
+     *	Asynchronous version
+     *
+     *  @since 3.0
+     *  @param aMessage RPEngMessage of the request
+     *  @param aServSubSession server sub-session
+     *  @param aServSessionId server session Id
+     *  @param aServSubSessionId server sub-session Id of the request
+     */
+    void HandleDetachAppIdL( const RPEngMessage& aMessage,
+                             MPEngSubSession& aSubSession,
+                             TInt32 aServSessionId,
+                             TInt   aServSubSessionId );
+
+    /**
+     *  Cancel particular asynchronous request
+     *	Cancel all asynchronous request from the Server Session
+     *  Cancel all asynchronous request from the Server Sub-session
+     *
+     *  @since 3.0
+     *  @param aMessage RPEngMessage of the request
+     *  @param aServSessionId server session Id
+     *  @param aServSubSessionId server sub-session Id of the request
+     */
+    void CancelAsynchronousRequest(
+        const RPEngMessage& aMessage,
+        TInt32 aServSessionId,
+        TInt   aServSubSessionId );
+
+    void CancelAllSessionRequests(
+        TInt32 aServSessionId );
+
+    void CancelAllSubSessionRquests(
+        TInt32 aServSessionId,
+        TInt   aServSubSessionId );
+
+private:	// Function for handling of resources
+
+    /**
+     *  Load resources for the online state of the session
+     *
+     *  @since 3.0
+     */
+    void LoadResourcesL();
+
+    /**
+     *  Unloads resources for the offline state of Session slot
+     *
+     *  @since 3.0
+     */
+    void UnloadResources();
+
+private:	// request management
+
+    /**
+     *  Check if request is allowed
+     *
+     *
+     *  @since 3.0
+     *  @param aRequestFunction request function
+     *  @param aServSessionId server session Id of the request
+     *	@param aServSubSessionId server sub-session Id of the request
+     */
+    void CheckRequestValidityL (
+        TInt aRequestFunction,
+        TInt32 aServSessionId,
+        TInt   aServSubSessionId );
+
+    /**
+     *  Find defined request in session manager
+     *
+     *  @since 3.0
+     *  @param aRequestFunction request function to find
+     *  @param aServSessionId session to look in
+     *  @param aServSubSessionId sub-session to look in
+     *  @return index or KerrNotFound
+     */
+    TInt FindRequest( TInt aRequestFunction );
+
+    TInt FindRequestInSession(
+        TInt aRequestFunction,
+        TInt32 aServSessionId );
+
+    TInt FindRequestInSubSession(
+        TInt aRequestFunction,
+        TInt32 aServSessionId,
+        TInt   aServSubSessionId );
+
+    /**
+     *	Handle Send new data Request
+     *
+     *	@since 3.0
+     *	@param aMessage RPEngMessage from Client
+     *	@param aServSubSession server sub-session
+     *	@param aServSessionId server session id
+     *	@param aServSubSessionId server sub-session Id
+     */
+    void HandleUpdateDataRequestL( const RPEngMessage& aMessage,
+                                   MPEngSubSession& aServSubSession,
+                                   TInt32 aServSessionId,
+                                   TInt   aServSubSessionId );
+
+    /**
+     *  Do Log In to the CSP session
+     *
+     *  @since 3.0
+     *	@param aMessage RPEngMessage from Client
+     *	@param aServSubSession server sub-session
+     *	@param aServSessionId server session id
+     *	@param aServSubSessionId server sub-session Id
+     */
+    void DoLogInL( const RPEngMessage& aMessage,
+                   MPEngSubSession& aServSubSession,
+                   TInt32 aServSessionId,
+                   TInt   aServSubSessionId );
+
+    /**
+     *  Do log out from the CSP session
+     *
+     *  @since 3.0
+     *	@param aMessage RPEngMessage from Client
+     *	@param aServSubSession server sub-session
+     *	@param aServSessionId server session id
+     *	@param aServSubSessionId server sub-session Id
+     */
+    void DoLogOutL( const RPEngMessage& aMessage,
+                    MPEngSubSession& aServSubSession,
+                    TInt32 aServSessionId,
+                    TInt   aServSubSessionId );
+
+private: // Helping functions
+
+    /**
+     *  Find Access counter
+     *
+     *  @since 3.0
+     *  @param aAppId application Id
+     *  @return pointer to access counter if found, NULL if not found
+     */
+    CPEngAppAccessContainer* AccessCounter( const TDesC& aAppId );
+
+    /**
+     *  Check reference counter and delete this object if needed
+     *  @since 3.0
+     */
+    void CheckReferenceAccessD();
+
+    /**
+     *  Unload Transaction factories
+     *  @since 3.0
+     */
+    void UnloadTransactionFactories();
+
+    /**
+     *  Reset access Containers
+     *  @since 3.0
+     */
+    void ResetAccessContainers();
+
+    /**
+     *  Inform sub-session about app Id disconnection
+     *  @since 3.0
+     *  @param aAppId disconnected app Id
+     */
+    void NotifyDisconnectedAppId( const TDesC& aAppId );
+
+    /**
+     *  Inform sub-sessions about CPS close state
+     *  @since 3.0
+     */
+    void NotifyCPSClose();
+
+    /**
+     *  Notify Storage Server about new event
+     *  @since 3.0
+     *  @param aEvent new event to notify
+     *  @param aAppId application id event is related
+     *  @param aAppIdState state of the application id
+     */
+    void NotifyNewEventL( TPEngNWSessionSlotEvent aEvent,
+                          const TDesC& aAppId,
+                          TPEngNWSessionSlotState aAppIdState );
+
+    /**
+     *  Leaves with error code if not connected.
+     */
+    void LeaveIfNotConnectedL() const;
+
+
+
+
+private:
+
+    /**
+     * C++ default constructor.
+     */
+    CPEngCSPSessManager( MPEngServer& aServer );
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL( const CPEngSessionSlotId& aSessId,
+                     RPEngStorageAdminClient& aAdmin );
+
+private:    // Data
+
+    /// OWN: Access Plain Access Count, used by cleanUp support
+    TInt											iAccessCount;
+
+    /// OWN: Session slot Id
+    CPEngSessionSlotId*								iSessionSlotId;
+
+    /// OWN: Session state
+    TPEngNWSessionSlotState							iState;
+
+    /// OWN: Container of Access Counters
+    CObjectCon*										iAccessCounters;
+
+    ///	REF: Server
+    MPEngServer&									iServer;
+
+    /// OWN: Server sub-sessions,
+    ///      Elements REFerenced
+    RPointerArray<MPEngSubSession>					iServSubSessions;
+
+    /// OWN: Storage Manager admin client
+    RPEngStorageAdminSubClient						iStoreAdmin;
+
+    /// OWN: Array of active request handlers
+    ///      Elements OWNed
+    RPointerArray<MPEngRequestHandler>				iRequestHandlers;
+
+    /// OWN: Transaction factories
+    RPointerArray<MPEngTransactionFactory>			iTransFactories;
+
+    /// OWN: Online Plugins loaded
+    TBool 											iPluginsLoaded;
+
+    /// OWN: Access handlers
+    MPEngAccessHandler*								iAccessHandler;
+
+    /// OWN: pure data handler
+    MPEngPureDataHandler*							iPureDataHandler;
+
+    /// OWN: list of Incoming Listen Data Handlers
+    ///      Elements OWNed
+    RPointerArray<CPEngIncomingDataHandler>			iIncomingHandlers;
+    };
+
+#endif      // __CPENGCSPSESSMANAGER_H__
+
+// End of File