sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #ifndef SETTING_H sl@0: #define SETTING_H sl@0: sl@0: #include sl@0: #include sl@0: sl@0: #include "centralrepository.h" sl@0: #include "srvdefs.h" sl@0: sl@0: class TSettingsAccessPolicy; sl@0: sl@0: /** sl@0: @internalTechnology sl@0: */ sl@0: class TServerSetting sl@0: { sl@0: friend class RSettingsArray; sl@0: #if defined(SYMBIAN_CENTREP_SUPPORT_MULTIROFS) && defined(CENTRAL_REPOSITORY_SERVER_TESTING) sl@0: friend class CenrepSrvOOMTest; sl@0: #endif sl@0: public: sl@0: enum TType { EInt = 0x00000000, sl@0: EReal = 0x10000000, sl@0: EString = 0x20000000, sl@0: EDeleted = 0x30000000 }; sl@0: sl@0: inline TServerSetting(); sl@0: inline TServerSetting(TUint32 aKey); sl@0: sl@0: inline TInt ReplaceTypeAndValue(const TServerSetting& source); sl@0: inline TInt Replace(const TServerSetting& source); sl@0: inline TInt Transfer(TServerSetting& source); sl@0: sl@0: inline TUint32 Key() const; sl@0: inline void SetKey(TUint32 aKey); sl@0: inline TUint32 Meta() const; sl@0: inline void SetMeta(const TUint32 aMeta); sl@0: inline TBool IsClean(){return(iMeta & KMetaDefaultValue);}; sl@0: inline void SetClean(){iMeta |= KMetaDefaultValue;}; sl@0: inline void SetNotClean(){iMeta &=~KMetaDefaultValue;}; sl@0: inline TUint32 Type() const; sl@0: inline void SetType(const TUint32 aType); sl@0: sl@0: inline TInt GetIntValue() const; sl@0: inline const TReal& GetRealValue() const; sl@0: inline const HBufC8* GetStrValue() const; sl@0: sl@0: inline void SetIntValue(TInt aVal); sl@0: inline void SetRealValue(const TReal* aVal); sl@0: inline void SetStrValue(const HBufC8* aVal); sl@0: sl@0: inline void SetDeleted(); sl@0: sl@0: inline void CopyValueL(TInt aVal); sl@0: inline void CopyValueL(const TReal& aVal); sl@0: inline void CopyValueL(const TDesC8& aVal); sl@0: sl@0: inline TInt CopyValue(TInt aVal); sl@0: inline TInt CopyValue(const TReal& aVal); sl@0: inline TInt CopyValue(const TDesC8& aVal); sl@0: sl@0: inline TInt AssignValueTo(TInt& aVal) const; sl@0: inline TInt AssignValueTo(TReal& aVal) const; sl@0: inline TInt AssignValueTo(TDes8& aVal) const; sl@0: sl@0: inline TInt AssignValueFrom(TInt aVal); sl@0: inline TInt AssignValueFrom(const TReal& aVal); sl@0: inline TInt AssignValueFrom(const TDesC8& aVal); sl@0: sl@0: inline void PushL() const; sl@0: inline void Pop() const; sl@0: inline void PopAndDestroy() const; sl@0: sl@0: inline void Reset(); sl@0: inline void ResetValue(); sl@0: sl@0: inline TInt operator==(const TServerSetting& aSetting) const; sl@0: inline TInt operator==(TInt aVal) const; sl@0: inline TInt operator==(const TReal& aVal) const; sl@0: inline TInt operator==(const TDesC8& aVal) const; sl@0: sl@0: template sl@0: inline TInt operator!=(const T& aVal) const sl@0: { sl@0: return !operator==(aVal); sl@0: } sl@0: sl@0: inline TSettingsAccessPolicy* AccessPolicy() const; sl@0: inline void SetAccessPolicy(TSettingsAccessPolicy* aPolicy); sl@0: inline const TSecurityPolicy* GetReadAccessPolicy() const; sl@0: inline const TSecurityPolicy* GetWriteAccessPolicy() const; sl@0: inline TBool HasAccessPolicy() const; sl@0: sl@0: inline void ExternalizeL(RWriteStream& aStream) const; sl@0: inline void InternalizeL(RReadStream& aStream); sl@0: inline void ExternalizeMetaL(RWriteStream& aStream) const; sl@0: inline void InternalizeMetaL(RReadStream& aStream); sl@0: sl@0: inline TBool IsType(const TInt&) const; sl@0: inline TBool IsType(const TReal&) const; sl@0: inline TBool IsType(const TDesC8&) const; sl@0: inline TBool IsType(const TDesC16&) const; sl@0: sl@0: inline TBool IsInt() const; sl@0: inline TBool IsReal() const; sl@0: inline TBool IsStr() const; sl@0: inline TBool IsDeleted() const; sl@0: #ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS sl@0: inline TInt CopyTypeValue(const TServerSetting& source); sl@0: inline void SetIndividualMeta(TBool aIndividualSettingMeta); sl@0: inline TBool IsIndividualMeta() const {return (iMeta & KMetaIndividual);}; sl@0: #endif sl@0: sl@0: private: sl@0: TUint32 iKey; sl@0: TUint32 iMeta; sl@0: union TValue { TInt i; TReal* r; HBufC8* s; } iValue; sl@0: sl@0: // A bit of dilemma how to store TSecurePolicy for read/write access... sl@0: // If we were implementing a list of policies per an entry then RArray would be an obvious choice, sl@0: // but even then when no policy is specified each entry would have RArray (in compressed state 24B) sl@0: // Or we could have two instances of TSecurePolicy (6B each) sl@0: // so lets go for a link to a separate array of policies allocated only when needed sl@0: sl@0: TSettingsAccessPolicy* iAccessPolicy; sl@0: }; sl@0: sl@0: /** sl@0: @internalTechnology sl@0: */ sl@0: class TSettingsAccessPolicy sl@0: { sl@0: friend class CSharedRepository; sl@0: friend class CHeapRepository; sl@0: friend class CIniFileOut; sl@0: #ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS sl@0: friend class CObservable; sl@0: #endif sl@0: public: sl@0: // Single entry type is maintained in a separate array sl@0: // then the range type... to avoid duplicities sl@0: enum {ESingleSettingPolicy,ERangeSettingsPolicy}; sl@0: sl@0: inline TSettingsAccessPolicy(TSecurityPolicy& aReadPolicy,TSecurityPolicy& aWritePolicy, sl@0: TUint32 aLowKey, TUint32 aHighKey, TUint32 aKeyMask=0); sl@0: inline TSettingsAccessPolicy(TSecurityPolicy& aReadPolicy,TSecurityPolicy& aWritePolicy, sl@0: TUint32 aKey); sl@0: sl@0: sl@0: inline TBool IsInRange(TUint32 aKey) const; sl@0: inline const TSecurityPolicy* GetReadAccessPolicy() const; sl@0: inline const TSecurityPolicy* GetWriteAccessPolicy() const; sl@0: sl@0: inline void ExternalizeL(RWriteStream& aStream) const; sl@0: inline void InternalizeL(RReadStream& aStream) ; sl@0: inline TSettingsAccessPolicy(); sl@0: inline TUint32 LowKey() const; sl@0: inline TUint32 HighKey() const; sl@0: inline TUint32 KeyMask() const; sl@0: #ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS sl@0: inline TBool operator==(const TSettingsAccessPolicy& aPolicy) const sl@0: { sl@0: return Mem::Compare((TUint8*)this,sizeof(TSettingsAccessPolicy),(TUint8*)(&aPolicy),sizeof(TSettingsAccessPolicy)); sl@0: } sl@0: #endif sl@0: private: sl@0: inline TSettingsAccessPolicy(TUint32 key); sl@0: private: sl@0: // we can have 'duplicites' where a single policy would have the same key sl@0: // as 'range' policy with the low key... sl@0: TUint32 iLowKey; // used as a key for single policy as well sl@0: /** sl@0: for single key this is used to indicate whether read policy is specified or is default sl@0: note this is only applies to single policy when SYMBIAN_CENTREP_SUPPORT_MULTIROFS is defined sl@0: */ sl@0: TUint32 iHighKey; // only used for Range sl@0: /** sl@0: for single key this is used to indicate whether write policy is specified or is default sl@0: note this is only applies to single policy when SYMBIAN_CENTREP_SUPPORT_MULTIROFS is defined sl@0: */ sl@0: TUint32 iKeyMask; // only used for Range sl@0: sl@0: sl@0: TSecurityPolicy iReadAccessPolicy; sl@0: TSecurityPolicy iWriteAccessPolicy; sl@0: sl@0: }; sl@0: sl@0: /** sl@0: @internalTechnology sl@0: */ sl@0: class TSettingsDefaultMeta sl@0: { sl@0: friend class CSharedRepository; sl@0: public: sl@0: inline TSettingsDefaultMeta(TUint32 aValue, TUint32 aLowKey, sl@0: TUint32 aHighKey, TUint32 aKeyMask=0); sl@0: sl@0: inline TBool IsInRange(TUint32 aKey) const; sl@0: inline TSettingsDefaultMeta(); sl@0: sl@0: inline TUint32 GetDefaultMetadata() const sl@0: { sl@0: return iDefaultMetaData ; sl@0: }; sl@0: sl@0: inline void ExternalizeL(RWriteStream& aStream) const; sl@0: inline void InternalizeL(RReadStream& aStream) ; sl@0: sl@0: inline TUint32 LowKey() const; sl@0: inline TUint32 HighKey() const; sl@0: inline TUint32 KeyMask() const; sl@0: #ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS sl@0: inline TBool operator==(const TSettingsDefaultMeta& aMeta) const sl@0: { sl@0: return Mem::Compare((TUint8*)this,sizeof(TSettingsDefaultMeta),(TUint8*)(&aMeta),sizeof(TSettingsDefaultMeta)); sl@0: } sl@0: #endif sl@0: private: sl@0: TUint32 iLowKey; sl@0: TUint32 iHighKey; sl@0: TUint32 iKeyMask; sl@0: TUint32 iDefaultMetaData; sl@0: }; sl@0: sl@0: /** sl@0: @internalTechnology sl@0: */ sl@0: class TSettingSingleMeta sl@0: { sl@0: public: sl@0: inline TSettingSingleMeta(TUint32 aKey, TUint32 aMeta); sl@0: inline TUint32 GetKey() const { return iKey; } sl@0: inline TUint32 GetMeta() const { return iMeta; } sl@0: sl@0: private: sl@0: TUint32 iKey; sl@0: TUint32 iMeta; sl@0: }; sl@0: sl@0: #include "setting.inl" sl@0: sl@0: #endif // SETTING_H