rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserver.h
changeset 0 99ef825efeca
child 10 e20d19ef9b09
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserver.h	Mon Mar 30 12:51:20 2009 +0300
@@ -0,0 +1,386 @@
+/*
+* Copyright (c) 2003-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:       Core Runtime Security Manager Server Class
+ *
+*/
+
+
+
+
+
+
+
+#ifndef C_CRTSECMGRSERVER_H
+#define C_CRTSECMGRSERVER_H
+
+#include <rtsecmgrcommondef.h>
+#include "rtsecmgrserverdef.h"
+#include "rtsecmgrpolicy.h"
+#include "rtsecmgrstore.h"
+#include "rtsecmgrpolicymanager.h"
+#include "rtsecmgrscriptmanager.h"
+
+class CPolicyManager;
+class CScriptManager;
+class CSecMgrStore;
+
+//needed for creating server thread.
+const TUint KDefaultHeapSize=0x10000;
+const TUint KShutDownDelay = 200000; // Aprox 2 sec
+
+/*
+ * Shutdown timer class
+ *
+ * @exe rtsecmgrserver.exe 
+ */
+class CShutDown : public CTimer
+	{
+public:
+	inline CShutDown();
+	inline void ConstructL();
+	inline void Start();
+	inline virtual ~CShutDown();
+	
+private:
+	inline void RunL();
+	};
+
+#include "rtsecmgrshutdown.inl"
+	
+#include "rtsecmgrserverpolicy.inl"	
+	
+/*
+ CRTSecMgrServer class
+
+ Represents the server.
+ 
+ The server starts with the first client connect call.
+ Start includes setting up active scheduler, the server active object,
+ and the object container index which produces object object containers for each session.
+ */
+class CRTSecMgrServer : public CPolicyServer //CServer2 //CPolicyServer
+	{
+public:
+	/* 
+	 * Creates a new session with the server; 
+	 * 
+	 * @param aVersion const TVersion& version information of security manager server
+	 * @param aMessage const RMessage2& server's current message
+	 * 
+	 * @return CSession2* pointer to base instance of created server session
+	 */
+	CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
+
+	/* 
+	 * Two-phased constructor. Creates a new server object.
+	 * 
+	 * @param aActiveObjectPriority TPriority priorty of the server process
+	 * 
+	 * @return CRTSecMgrServer* pointer to new instance of CRTSecMgrServer
+	 */
+	static CRTSecMgrServer* NewL(CActive::TPriority aActiveObjectPriority);
+	
+	/* 
+	 * Two-phased constructor. Creates a new server object and leaves
+	 * the created instance on the cleanupstack.
+	 * 
+	 * @param aActiveObjectPriority TPriority priorty of the server process
+	 * 
+	 * @return CRTSecMgrServer* pointer to new instance of CRTSecMgrServer
+	 */
+	static CRTSecMgrServer* NewLC(CActive::TPriority aActiveObjectPriority);
+
+	/* 
+	 * Utility method to panic the server
+	 * 
+	 * @param aPanic TSecMgrServPanic Panic error code
+	 * 
+	 */
+	inline static void PanicServer(TSecMgrServPanic aPanic);
+
+	/* 
+	 * Returns an object container, and guaranteed
+	 * to produce object containers with unique ids
+	 * within the server
+	 * 
+	 * This method is called by a new session to create 
+	 * a container 
+	 * 
+	 * 
+	 * @return CObjectCon* a new object container
+	 */
+	CObjectCon* NewContainerL();
+
+	/* 
+	 * Adds a new server side session
+	 * 
+	 */
+	inline void AddSession();
+	
+	/* 
+	 * Removes a server side session by decrementing
+	 * the session count.
+	 * 
+	 * If the session count reaches zero, this method
+	 * initiates server shut down timer
+	 * 
+	 */
+	inline void RemoveSession();
+	
+	/*
+	 * Removes a container object from the container
+	 * index
+	 * 
+	 * @param aContainer CObjectCon* pointer to containter object
+	 * to be removed
+	 */
+	inline void RemoveFromContainerIx(CObjectCon* aContainer);
+
+	/*
+	 * Generates a new script identifier
+	 * 
+	 * @param aExecID TExecutableID& output generated script identifier
+	 *
+	 * @return KErrNone if generation of script identifier successful
+	 */
+	inline TInt ReadCounter(TExecutableID& aExecID);
+
+	/*
+	 * Registers a new policy. The actual task is performed by
+	 * server side session.
+	 * 
+	 * @param aPolicyID TPolicyID policy identifier
+	 * @param aDomains const RProtectionDomains& domains to be added
+	 *
+	 * @return KErrNone if generation of script identifier successful
+	 */	
+	inline void AddPolicyL(TPolicyID aPolicyID, const RProtectionDomains& aDomains, RAliasGroup& aAliasGroup);
+	
+	/*
+	 * Checks whether policy with the passed policy identifier exists.
+	 * The actual task is performed by server side session.
+	 * 
+	 * @param aPolicyID TPolicyID policy identifier
+	 * 
+	 * @return EFalse if policy identifier does not exist; Otherwise ETrue
+	 */
+	inline TBool IsValidPolicy(TPolicyID aPolicyID) const;
+	
+	/*
+	 * Removes an existing policy with the passed policy identifier.
+	 * The actual task is performed by server side session.
+	 * 
+	 * @param aPolicyID TPolicyID policy identifier
+	 * 
+	 * @return KErrNone if removal of policy is successful; Otherwise one
+	 * of system wide error codes
+	 */
+	inline TInt RemovePolicy(TPolicyID aPolicyID);
+
+	/*
+	 * Register a runtime script with security manager.
+	 * The actual task is performed by server side session.
+	 * 
+	 * @param aPolicyID TPolicyID policy identifier
+	 * @param aHashValue const TDesC& hashvalue of script
+	 * 
+	 * @return TExecutableID valid script identifier is registration
+	 * is successful; otherwise one of system wide error codes
+	 * 
+	 */
+	inline TExecutableID
+			RegisterScript(TPolicyID aPolicyID, const TDesC& aHashValue);
+	
+	/*
+	 * Register a runtime script with security manager.
+	 * The actual task is performed by server side session.
+	 * 
+	 * @param aPolicyID TPolicyID policy identifier
+	 * 
+	 * @return TExecutableID valid script identifier is registration
+	 * is successful; otherwise one of system wide error codes
+	 * 
+	 */
+	inline TExecutableID
+			RegisterScript(TPolicyID aPolicyID);
+	
+	/*
+	 * UnRegisters a runtime script from security manager.
+	 * The actual task is performed by server side session.
+	 * 
+	 * @param aExecID TExecutableID script identifier
+	 * @param aPolicyID TPolicyID policy identifier
+	 * 
+	 * 
+	 */
+	inline void UnRegisterScriptL(TExecutableID aExecID, TPolicyID aPolicyID);
+	
+	/*
+	 * Gets script data structure. The script identifier
+	 * is specified in the input script object
+	 * 
+	 * @param aScript CScript& Input output script object
+	 * 
+	 * @return KErrNone if script object is successsfully internalized
+	 * 
+	 */
+	inline TInt GetCapabilityInfo(CScript& aScript);
+	
+	/*
+	 * Gets script data structure. The script identifier
+	 * is specified in the input script object
+	 * 
+	 * @param aPolicyID TPolicyID  policy identifier
+	 * @param aExecID TExecutableID script identifier
+	 * @param aScript CScript& Input output script object
+	 * 
+	 * @return KErrNone if script object is successsfully internalized
+	 * 
+	 */
+	TInt GetCapabilityInfo(TPolicyID aPolicyID, TExecutableID aExecID,
+			CScript& aScript);
+	
+	/*
+	 * Utility method to get the name of the script file
+	 * 
+	 * @param aPolicyID TPolicyID  policy identifier
+	 * @param aScriptFile TFileName& input output name of script file
+	 * 
+	 * @return KErrNone if script filename is successsfully fetched
+	 * 
+	 */
+	inline TInt GetScriptFile(TExecutableID aExecID, TDes& aScriptFile);
+
+	/*
+	 * Utility method to update the permanently allowed or denied
+	 * permissions for the script object
+	 * 
+	 * @param aExecID TExecutableID script identifier of script object whose
+	 * permanent permissions are modified
+	 * @param aPermGrant TPermGrant  permanently allowed permissions
+	 * @param aPermDenied TPermGrant permanently denied permissions
+	 * 
+	 */
+	void UpdatePermGrantL(TExecutableID aExecID, TPermGrant aPermGrant,
+			TPermGrant aPermDenied);
+	
+	/*
+	 * Utility method to create a backup for the policy file
+	 * 
+	 * @param aPolicyID TPolicyID policy identifier for the file
+	 * getting backed up
+	 * @return KErrNone if backupfile is successsfully created
+	 *
+	 */
+	inline TInt BackupFile(TPolicyID aPolicyID);
+	
+	/*
+	 * Utility method to remove the backup file created
+	 * 
+	 * @param aPolicyID TPolicyID policy identifier for the file
+	 * whose backup is getting removed
+	 * @return KErrNone if backup file is successsfully removed
+	 *
+	 */
+	inline TInt RemoveTempPolicy(TPolicyID aPolicyID);
+	
+	/*
+	 * Utility method to restore the backup file created if update fails
+	 * 
+	 * @param aPolicyID TPolicyID policy identifier for the file
+	 * which is restored back
+	 * @return KErrNone if backup file is successsfully restored
+	 *
+	 */
+	inline TInt RestoreTempPolicy(TPolicyID aPolicyID);
+	
+	/*
+	 * Utility method to get the policy file information
+	 * 
+	 * @param aPolicyID TPolicyID policy identifier for the file
+	 * which is restored back
+	 * @return CPolicy* pointer to instance of Cpolicy stored in CPolicyManager 
+	 *
+	 */
+	inline CPolicy* ReturnPolicyInfo(TPolicyID aPolicyID);
+	
+	/*
+	 * Utility method to store the policy file information
+	 * 
+	 * @param aPolicy CPolicy policy information from parser
+	 * 
+	 */
+	inline void StorePolicyL(const CPolicy& aPolicy);
+
+	
+private:
+	/*
+	 *  Constructor
+	 */
+	inline CRTSecMgrServer(CActive::TPriority aActiveObjectPriority);
+
+	/*
+	 *  Second phase constructor
+	 * 
+	 */
+	void ConstructL();
+
+	/*
+	 *  Server destructor
+	 * 
+	 */
+	~CRTSecMgrServer();
+
+private:
+
+	/*
+	 *  shutdown timer object
+	 * 
+	 */
+	CShutDown iShutDown;
+	
+	/*
+	 *  Session counter
+	 * 
+	 */
+	TInt iSessionCount;
+	
+	/*
+	 *  Session container index
+	 * 
+	 */
+	CObjectConIx* iContainerIndex;
+
+	/*
+	 *  Reference to policy manager
+	 * 
+	 */
+	CPolicyManager* iPolicyMgr;
+	
+	/*
+	 *  Reference to script manager
+	 * 
+	 */
+	CScriptManager* iScriptMgr;
+	
+	/*
+	 *  Reference to security manager store
+	 * 
+	 */
+	CSecMgrStore* iSecMgrDb;
+	};
+
+#include "rtsecmgrserver.inl"
+	
+#endif //C_CRTSECMGRSERVER_H