diff -r 000000000000 -r b497e44ab2fc policymanagement/policyengine/centreptoolserver/inc/IniFileHelper.h --- /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 +#include +#include +#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