--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/dbms/security/SC_StrmIn.cpp Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,101 @@
+// Copyright (c) 2004-2009 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:
+// TPDStreamLoader class
+//
+//
+
+#include <s32file.h>
+#include "SC_Defs.h"
+#include "SC_StrmIn.h"
+
+namespace DBSC
+{
+
+/**
+MPolicyDomainLoader::RunL() implementation, which is used to load security policies
+from a binary file, create the related security policy objects and add them
+to CPolicyDomain instance, controlled by aPolicyDomainBuilder object.
+It is not called directly, but will be called back.
+@param aPolicyDomainBuilder TPolicyDomainBuilder instance, which will be used to add
+ created security policy objects to the controlled by it collection.
+@leave System-wide error codes
+*/
+void TPDStreamLoader::RunL(TPolicyDomainBuilder& aPolicyDomainBuilder)
+ {
+ //Load policy file version
+ TVersion fileVer;
+ iStream >> fileVer.iMajor;
+ iStream >> fileVer.iMinor;
+ iStream >> fileVer.iBuild;
+ //Check policy file version against the software version
+ TInt fileVersion = CVERSION(fileVer.iMajor, fileVer.iMinor);
+ if(KDBSCVersion < fileVersion)
+ {
+ __LEAVE(KErrNotSupported);
+ }
+ //
+ CPolicyBase::RPolicyCollection policyColl;
+ CleanupClosePushL(policyColl);
+ //Load database policy
+ LoadPolicyCollectionL(policyColl);
+ CDbPolicy* dbPolicy = CDbPolicy::NewLC(policyColl);
+ aPolicyDomainBuilder.SetDbPolicyL(dbPolicy);
+ CleanupStack::Pop(dbPolicy);
+ //Load all table policies
+ TInt16 tblCnt;
+ iStream >> tblCnt;
+ for(TInt i=0;i<TInt(tblCnt);++i)
+ {
+ TBuf<KMaxFileName> tblName;
+ iStream >> tblName;
+ LoadPolicyCollectionL(policyColl);
+ CTblPolicy* tblPolicy = CTblPolicy::NewLC(tblName, policyColl, dbPolicy);
+ aPolicyDomainBuilder.AddTblPolicyL(tblPolicy);
+ CleanupStack::Pop(tblPolicy);
+ }
+ CleanupStack::PopAndDestroy(&policyColl);
+ //Load backup&restore SID (supported after version 1.1 (including 1.1)).
+ if(fileVersion >= CVERSION(KDBSCMajorVersion1, KDBSCMinorVersion1_1))
+ {
+ TSecureId backupSID;
+ iStream >> backupSID.iId;
+ aPolicyDomainBuilder.SetBackupSID(backupSID);
+ }
+ }
+
+/**
+Loads security policies collection from a binary file
+@param aPolicyColl A reference to a security policy collection object which has
+ to be filled with the loaded security policies.
+@leave System-wide error codes
+*/
+void TPDStreamLoader::LoadPolicyCollectionL(CPolicyBase::RPolicyCollection& aPolicyColl)
+ {
+ aPolicyColl.Reset();
+ TInt8 cnt;
+ iStream >> cnt;
+ for(TInt i=0;i<TInt(cnt);++i)
+ {
+ CPolicyBase::TPolicy policy;
+ TInt8 type;
+ iStream >> type;
+ policy.iType = static_cast <TPolicyType> (type);
+ TBuf8<sizeof(TSecurityPolicy)> buf;
+ iStream >> buf;
+ __LEAVE_IF_ERROR(policy.iData.Set(buf));
+ __LEAVE_IF_ERROR(aPolicyColl.Append(policy));
+ }
+ }
+
+} //end of - namespace DBSC