policymanagement/policyengine/centreptoolserver/inc/IniFileHelper.h
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/policymanagement/policyengine/centreptoolserver/inc/IniFileHelper.h	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 2000 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: Implementation of policymanagement components
+*
+*/
+
+
+
+#ifndef INIFILEHELPER_HEADER_
+#define INIFILEHELPER_HEADER_
+
+// INCLUDES
+
+#include <e32base.h>
+#include <f32file.h> 
+#include <s32strm.h> 
+#include "CentRepToolClientServer.h"
+
+// CONSTANTS
+
+const TUint32 KBackupBitMask = 0x01000000;	//from the most significiant byte the least significiant bit defines is backup on or off
+
+enum KSettingType
+{
+	EIndividualSetting = 0,
+	EDefaultMeta,
+	ERangeMetaSetting,
+	ERangeMaskSetting,
+	ERangeSetting,
+	EMaskSetting,
+};
+
+enum KDefaultType
+{
+	EAlwaysPass,
+	EAlwaysFail
+};
+
+
+// MACROS
+// DATA TYPES
+// FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+// CLASS DECLARATION
+
+class CSecuritySetting : public CBase
+{
+	public:
+		//constructor
+		CSecuritySetting();
+
+		//
+		TDesC& SecurityString( TDes &aSecurityString);
+		virtual TDesC& SettingDefinition( TDes &aSecurityString) = 0;	//subclasses defines setting part
+		
+		//cap modifieng
+		TInt AddSid( TUid aUid);
+		TInt RemoveSid();
+		TInt AddWriteCap( TUint8 aCab);
+		TInt AddReadCap( TUint8 aCab);
+		
+		//copy function
+		void CopyCapabilities( CSecuritySetting* aSetting);
+		
+		//compatible functions with TSecurityPolicy Set and Package functions
+		void SetWr(const TDesC8& aDes);
+		void PackageWr( TDes8& aPackage) const;
+		void SetRd(const TDesC8& aDes);
+		void PackageRd( TDes8& aPackage) const;
+
+		//streaming functions
+		void ExternalizeL(RWriteStream& aStream) const;
+		void InternalizeL(RReadStream& aStream);
+		
+		//util
+		TBool ContainsSecuritySettings();
+		KSettingType Type();
+		
+		TBool CheckAccess( const RMessage2& aMessage, TAccessType aAccessType);
+	protected:
+		TInt ReadCaps( TLex& aLex);	
+		TInt AddSecurityAttributes( const TDesC& aType, const TDesC& aValue);
+	private:
+		TInt ConvertStrToCap( const TDesC& aCab, TUint8& aCapValue, KDefaultType& aType);
+		TInt ConvertStrToSid( const TDesC& aStr, TUid& iSid);
+		const TPtrC8 ConvertCapToStr( TUint8 aCab, KDefaultType& aType);
+
+		enum ECapTypes
+		{
+			EWriteCaps,
+			EReadCaps
+		};
+
+		void Set(const TDesC8& aDes, ECapTypes aCapType);
+		void Package( TDes8& aPackage, ECapTypes aCapType) const;
+
+	protected:
+		KSettingType iType;
+		KDefaultType iDefaultTypeWr;
+		KDefaultType iDefaultTypeRd;
+
+	private:
+		TBool iSidExistWr;
+		TUid iSidWr;
+		TUint8 iCapWr[7];
+		TBool iSidExistRd;
+		TUid iSidRd;
+		TUint8 iCapRd[7];
+		
+		friend class CSecuritySetting;
+};
+
+class CRangeSetting : public CSecuritySetting
+{
+	public:
+		CRangeSetting(); 				
+		CRangeSetting( TUint32 aRangeStart, TUint32 aRangeEnd, TUint32 aMask);
+
+		static CRangeSetting* NewL( TLex& aSecurityString); 				
+		static CRangeSetting* NewL( TUint32 aRangeStart, TUint32 aRangeEnd, TUint32 aMask); 				
+
+		virtual TDesC& SettingDefinition( TDes &aSecurityString);	
+		
+		TUint32 Start() const;
+		TUint32 End() const;
+		TUint32 Mask() const;
+		
+		//streaming functions
+		void ExternalizeL(RWriteStream& aStream) const;
+		void InternalizeL(RReadStream& aStream);
+	protected:
+	private:
+		TDesC& RangeSettingDefinition( TDes &aSecurityString);	
+		TDesC& MaskSettingDefinition( TDes &aSecurityString);	
+		TInt ReadRangeSetting( TLex& aSecurityString);
+		TInt ReadMaskSetting( TLex& aSecurityString);
+	
+		TUint32 iStart;
+		TUint32 iEnd;
+		TUint32 iMask;
+		
+		friend class CRepositorySession;
+		friend class CRepositoryContent;
+};
+
+class CDefaultSetting : public CSecuritySetting
+{
+	public:
+		//constructors
+		CDefaultSetting();
+		static CDefaultSetting* NewL( TLex& aSecurityString); 				
+		
+		//
+		virtual TDesC& SettingDefinition( TDes &aSecurityString);
+		
+		//streaming functions
+		void ExternalizeL(RWriteStream& aStream) const;
+		void InternalizeL(RReadStream& aStream);
+	protected:
+	private:
+		TInt ReadSetting( TLex& aSecurityString);
+};
+
+class CIndividualSetting : public CSecuritySetting
+{
+	public:
+		//constructors and destructors
+		CIndividualSetting();
+		CIndividualSetting( const TUint32& aSettingId);
+		~CIndividualSetting();
+		static CIndividualSetting* NewL( TLex& aSecurityString); 				
+		
+		
+		
+		//
+		virtual TDesC& SettingDefinition( TDes &aSecurityString);
+
+		//streaming	for setting data	
+		void ExternalizeDataL(RWriteStream& aStream) const;
+		void InternalizeDataL(RReadStream& aStream);
+
+		//streaming	for setting data	
+		void ExternalizePlatSecL(RWriteStream& aStream) const;
+		void InternalizePlatSecL(RReadStream& aStream);
+
+		
+		//compare functions
+		static TInt CompareElements( CIndividualSetting const& aSetting1, CIndividualSetting const& aSetting2);
+	protected:
+	private:
+		void ReadSettingL( TLex& aSecurityString);
+		
+	private:
+		//type definitions
+		enum TSettingType { EInt, EReal, EString, EString8, EBinaryType};
+	
+		//setting values
+		TPtrC iData;
+		TUint32 iSettingId;
+		TUint32 iMeta;
+		
+		union TSettingValue { TInt iIntegerValue; TReal iRealValue; HBufC8* iStringValue; } iSettingValue;
+		TSettingType iSettingType;
+		
+		friend class CRepositorySession;
+		friend class CRepositoryContent;
+};
+
+class CRangeMeta : public CBase
+{
+	public:
+		CRangeMeta(); 				
+		CRangeMeta( TUint32 aRangeStart, TUint32 aRangeEnd, TUint32 aMask, TUint32 aMeta); 				
+
+		static CRangeMeta* NewL( TLex& aSecurityString); 				
+		static CRangeMeta* NewL( TUint32 aRangeStart, TUint32 aRangeEnd, TUint32 aMask, TUint32 aMeta); 				
+
+		TUint32 Start() const;
+		TUint32 End() const;
+		TUint32 Mask() const;
+		KSettingType Type();
+		
+		//streaming functions
+		void ExternalizeL(RWriteStream& aStream) const;
+		void InternalizeL(RReadStream& aStream);
+	protected:
+	private:
+		TInt ReadRangeSetting( TLex& aSecurityString);
+		TInt ReadMaskSetting( TLex& aSecurityString);
+
+		KSettingType iType;
+
+	
+		TUint32 iStart;
+		TUint32 iEnd;
+		TUint32 iMask;
+		TUint32 iMeta;
+		
+		friend class CRepositorySession;
+		friend class CRepositoryContent;
+};
+
+
+class TIniFileHelper 
+{
+	public:
+		TIniFileHelper();
+	
+		//read and write functions
+		HBufC* ReadFileL( RFile& aFile);
+		TInt StartWrite( RFile& aFile);
+		TInt WriteToFile( const TDesC& aContent);
+		TInt LineFeed();
+		TInt FinishWrite();
+		
+		//static helper functions
+		static void NextLine( TPtrC& aContent, TPtrC& aNextLine);
+		static TInt ReadNumber( TInt32& aNumber, TLex& aLex);
+		static TInt ReadUNumber( TUint32& aNumber, TLex& aLex);
+		static TInt ReadNumber( TReal& aNumber, TLex& aLex);
+		static TInt CompareElements( CRangeSetting const& aElement1, CRangeSetting const& aElement2);
+		static TInt CompareElements( CRangeMeta const& aElement1, CRangeMeta const& aElement2);
+		
+		static TInt StringReadL( TLex& aLex, HBufC8*& aString);
+		static TInt String8ReadL( TLex& aLex, HBufC8*& aString);
+		static TInt BinaryReadL( TLex& aLex, HBufC8*& aString);
+
+
+	private:
+		//member functions		
+	private:
+		//attributes
+		RFile* iFile;
+		TInt iSize;
+		
+#ifdef _DEBUG
+		RFs iDebugFs;
+		RFile iDebugFile;
+#endif //_DEBUG
+};
+
+
+#endif 
\ No newline at end of file