diff -r 6ca72c0fe49a -r a941bc465d9f PECengine/StorageManager2/ServerSrc/CPEngStorageServer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/StorageManager2/ServerSrc/CPEngStorageServer.h Wed Sep 01 12:31:13 2010 +0100 @@ -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 +#include +#include +#include // 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 + */ + void AddSubSessionL( CObject& aSubSession ); + + /** + * Remove subsession from the container + * @see + */ + void RemoveSubSessionL( CObject& aSubSession ); + + + /** + * Start Listening of the Global events + * @see + */ + void RegisterGlobEventListenerL( const RPEngMessage& aMessage, + TUint32 aSessionId ); + + /** + * Cancel specified asynchronous request of the client + * @see + */ + void CancelRequestL( const RPEngMessage& aMessage, + TUint32 aSessionId ); + + /** + * Cancel all session's asynchronous request + * @see + */ + void CancelAllSessionRequests( TUint32 aSessionId ); + + /** + * Reload Asynchronous scout of the async observer + * @see + */ + void ReloadAsynchronousScoutL( const RPEngMessage& aMessage, + TUint32 aSessionId ); + + /** + * Create Session slot Folder + * @see + */ + void CreateSessionFolderL( const RPEngMessage& aMessage ); + + /** + * Remove Session slot Folder + * @see + */ + void RemoveSessionFolderL( const RPEngMessage& aMessage ); + + /** + * Get session slot state + * @see + */ + void SessionStateL( const RPEngMessage& aMessage ); + + /** + * Get All Session slots states + * @see + */ + void AllSessionStatesL( const RPEngMessage& aMessage ); + + /** + * Get Storage Folder Instance and return its pointer + * @see + */ + CPEngStorageFolder* StorageFolderL( + const RPEngMessage& aMessage ); + + /** + * Notify new global Session Slot event + * @see + */ + void NotifyGlobalEvent( const TDesC8& aGlobalEvent ); + + /** + * Notify Error to the listeners of new events + * @see + */ + void NotifyError( TInt aError ); + + /** + * Check if passed Application Id is registered for + * defined session slot + * @see + */ + void IsAppIdRegisteredL( const RPEngMessage& aMessage ); + + /** + * Is back up operation active + * @see + */ + TBool BackUpActive(); + + + /** + * Wipe Session Slot folder + * @see + */ + void WipeSessionSlotFolderL( const RPEngMessage& aMessage ); + + + + public: // Reference counted access related functions + + /** + * Session has been created + * More in the file + * + * @since 3.0 + */ + void SessionCreated(); + + /** + * Session is dying, check if server is needed + * More in the file + * + * @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__ +