persistentstorage/dbms/security/SC_StrmOut.cpp
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/dbms/security/SC_StrmOut.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,75 @@
+// 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:
+// TPDStreamPersister class
+// 
+//
+
+#include <s32file.h>
+#include "SC_Defs.h"
+#include "SC_StrmOut.h"
+
+namespace DBSC
+{
+
+/**
+MPolicyDomainPersister::RunL() implementation, which is used to store security policies
+to a binary file.
+It is not called directly, but will be called back.
+@param aPolicyDomainReader TPolicyDomainReader instance, which will be used to traverse
+       security policy objects in the controlled by it collection. 
+@leave System-wide error codes
+*/
+void TPDStreamPersister::RunL(const TPolicyDomainReader& aPolicyDomainReader)
+	{
+	//Write software version
+	TVersion softVer(KDBSCMajorVersion, KDBSCMinorVersion, KDBSCBuild);
+	iStream << softVer.iMajor;
+	iStream << softVer.iMinor;
+	iStream << softVer.iBuild;
+	//Write database policy
+	const CDbPolicy& dbPolicy = aPolicyDomainReader.DbPolicy();
+	ExternalizePolicyCollectionL(dbPolicy.PolicyCollection());
+	//Write table policies
+	aPolicyDomainReader.ResetTblPos();
+	iStream << TInt16(aPolicyDomainReader.TblPolicyCount());
+	const CTblPolicy* tblPolicy;
+	while((tblPolicy = aPolicyDomainReader.NextTblPolicy()) != NULL)
+		{
+		iStream << tblPolicy->TableName();
+		ExternalizePolicyCollectionL(tblPolicy->PolicyCollection());
+		}
+	//Write backup&restore SID
+	iStream << (TUint32)aPolicyDomainReader.BackupSID();
+	}
+
+/**
+Stores security policies collection to a binary file
+@param aPolicyCollection A const reference to a security policy collection object which has
+       to be stored to a binary file.
+@leave System-wide error codes
+*/
+void TPDStreamPersister::ExternalizePolicyCollectionL(const CPolicyBase::RPolicyCollection& aPolicyCollection)
+	{
+	TInt cnt = aPolicyCollection.Count();
+	iStream << TInt8(cnt);
+	for(TInt i=0;i<cnt;++i)
+		{
+		const CPolicyBase::TPolicy& policy = aPolicyCollection[i];
+		iStream << TInt8(policy.iType);
+		TPtrC8 packet = policy.iData.Package();
+		iStream << packet;
+		}
+	}
+
+} //end of - namespace DBSC