policymanagement/policyengine/policyengineserver/inc/PolicyEngineServer.h
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/policymanagement/policyengine/policyengineserver/inc/PolicyEngineServer.h	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 2000 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: Implementation of policymanagement components
+*
+*/
+
+
+#ifndef __POLICY_ENGINE_SERVER_H__
+#define __POLICY_ENGINE_SERVER_H__
+
+// INCLUDES
+
+#include <e32base.h>
+#include "PolicyEngineClient.h"
+#include "PlatformSecurityPolicies.h"
+
+// CONSTANTS
+
+// ----------------------------------------------------------------------------------------
+// PolicyEngine server panic codes
+// ----------------------------------------------------------------------------------------
+
+enum TPolicyEnginePanic
+	{
+	EPanicGeneral,
+	EBadSubsessionHandle,
+	EPanicIllegalFunction,
+	EBadDescriptor
+	};
+	
+const TInt KPolicyEngineSelfCheckDelay 			= 8000000;	// approx 8s
+const TInt KPolicyEngineShutdownDelay  		 	= 5;		// approx 8s * 2 = 40s
+const TInt KPolicyEngineReleaseElementsDelay  	= 1;		// approx 8s * 1 = 8s
+
+
+// DATA TYPES
+// FUNCTION PROTOTYPES
+
+void PanicClient(const RMessagePtr2& aMessage,TPolicyEnginePanic aPanic);
+
+// FORWARD DECLARATIONS
+
+class CPolicyStorage;
+class CPolicyProcessor;
+class CPolicyManager;
+class CTrustedSession;
+class CCertificateMaps;
+
+#ifdef _DEBUG
+namespace DebugUtility
+{
+	TBool PolicyCheckActive();
+}
+#endif
+
+
+// MACROS
+
+#ifdef _DEBUG
+	#define NO_POLICY_CHECK_RETURN if(!DebugUtility::PolicyCheckActive())return;
+	#define NO_POLICY_CHECK_FALSE DebugUtility::PolicyCheckActive()
+#else
+	#define NO_POLICY_CHECK_RETURN ;
+	#define NO_POLICY_CHECK_FALSE ETrue
+#endif
+
+// CLASS DECLARATION     
+
+class CShutdown : public CTimer
+{
+	//shutdown timer for policy server
+	public:
+	public:
+		inline CShutdown();
+		inline void ConstructL();
+		inline void Start();
+	private:
+		void RunL();
+		TInt iSelfCheckCounter;
+};
+
+class CServerStatusFlags : public CBase
+{
+	public:
+		CServerStatusFlags() {}
+	public:
+		TBool iManagementUiActive;
+		TBool iUiActive;
+		TBool iProcessorActive;
+		TBool iManagementActive;
+	private:
+};
+
+class CSubSessionObjects : public CObject
+{
+	public:
+		static CSubSessionObjects * NewL( CPolicyProcessor * aPolicyProcessor, 
+										  CPolicyManager * aPolicyManager,
+			  							  CTrustedSession * aTrustedSession);
+		~CSubSessionObjects();
+	private:
+		CSubSessionObjects( CPolicyProcessor * aPolicyProcessor, 
+							CPolicyManager * aPolicyManager,
+							CTrustedSession * aTrustedSession);
+	private:
+		CPolicyProcessor * iPolicyProcessor;
+ 		CPolicyManager * iPolicyManager; 
+		CTrustedSession * iTrustedSession;
+
+	
+		friend class CPolicyEngineSession;
+		friend class CPolicyEngineServer;
+};
+
+/**
+*  CPolicyEngineServer 
+*  Description.
+*/
+
+class CPolicyEngineServer : public CPolicyServer
+{
+	public:
+		static CServer2* NewLC();
+		~CPolicyEngineServer();
+		void AddSession();
+		void DropSession();
+	
+	/**
+    * Description
+	* @param a??? 
+    * @return CObjectCon
+    */
+	
+		CObjectCon* NewContainerL();
+		
+		static CCertificateMaps * CertificateMaps();
+		static CServerStatusFlags* StatusFlags();
+		static void AddActiveObjectL( CActive* aActiveObject);
+		static void RemoveActiveObject( CActive* aActiveObject);
+		static void StopAllPendingRequests();
+		
+		//get active subsessions object to PolicyEngineServer
+		static void SetActiveSubSession( const CBase* iBase);
+		void Panic( TInt aPanicCode);
+private:
+		CPolicyEngineServer();
+		void ConstructL();
+		CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;	
+		
+		//From CPolicyServer
+		CPolicyServer::TCustomResult CustomSecurityCheckL(const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing);
+
+		
+private:
+		TInt iSessionCount;
+		CShutdown iShutdown;
+		RArray<CActive*> iActiveObjectCancelList;
+		CPolicyStorage* iPolicyStorage;
+		CCertificateMaps* iCertificateMaps;
+		CSubSessionObjects* iSubSessionObjects;
+		CServerStatusFlags* iFlags;
+		CObjectConIx *iContainerIndex;
+		
+		static CPolicyEngineServer* iServer;
+		CPolicyServer::TPolicy iPolicyEngineSecurityPolicy;
+		
+		friend class CPolicyEngineSession;
+};
+
+class CPolicyEngineSession : public CSession2
+{
+	
+	public:
+		CPolicyEngineSession();
+		void CreateL();
+		void SetStatusFlags( CServerStatusFlags* aFlags);
+		
+		CSubSessionObjects* GetSubSessionObjects( const CBase* iBase);
+ 	private:
+
+	private:
+		~CPolicyEngineSession();
+		inline CPolicyEngineServer& Server();
+
+		void ServiceL(const RMessage2& aMessage);
+		
+		void DispatchMessageL(const RMessage2& aMessage);
+		void ServiceError(const RMessage2& aMessage,TInt aError);
+	
+		void NewSubSessionL( const RMessage2& aMessage);
+		CSubSessionObjects* SubSessionFromHandle( const RMessage2& aMessage);
+		void DeleteSubSession( const RMessage2& aMessage);
+
+		void ExecuteRequestL( const RMessage2& aMessage);
+		void AddCertificateForSessionL(  const RMessage2& aMessage);
+		
+		void PerformRFSL();
+	private:	
+		TInt iSubsessionCount;
+
+		CObjectCon *iContainer; 		// object container for this session
+		CObjectIx* iSessionsObjects; 	// object index which stores objects for this session
+};
+
+class CASyncHandler : public CActive
+{
+	public:
+		~CASyncHandler();
+		static CASyncHandler* NewLC();
+	
+		TRequestStatus& GetRequestStatus();
+		void WaitForRequest();
+	protected:	
+		CASyncHandler();
+		void RunL();
+		void DoCancel();		
+	private:
+		CActiveSchedulerWait iWaitScheduler;	
+};
+
+#endif //__POLICYENGINESERVER_H__
+
+
+
+
+