featuremgmt/featuremgr/src/serverexe/featmgrserver.h
changeset 0 08ec8eefde2f
child 6 5ffdb8f2067f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/featuremgmt/featuremgr/src/serverexe/featmgrserver.h	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,313 @@
+/*
+* Copyright (c) 2007-2009 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:
+*
+*/
+
+
+
+
+#ifndef FEATMGRSERVER_H
+#define FEATMGRSERVER_H
+
+//  INCLUDES
+#include <e32svr.h>
+#include <featmgr/featurecmn.h>
+#include <babackup.h>
+#include "featmgrclientserver.h"
+#include <featmgr/featureinfoplugin.h>
+#include "featmgrtimer.h"
+#include "featmgrfeatureregistry.h"
+#include "burstate.h"
+
+// FORWARD DECLARATIONS
+class CFeatMgrPluginHandler;
+class CFeatMgrFeatureRegistry;
+
+enum TFeatureSupport
+    {
+    EFeatureSupportDisable = EFalse,
+    EFeatureSupportEnable = ETrue,
+    EFeatureSupportUntouch = 2
+    };
+
+// CLASS DECLARATIONS
+
+#ifdef EXTENDED_FEATURE_MANAGER_TEST
+/**
+ Auto shutdown class (standard pattern) for testing purposes 
+
+*/
+class CShutdown : public CTimer
+	{
+	enum TMemScanShutdown
+	    {
+	    EMemScanServShutdownDelay=0x200000
+	    };
+public:
+	inline CShutdown();
+	inline void ConstructL();
+	inline void Start();
+private:
+	void RunL();
+	};
+#endif // EXTENDED_FEATURE_MANAGER_TEST
+
+/**
+  Feature Manager server implementation 
+
+*/
+NONSHARABLE_CLASS(CFeatMgrServer) : 
+    public CPolicyServer,
+    public MFeatMgrTimerCallback,
+    public MFeatMgrRegistryObserver,
+    private MBackupOperationObserver, 
+    private MBackupObserver    
+    {
+    public:  // Constructors and destructor
+        
+        /**
+         Creates a new server. Newly created instance is left in the cleanup stack.
+         @param aPriority Priority of the server.
+         @return A pointer to the created object.
+        */
+        static CFeatMgrServer* NewLC( const TInt aPriority );
+
+        /**
+         Destructor.
+        */
+        virtual ~CFeatMgrServer();
+
+    public: // New functions      
+           
+        /**
+         Called by plugin handler to inform feature info to server.
+        */ 
+        void FeatureInfoL( RArray<FeatureInfoCommand::TFeature>& aFeatureList, 
+                           CFeatMgrPluginHandler* aPluginHandler );
+
+        /**
+         Called by plugin handler to inform feature info to server.
+        */ 
+        void FeatureInfoL( RFeatureArray& aFeatureList, CFeatMgrPluginHandler* aPluginHandler );
+
+        /**
+         Returns ETrue if all plugins are ready and 
+         Feature info received. 
+         Else returns EFalse.
+        
+         @return feature support status
+        */
+        TBool PluginsReady() const;
+
+#ifdef EXTENDED_FEATURE_MANAGER_TEST
+        /**
+         Called by session to indicate addition of session.
+        */ 
+        void AddSession();
+        
+        /**
+         Called by session to indicate end of session.
+        */ 
+        void DropSession();
+#endif // EXTENDED_FEATURE_MANAGER_TEST
+
+    public: // Functions from base classes
+        
+    	// From MFeatMgrTimerCallback    	
+    	virtual void TimerFired();
+
+        // From MFeatMgrRegistryObserver    	
+    	virtual void HandleFeatureChange( TFeatureServerEntry& aFeature, TFeatureChangeType aType );
+        
+       	/**
+		Function from MBackupOperationObserver in response to a change in the state of the backup and
+		restore operation(s). This function is called to notify the Feature Manager that a backup and 
+		restore operation is in progress. However, this is not the whole story, and notification using 
+		the callback ChangeLockFileL() is also used.
+		@param			aBackupOperationAttributes The current state of the backup operation. Made up of 
+		                MBackupObserver::TFileLockFlags and TOperationType types.
+		@see			MBackupObserver::TFileLockFlags 
+		@see			TOperationType.
+	    */
+        void HandleBackupOperationEventL(const TBackupOperationAttributes& aBackupOperationAttributes);
+
+       	/**
+		 * Function from MBackupObserver in response to a change in the state of the file to be subject to
+		 * the BUR operation. This function is called to notify the Feature Manager that a filelock has 
+		 * changed.
+		 * @param aFileName name of the file whose status has changed.
+		 * @param	aFlags the lock status information for the file. 
+	     */
+        void ChangeFileLockL( const TDesC& aFileName, TFileLockFlags aFlags );
+        
+    public:
+
+    /**
+     * Feature manager state machine function.
+     * This returns the feature manager back to a normal state.
+     * @param BURStatus current state
+     * @return BURStatus the next state
+     */ 
+    BURStatus Goto_NormalState( BURStatus aCurrent );
+    /**
+     * Feature manager state machine function.
+     * This will put the Feature Manager into the "start backup" state. Where the Feature Manager
+     * is expecting the BUR backup to start.
+     * @param BURStatus current state
+     * @return BURStatus the next state
+     */ 
+    BURStatus Goto_StartBackupState( BURStatus aCurrent );
+    /**
+     * Feature manager state machine function.
+     * This will put the Feature Manager into the "end backup" state. Where the Feature Manager
+     * is expecting the BUR backup has just ended, and it is required to return itself to a 
+     * normal operating mode.
+     * @param BURStatus current state
+     * @return BURStatus the next state
+     */ 
+    BURStatus Goto_EndBackupState( BURStatus aCurrent );
+    /**
+     * Feature manager state machine function.
+     * This will put the Feature Manager into the "start restore" state. Where the Feature Manager
+     * is expecting the BUR restore operation to start.
+     * @param BURStatus current state
+     * @return BURStatus the next state
+     */ 
+    BURStatus Goto_StartRestoreState( BURStatus aCurrent );
+    /**
+     * Feature manager state machine function.
+     * This will put the Feature Manager into the "end restore" state. Where the Feature Manager
+     * is expecting the BUR restore operation has just ended, and it is required to return itself 
+     * to a normal operating mode.
+     * @param BURStatus current state
+     * @return BURStatus the next state
+     */ 
+    BURStatus Goto_EndRestoreState( BURStatus aCurrent );
+    /**
+     * Feature manager state machine function.
+     * This will return the Feature Manager from its current state, and into a "safe" state whereby
+     * a normal operating mode is possible again. This is an error recovery function.
+     * @param BURStatus current state
+     * @return BURStatus the next state
+     */ 
+    BURStatus Goto_ErrorState( BURStatus aCurrent );
+    
+    private:
+
+    /* Clears the feature array ready to re-populate it during a restore operation */
+    void ClearFeatures( void );
+    /* Reloads the feature array and merges features during a restore operation */
+    void LoadFeaturesL( void );
+    /* Handles any outstanding notifications after a restore operation */
+    void HandleRestoredNotificationsL( void );
+    
+    private:
+
+        /**
+         C++ constructor.
+        */
+        CFeatMgrServer( const TInt aPriority, 
+                        const TServerType aType = EUnsharableSessions );
+        /**
+         By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+        
+        /**
+         Creates a new session when client connects.
+         @param aVersion Version
+         @param aMessage 'connect' message from the client
+         @return Pointer to created session or leaves with codes
+                 KErrNotSupported if versions does not match
+                 KErrNoMemory if creation of new session fails.
+        */
+        CSession2* NewSessionL( const TVersion& aVersion,
+                                const RMessage2& aMessage ) const;
+        /**
+         Panics the server thread
+         @param aCategory Panicer's id 
+         @param aPanic    Reason of panic 
+         @return void
+        */
+        void Panic( const TDesC& aCategory, const TInt aReason );
+        
+        /**
+         Lists and loads Feature Manager plugins.
+        */
+        TBool LoadPluginsL();
+        
+        /**
+         Deletes plugin handler if feature info is ready.
+        */
+        void DeletePlugins();
+        
+        /**
+         Check whether plugins have finished processing.
+        */
+        void CheckPluginsReadyL();
+        
+        /**
+         Calls ServicePendingRequestsL of sessions  
+        */
+        void ServicePendingRequests();
+        
+    private:    // Data
+        
+        // Timer pointer.
+        CFeatMgrTimer* iTimer;     
+
+        CBurState iBurState;
+        // ETrue when feature info received from all plugins
+        TBool iPluginsReady;
+                
+        // Struct to contain information of found Feature Manager plugins
+        struct SFeatMgrPluginInfo
+            {
+            // Plugin handler of the plugin
+            CFeatMgrPluginHandler*  iPluginHandler;
+            // ETrue if feature info received from plugin handler
+            TBool iPluginReady;
+            };
+	    
+	    // Array of found Feature Manager plugins
+	    RArray<SFeatMgrPluginInfo>  iPluginList;
+	    	    
+        // ETrue if all plugin handlers are deleted
+        TBool  iPluginsDeleted;
+        
+        // ETrue if ServicePendingRequest not called yet.
+        TBool iPendingRequests;
+        
+        // File server session
+        RFs iFs;         
+
+        // ETrue when iPluginsReady is ETrue and all feature files have been read. 
+        TBool iFeaturesReady;
+
+        CFeatMgrFeatureRegistry* iRegistry;
+
+        // Backup Notification
+        TUint32                   iBackupFlag;
+        CBaBackupSessionWrapper * iBackupNotification;
+
+#ifdef EXTENDED_FEATURE_MANAGER_TEST
+        TInt iSessionCount;
+        CShutdown iShutdown;
+#endif
+    };
+
+#endif      // FEATMGRSERVER_H 
+            
+// End of File