diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrserversession.cpp --- /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 +#include + +#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 (const_cast (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; + }