rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrserversession.cpp
changeset 0 99ef825efeca
child 10 a7062f7f0b79
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrserversession.cpp	Mon Mar 30 12:51:20 2009 +0300
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2009 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:      
+*
+*/
+
+
+
+
+
+#include <e32svr.h>
+#include <e32uid.h>
+
+#include "rtsecmgrserver.h"
+#include "rtsecmgrdata.h"
+#include "rtsecmgrpolicyparser.h"
+#include "rtsecmgrsession.h"
+#include "rtsecmgrsubsession.h"
+
+/**
+ * Called by client/server framework after 
+ * session has been successfully created.
+ * In effect, a second-phase constructor.
+ * creates:
+ * 
+ *  1. the object index
+ *  2. the object container for this session.
+ *
+ */
+void CRTSecMgrSession::CreateL()
+	{
+	if(!iSecMgrServer)
+		iSecMgrServer = dynamic_cast<CRTSecMgrServer*> (const_cast<CServer2*> (Server()));
+		
+	iSecMgrServer->AddSession ();
+
+	iSubSessionObjectIndex = CObjectIx::NewL ();
+	iContainer = iSecMgrServer->NewContainerL ();
+	}
+
+void CRTSecMgrSession::CloseSession()
+	{
+	//delete the object index (this stores the objects for this session)
+	Delete (iSubSessionObjectIndex);
+	//delete the object container (this provides unique ids for the objects of this session )
+
+	iSecMgrServer->RemoveFromContainerIx (iContainer);
+	iSecMgrServer->RemoveSession ();
+	}
+
+/**
+ * A simple utility function to return the appropriate 
+ * CRTSecMgrSubSession object given a client's subsession handle.
+ */
+CRTSecMgrSubSession* CRTSecMgrSession::SubSessionFromHandle(
+		const RMessage2& aMessage, TInt aHandle)
+	{
+	CRTSecMgrSubSession* subSession = (CRTSecMgrSubSession*)iSubSessionObjectIndex->At(aHandle);
+
+	if ( !subSession)
+		{
+		PanicClient (aMessage, EBadSubsessionHandle);
+		}
+	return subSession;
+	}
+
+void CRTSecMgrSession::DispatchMessageL(const RMessage2& aMessage)
+	{
+	// First check for session-relative requests
+	switch (aMessage.Function ())
+		{
+		case ESetPolicy:
+			SetPolicy (aMessage);
+			return;
+		case EUpdatePolicy:
+			UpdatePolicy (aMessage);
+			return;
+		case EUnsetPolicy:
+			UnsetPolicy (aMessage);
+			return;
+		case ERegisterScript:
+			RegisterScript (aMessage);
+			return;
+		case ERegisterScriptWithHash:
+			RegisterScript (aMessage, ETrue);
+			return;
+		case EUnRegisterScript:
+			UnregisterScript (aMessage);
+			return;
+		case EGetScriptSession:
+			GetScriptSessionL (aMessage);
+			return;
+		case EGetTrustedUnRegScriptSession:
+			GetTrustedUnRegScriptSessionL (aMessage);
+			return;
+		case ESecServCloseSession:
+			CloseSession ();
+			return;
+			}
+
+	// All other function codes must be subsession relative.
+	// We need to find the appropriate server side subsession
+	// i.e. the CRTSecMgrSubSession object. 
+	// The handle value is passed as the 4th aregument.
+	CRTSecMgrSubSession* subSession = SubSessionFromHandle (aMessage,
+			aMessage.Int3 ());
+	switch (aMessage.Function ())
+		{
+		case ECloseScriptSession:
+			DeleteSubSession (aMessage.Int3 ());
+			return;
+		case EUpdatePermanentGrant:
+			subSession->UpdatePermGrantL (aMessage);
+			return;
+		case EGetScriptFile:
+			subSession->GetScriptFile (aMessage);
+			return;
+		default:
+			PanicClient (aMessage, EBadRequest);
+			return;
+		}
+	}
+TBool CRTSecMgrSession::IsScriptOpenWithPolicy(TPolicyID aPolicyID)
+	{
+	for (TInt i(0); i!=iSubSessionObjectIndex->Count ();++i)
+		{
+		CRTSecMgrSubSession
+				* subsession = ((CRTSecMgrSubSession*)iSubSessionObjectIndex->operator[](i));
+		if ( subsession)
+			{
+			if ( aPolicyID==subsession->Script().PolicyID ())
+				{
+				return ETrue;
+				}
+			}
+		else
+			{
+			continue;
+			}
+
+		}
+	return EFalse;
+	}
+
+TBool CRTSecMgrSession::IsScriptSessionOpen(TExecutableID aScriptID,CRTSecMgrSubSession* aCurrentSession)
+	{
+	for (TInt i(0); i!=iSubSessionObjectIndex->Count ();++i)
+		{
+		CRTSecMgrSubSession
+				* subsession = ((CRTSecMgrSubSession*)iSubSessionObjectIndex->operator[](i));
+		if ( subsession && ( subsession != aCurrentSession))
+			{
+			if ( aScriptID==subsession->ScriptID ())
+				{
+				return ETrue;
+				}
+			}
+		else
+			{
+			continue;
+			}
+
+		}
+	return EFalse;
+	}