PECengine/StorageManager2/ServerSrc/CPEngStorageServer.h
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/StorageManager2/ServerSrc/CPEngStorageServer.h	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,438 @@
+/*
+* 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:  See class description below.
+*
+*/
+
+
+#ifndef __CPENGSTORAGESERVER_H__
+#define __CPENGSTORAGESERVER_H__
+
+//  INCLUDES
+#include <e32def.h>
+#include <s32std.h>
+#include <e32svr.h>
+#include <s32file.h>	// file server
+
+#include "MPEngStorageServer.h"
+#include "PEngPresenceEngineConsts2.h"
+
+
+// FORWARD DECLARATION
+class CPEngStorageFolder;
+class TPEngServerParams;
+class CPEngSAPChangeObserver;
+class CPEngSessionSlotId;
+class CPEngSessionSlotState;
+class CPEngSessionSlotEvent;
+class CPEngHandlerListenEvents;
+class CPEngTimer;
+
+/**
+ *  Main Server class of the presence server
+ *  @since 3.0
+ */
+class   CPEngStorageServer
+            : public CPolicyServer,
+            public MPEngStorageServer
+            //, public MBackupOperationObserver
+    {
+    public:		// Constructors and destructors
+
+        /**
+         * Two-phased constructor.
+         */
+        static CPEngStorageServer* NewL( TInt aPriority );	// Static constructor
+
+        /**
+         * Two-phased constructor.
+         */
+        static CPEngStorageServer* NewLC( TInt aPriority );	// Static constructor
+
+        /**
+         * Destructor.
+         */
+        virtual ~CPEngStorageServer();				// Destructor (virtual)
+
+    protected:	// Constructors and destructors
+
+        /**
+         * C++ default constructor.
+         */
+        CPEngStorageServer( TInt aPriority );
+
+        /**
+         * Symbian 2nd phase constructor
+         */
+        void ConstructL();		// Second phase construct
+
+    public:		// New methods
+
+        /*
+         * Starts the server, called from clients Connect() method or from WinsMain()
+         */
+        static TInt ExecuteServerL( TPEngServerParams& aParams );
+
+        /*
+         *	Stops the server, actually just calls CActiveScheduler::Stop();
+         */
+        void StopServer();
+
+        /*
+         *	Run server
+         */
+        static void RunServerL( TPEngServerParams& aParams );
+
+    public: // new functions from MPEngStorageServer
+
+        /**
+         *  Add subsession to the container
+         *  @see <MPEngStorageServer.h>
+         */
+        void AddSubSessionL( CObject& aSubSession );
+
+        /**
+         *  Remove subsession from the container
+         *  @see <MPEngStorageServer.h>
+         */
+        void RemoveSubSessionL( CObject& aSubSession );
+
+
+        /**
+         *	Start Listening of the Global events
+         *	@see <MPEngStorageServer.h>
+         */
+        void RegisterGlobEventListenerL( const RPEngMessage& aMessage,
+                                         TUint32 aSessionId );
+
+        /**
+         *	Cancel specified asynchronous request of the client
+         *	@see <MPEngStorageServer.h>
+         */
+        void CancelRequestL( const RPEngMessage& aMessage,
+                             TUint32 aSessionId );
+
+        /**
+         *  Cancel all session's asynchronous request
+         *	@see <MPEngStorageServer.h>
+         */
+        void CancelAllSessionRequests( TUint32 aSessionId );
+
+        /**
+         *	Reload Asynchronous scout of the async observer
+         *	@see <MPEngStorageServer.h>
+         */
+        void ReloadAsynchronousScoutL( const RPEngMessage& aMessage,
+                                       TUint32 aSessionId );
+
+        /**
+         *	Create Session slot Folder
+         *	@see <MPEngStorageServer.h>
+         */
+        void CreateSessionFolderL( const RPEngMessage& aMessage );
+
+        /**
+         *	Remove Session slot Folder
+         *	@see <MPEngStorageServer.h>
+         */
+        void RemoveSessionFolderL( const RPEngMessage& aMessage );
+
+        /**
+         *	Get session slot state
+         *	@see <MPEngStorageServer.h>
+         */
+        void SessionStateL( const RPEngMessage& aMessage );
+
+        /**
+         *	Get All Session slots states
+         *	@see <MPEngStorageServer.h>
+         */
+        void AllSessionStatesL( const RPEngMessage& aMessage );
+
+        /**
+         *	Get Storage Folder Instance and return its pointer
+         *	@see <MPEngStorageServer.h>
+         */
+        CPEngStorageFolder* StorageFolderL(
+            const RPEngMessage& aMessage );
+
+        /**
+         *	Notify new global Session Slot event
+         *	@see <MPEngStorageServer.h>
+         */
+        void NotifyGlobalEvent( const TDesC8& aGlobalEvent );
+
+        /**
+         *  Notify Error to the listeners of new events
+         *	@see <MPEngStorageServer.h>
+         */
+        void NotifyError( TInt aError );
+
+        /**
+         *	Check if passed Application Id is registered for
+         *	defined session slot
+         *	@see <MPEngStorageServer.h>
+         */
+        void IsAppIdRegisteredL( const RPEngMessage& aMessage );
+
+        /**
+         *	Is back up operation active
+         *	@see <MPEngStorageServer.h>
+         */
+        TBool BackUpActive();
+
+
+        /**
+         *  Wipe Session Slot folder
+         *	@see <MPEngStorageServer.h>
+         */
+        void WipeSessionSlotFolderL( const RPEngMessage& aMessage );
+
+
+
+    public: // Reference counted access related functions
+
+        /**
+         *	Session has been created
+         *	More in the file <MPEngStorageServer.h>
+         *
+         *	@since 3.0
+         */
+        void SessionCreated();
+
+        /**
+         *	Session is dying, check if server is needed
+         *	More in the file <MPEngStorageServer.h>
+         *
+         *	@since 3.0
+         */
+        void SessionDied();
+
+        /**
+         *  Timer expired, kill server if not needed anymore
+         *
+         *	@since 3.0
+         */
+        void TimeExpired();
+
+
+    public:		// Methods derived from CServer2
+
+        /*
+         *	Called when new client is connecting, version number of the client is checked here.
+         */
+        CSession2* NewSessionL( const TVersion& aVersion, const RMessage2& aMessage ) const;
+
+
+
+    private:	// New methods
+
+        /*
+         *	Calls CActiveScheduler::Start()
+         */
+        void StartServer();
+
+        /**
+         *	Read Session ID from the client's message
+         *
+         *  @since 3.0
+         *  @param aMessage client's message
+         *  @return session slot ID class, ownership transferred
+         */
+        CPEngSessionSlotId* TranslateSessionIdLC( const RPEngMessage& aMessage );
+
+        /**
+         *	Try to find session Folder if it is active
+         *
+         *  @since 3.0
+         *  @param aSessionId session Id to find folder for
+         *  @return session Id class if folder is loaded, NULL if not
+         */
+        CPEngStorageFolder* FindStorageFolder(
+            const CPEngSessionSlotId& aSessionId );
+
+        /**
+         *	Load storage folder,
+         *	there is open handle to the returner pointer
+         *
+         *	@since 3.0
+         */
+        CPEngStorageFolder* LoadStorageFolderL(
+            const CPEngSessionSlotId& aSessionId );
+
+        /**
+         *	Load session slot state
+         *
+         *  @since 3.0
+         *  @param aSessId session slot Id
+         *	@param aCreate flag if session shall be created if needed
+         *	@param aSessState returned session slot state
+         *	@param aStorageFolder returned storage folder, if loaded
+         *	@param aStateFileName returned file name of session state
+         *  @return number of items on clean up stack added by function
+         */
+        inline TInt LoadSessionStateLCX(
+            CPEngSessionSlotId& aSessId,
+            TBool aCreate,
+            CPEngSessionSlotState*& aSessState,
+            CPEngStorageFolder*& aStorageFolder,
+            HBufC*& aStateFileName );
+        /**
+         *	Read State file from permanent store if it does exists
+         *
+         *  @since 3.0
+         *  @param aSessionId session Identification
+         *  @param aFileName file name of the state file
+         *  @return state of the session folder
+         */
+        CPEngSessionSlotState* ReadSessionStatePermanentLC(
+            const CPEngSessionSlotId& aSessionId,
+            HBufC*& aFileName );
+
+        /**
+         *	Modify State file name to folder name
+         *
+         *  @since 3.0
+         *  @param aFileName which will be altered to folder name
+         */
+        inline void UpdateFileToFolderName( TDes& aFileName );
+
+        /**
+         *	Create session directory in the file system
+         *
+         *  @since 3.0
+         *  @param aFileName file name of the session slot state file
+         */
+        inline void CreateSessionDirectoryL( TDes& aFileName );
+
+        /**
+         *	Store data to the file
+         *
+         *  @since 3.0
+         *  @param aFileName file name of the target file
+         *	@param aData date to be stored into the file
+         *	@return KErrNone if it went OK or system wide error code
+         */
+        inline TInt StoreFile( const TDesC& aFileName, const TDesC8& aData );
+
+        /**
+         *	Read data from the file
+         *
+         *  @since 3.0
+         *  @param aFileName file name of the target file
+         *	@return buffer with the data of the file
+         */
+        inline void ReadFileL( const TDesC& aFileName,
+                               RBuf8& aBuff );
+
+        /**
+         *	Clean storage from session
+         *
+         *  @since 3.0
+         *  @param file name of the session file
+         *	@return KErrNone if cleaning goes fine
+         */
+        inline TInt CleanStorageFromSessionL( TDes& aFileName );
+
+        /**
+         *	Create Buffer with global event
+         *
+         *  @since 3.0
+         *  @param aState session state
+         *	@param aEvent event notification
+         *  @return new session slot event
+         */
+        inline CPEngSessionSlotEvent* PackGlobEventLC(
+            CPEngSessionSlotState& aState,
+            TPEngNWSessionSlotEvent aEvent,
+            const TDesC& aAppId );
+
+        /**
+         *	Update Session Slot state
+         *
+         *  @since 3.0
+         *  @param aFolder folder of the session, can be NULL
+         *	@param aState state of the session slot
+         *	@param aEvent new session slot event
+         *	@param aFileName file name of the state of the session
+         *
+         */
+        inline void UpdateSessionSltStateL(
+            CPEngStorageFolder* aFolder,
+            CPEngSessionSlotState& aState,
+            CPEngSessionSlotEvent& aEvent,
+            TDes& aFileName );
+
+
+    private:	// New notification engine functions
+
+        /**
+         *	Find Request Handler
+         *
+         *	@since 3.0
+         *	@param aSessionID Session ID
+         *	@param aFunction request function
+         *	@return pointer to Request Handler it it exists or NULL
+         */
+        inline CPEngHandlerListenEvents* FindRequestHandler( TUint32 aSessionId,
+                                                             TPEngStorageServerMessages aFunction );
+
+    private:	// Data
+
+        /// OWN: Container collection
+        ///      All containers created by this collection are also
+        ///      owned by this colletion
+        CObjectConIx*						    iContainerIx;
+
+        /// OWN: Container of Sub sesssions
+        ///      Owned over iContainerIx
+        CObjectCon*								iSubSessionCnt;
+
+        /// OWN: Container of the Storage Cages
+        ///      Owned over iContainerIx
+        CObjectCon*								iFoldersCnt;
+
+        /// OWN: Container with the Observers,
+        ///      Owned over iContainerIx
+        CObjectCon*								iObserversCnt;
+
+
+        /// OWN: Flag if server is running
+        TBool									iRunning;
+
+
+        /// OWN: File server client on the Storage Server
+        RFs										iFs;
+
+        /// OWN: Session count
+        TInt									iSessCount;
+
+        /// OWN: Back up operation active
+        TBool									iBackUpActive;
+
+        /// OWN: Temp folder Name
+        HBufC*									iTempFolder;
+
+        /// OWN: Server shut down timer
+        CPEngTimer*								iTimeOut;
+
+        /// OWN: Communication buffer to minimize allocations
+        RBuf16									iBuff16;
+
+        /// OWN: Communication buffer to minimize allocations
+        RBuf8									iBuff8;
+    };
+
+#endif      //  __CPENGSTORAGESERVER_H__
+