--- /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