rtsecuritymanager/rtsecuritymanagerutil/src/rtsecmgrpermission.cpp
changeset 0 99ef825efeca
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rtsecuritymanager/rtsecuritymanagerutil/src/rtsecmgrpermission.cpp	Mon Mar 30 12:51:20 2009 +0300
@@ -0,0 +1,585 @@
+/*
+* Copyright (c) 2007-2008 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:       Defines permission data structure
+ *
+*/
+
+
+
+
+
+
+#include <s32mem.h>
+#include <rtsecmgrutility.h>
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermission* CPermission::NewL()
+	{
+	CPermission* self = CPermission::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermission* CPermission::NewLC()
+	{
+	CPermission* self = new (ELeave) CPermission();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+CPermission::CPermission(const CPermission& aPermission)
+	{
+	if ( iPermName)
+		{
+		delete iPermName;
+		iPermName = NULL;
+		}
+
+	iPermName = aPermission.PermName().Alloc();
+	iPermissionData = aPermission.PermissionData();
+	}
+CPermission::CPermission(const RCapabilityArray& aCapabilities) :iPermName(NULL)
+	{
+	for(TInt i(0);i!=aCapabilities.Count();++i)
+		{
+		TUint32 capBit = LOWBIT << (aCapabilities[i]);
+		iPermissionData = KDefaultNullBit;
+		iPermissionData |= capBit;
+		}	
+	}
+
+CPermission::CPermission(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt) :iPermName(NULL)
+	{
+	iPermissionData = KDefaultNullBit;
+	for(TInt i(0);i!=aCapabilities.Count();++i)
+		{
+		TUint32 capBit = LOWBIT << (aCapabilities[i]);
+		iPermissionData |= capBit;
+
+		if ( aDefOpt&RTUserPrompt_OneShot)
+			iPermissionData |= DEFAULT_ONESHOT;
+		else
+			if ( aDefOpt&RTUserPrompt_Session)
+				iPermissionData |= DEFAULT_SESSION;
+			else
+				if ( aDefOpt&RTUserPrompt_Permanent)
+					iPermissionData |= DEFAULT_BLANKET;
+		}
+	}
+
+CPermission::CPermission(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt,TUserPromptOption aCondition) :iPermName(NULL)
+	{
+	iPermissionData = KDefaultNullBit;
+	for(TInt i(0);i!=aCapabilities.Count();++i)
+		{
+		TUint32 capBit = LOWBIT << (aCapabilities[i]);
+		iPermissionData |= capBit;
+		iPermissionData |= aCondition;
+
+		if ( aDefOpt&RTUserPrompt_OneShot)
+			iPermissionData |= DEFAULT_ONESHOT;
+		else
+			if ( aDefOpt&RTUserPrompt_Session)
+				iPermissionData |= DEFAULT_SESSION;
+			else
+				if ( aDefOpt&RTUserPrompt_Permanent)
+					iPermissionData |= DEFAULT_BLANKET;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermission::~CPermission()
+	{
+	if(iPermName)
+		{
+		delete iPermName;
+		iPermName = NULL;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// Overloaded constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermission* CPermission::NewL(const CPermission& aPermission)
+	{
+	CPermission* self = CPermission::NewLC(aPermission);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CPermission* CPermission::NewLC(const CPermission& aPermission)
+	{
+	CPermission* self = new (ELeave) CPermission(aPermission);
+	CleanupStack::PushL(self);
+	return self;
+	}
+// ---------------------------------------------------------------------------
+// Overloaded constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermission* CPermission::NewL(const RCapabilityArray& aCapabilities)
+	{
+	CPermission* self = CPermission::NewLC(aCapabilities);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Overloaded constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermission* CPermission::NewLC(const RCapabilityArray& aCapabilities)
+	{
+	CPermission* self = new (ELeave) CPermission(aCapabilities);
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Overloaded constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermission* CPermission::NewL(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt)
+	{
+	CPermission* self = CPermission::NewLC(aCapabilities, aDefOpt);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Overloaded constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermission* CPermission::NewLC(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt)
+	{
+	CPermission* self = new (ELeave) CPermission(aCapabilities ,aDefOpt);
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Overloaded constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermission* CPermission::NewL(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt,
+		TUserPromptOption aCondition)
+	{
+	CPermission* self = CPermission::NewLC(aCapabilities, aDefOpt, aCondition);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Overloaded constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermission* CPermission::NewLC(const RCapabilityArray& aCapabilities, TUserPromptOption aDefOpt,
+		TUserPromptOption aCondition)
+	{
+	CPermission* self = new (ELeave) CPermission(aCapabilities, aDefOpt, aCondition);
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Returns default condition
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUserPromptOption CPermission::Default() const
+	{
+	TUint32 ret(iPermissionData & DEFAULT_ALL);
+	if(DEFAULT_ONESHOT&ret)
+		{
+		return RTUserPrompt_OneShot;
+		}
+	else if(DEFAULT_SESSION&ret)
+		{
+		return RTUserPrompt_Session;
+		}
+	else if(DEFAULT_BLANKET&ret)
+		{
+		return RTUserPrompt_Permanent;
+		}
+	return (TUserPromptOption)ret;
+	}
+
+// ---------------------------------------------------------------------------
+// Returns condition set of the permission
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUserPromptOption CPermission::Condition() const
+	{
+	return (TUserPromptOption)(iPermissionData & CONDITION_ALL);
+	}
+
+// ---------------------------------------------------------------------------
+// Returns capability of the permission
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TCapability CPermission::Capability() const
+	{
+	TCapability retValue = (TCapability)(iPermissionData & CAPABILITY_ALL);
+
+	for(TInt i(ECapabilityTCB);i<=ECapabilityUserEnvironment;++i)
+		{
+		TUint32 temp = LOWBIT << i;
+		if(retValue & temp)
+			{
+			return (TCapability)i;
+			}
+		}
+	return ECapability_None;
+	}
+
+// ---------------------------------------------------------------------------
+// Returns capability of the permission
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermission::Capabilitilites(RCapabilityArray& aCapabilities) const
+	{
+	TCapability retValue = (TCapability)(iPermissionData & CAPABILITY_ALL);
+
+	for(TInt i(ECapabilityTCB) ;i <= ECapabilityUserEnvironment ;i++)
+		{
+		TUint32 temp = LOWBIT << i;
+		if(retValue & temp)
+			{
+			aCapabilities.Append((TCapability)i);
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// Sets default condition of the permission
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermission::SetDefault(TUserPromptOption aDefOpt)
+	{
+	if ( RTUserPrompt_OneShot==aDefOpt)
+		{
+		iPermissionData |= DEFAULT_ONESHOT;
+		iPermissionData |= CONDITION_ONESHOT;
+		}
+	else
+		if ( RTUserPrompt_Session==aDefOpt)
+			{
+			iPermissionData |= DEFAULT_SESSION;
+			iPermissionData |= CONDITION_SESSION;
+			}
+		else
+			if ( RTUserPrompt_Permanent==aDefOpt)
+				{
+				iPermissionData |= DEFAULT_BLANKET;
+				iPermissionData |= CONDITION_BLANKET;
+				}
+	}
+
+// ---------------------------------------------------------------------------
+// Sets condition of the permission
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermission::SetCondition(TUserPromptOption aCondition)
+	{
+	iPermissionData |= aCondition;
+	}
+
+// ---------------------------------------------------------------------------
+// Sets name of the permission
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermission::SetPermName(const TDesC& aPermName)
+	{
+	if ( iPermName)
+		{
+		delete iPermName;
+		iPermName = NULL;
+		}
+
+	iPermName = aPermName.AllocL ();
+	}
+	
+// ---------------------------------------------------------------------------
+// Returns name of the permission
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CPermission::PermName() const
+	{
+	if ( iPermName)
+		return *iPermName;
+	else
+		return KNullDesC ();
+	}
+
+// ---------------------------------------------------------------------------
+// Adds an unconditional capability
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermission::AppendCapPermData(TCapability aCap)
+	{
+	if ( (aCap>=ECapabilityTCB)&&(aCap<=ECapabilityUserEnvironment))
+		{
+		iPermissionData = iPermissionData | (LOWBIT << aCap);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// Sets the permission data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermission::SetPermissionData(TPermissionData aPermData)
+	{
+		iPermissionData = aPermData;
+	}
+
+// ---------------------------------------------------------------------------
+// Returns PermissionData of the permission
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TPermissionData CPermission::PermissionData() const
+	{
+	return iPermissionData;
+	}
+
+// ---------------------------------------------------------------------------
+// Internalizes permission data from stream
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermission::InternalizeL(RReadStream& aInStream)
+	{
+	TInt32 len = aInStream.ReadInt32L ();
+	if ( iPermName)
+		{
+		delete iPermName;
+		iPermName = NULL;
+		}
+
+	iPermName = HBufC::NewL (aInStream, len);
+
+	iPermissionData = aInStream.ReadUint32L ();
+	}
+
+// ---------------------------------------------------------------------------
+// ExternalizeLs permission data to stream
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermission::ExternalizeL(RWriteStream& aOutStream) const
+	{
+	if(iPermName)
+		{
+		aOutStream.WriteInt32L (iPermName->Des().MaxLength ());
+		aOutStream << *iPermName;
+		}
+	else
+		{
+		aOutStream.WriteInt32L (0);
+		aOutStream << KNullDesC;
+		}	
+	
+	aOutStream.WriteUint32L (iPermissionData);
+	}
+
+// ---------------------------------------------------------------------------
+// Copy constructor
+// ---------------------------------------------------------------------------
+//
+CPermissionSet::CPermissionSet(const CPermissionSet& aPermSet)
+	{
+	iUncondCapSet = aPermSet.iUncondCapSet;
+	}
+
+void CPermissionSet::ConstructL(const CPermissionSet& aPermSet)
+	{
+	iPermissions.ResetAndDestroy ();
+	//iPermissions.Close();
+
+	for (TInt idx(0); idx!=aPermSet.iPermissions.Count ();++idx)
+		{
+		CPermission *temp = CPermission::NewL(*(aPermSet.iPermissions[idx]));
+		iPermissions.Append (temp);
+		}
+
+	}
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermissionSet* CPermissionSet::NewL()
+	{
+	CPermissionSet* self = CPermissionSet::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermissionSet* CPermissionSet::NewLC()
+	{
+	CPermissionSet* self = new (ELeave) CPermissionSet();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermissionSet* CPermissionSet::NewL(const CPermissionSet& aPermSet)
+	{
+	CPermissionSet* self = CPermissionSet::NewLC(aPermSet);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermissionSet* CPermissionSet::NewLC(const CPermissionSet& aPermSet)
+	{
+	CPermissionSet* self = new (ELeave) CPermissionSet(aPermSet);
+	CleanupStack::PushL(self);
+	self->ConstructL(aPermSet);
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPermissionSet::~CPermissionSet()
+{
+	iPermissions.ResetAndDestroy();
+}
+
+// ---------------------------------------------------------------------------
+// Adds an unconditional capability
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermissionSet::AppendUncondCap(TCapability aCap)
+	{
+	if ( (aCap>=ECapabilityTCB)&&(aCap<=ECapabilityUserEnvironment))
+		{
+		iUncondCapSet = iUncondCapSet | (LOWBIT << aCap);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// Adds an unconditional capability
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermissionSet::AppendUncondCapabilities(TUnConditionalPermission aUnConditionals)
+	{
+		iUncondCapSet = aUnConditionals;
+	}
+
+// ---------------------------------------------------------------------------
+// Returns unconditional capabilities of thhe permissionset
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUnConditionalPermission CPermissionSet::UnconditionalCaps() const
+	{
+	return iUncondCapSet;
+	}
+// ---------------------------------------------------------------------------
+// Returns unconditional capabilities of thhe permissionset
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermissionSet::UnconditionalCaps(RUnConditionals& aUnConditionals) const
+	{
+	for (TInt i(ECapabilityTCB); i!=ECapability_Limit;++i)
+		{
+		TUint32 capBitToCheck(KDefaultEnableBit);
+		capBitToCheck = capBitToCheck << i;
+
+		if ( capBitToCheck&iUncondCapSet)
+			{
+			aUnConditionals.Append ((TCapability)i);
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// ExternalizeLs permissionset data to stream
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermissionSet::ExternalizeL(RWriteStream& aSink) const
+	{
+	aSink.WriteInt32L (iPermissions.Count ());
+	for (TInt idx(0); idx!=iPermissions.Count ();++idx)
+		{
+		iPermissions[idx]->ExternalizeL (aSink);
+		}
+
+	aSink.WriteUint32L (iUncondCapSet);
+	}
+
+// ---------------------------------------------------------------------------
+// InternalizeL permissionset data from stream
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermissionSet::InternalizeL(RReadStream& aSource)
+	{
+	iPermissions.Reset ();
+	TInt cnt(aSource.ReadInt32L ());
+
+	for (TInt idx(0); idx!=cnt;++idx)
+		{
+		CPermission* permission = CPermission::NewL();
+		permission->InternalizeL (aSource);
+		iPermissions.Append (permission);
+		}
+
+	iUncondCapSet = aSource.ReadUint32L ();
+	}
+
+// ---------------------------------------------------------------------------
+// Adds a permission data to the permissionset
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPermissionSet::AppendPermission(CPermission& aPermission)
+	{
+	iPermissions.Append (&aPermission);
+	}
+
+// ---------------------------------------------------------------------------
+// Returns permission data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const RPermissions& CPermissionSet::Permissions() const
+	{
+	return iPermissions;
+	}
+
+// ---------------------------------------------------------------------------
+// Returns permission data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RPermissions& CPermissionSet::Permissions()
+	{
+	return iPermissions;
+	}