Update contrib.
1 // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
16 using namespace NCentralRepositoryConstants;
18 inline TServerSetting::TServerSetting()
23 Mem::FillZ(&iValue, sizeof(iValue));
26 inline TServerSetting::TServerSetting(const TUint32 aKey)
31 Mem::FillZ(&iValue, sizeof(iValue));
34 /** Ensures this setting has the same type and value of source. Where EString types
35 are involved, safely removes previously-owned string, and deep copies string taken
37 Does not require source and destination type to match. Callers must check if important.
38 @return KErrNone if successful or KErrNoMemory if no memory available for copying any string.
39 @post If error code is not KErrNone, object is guaranteed to be in its original state.
41 inline TInt TServerSetting::ReplaceTypeAndValue(const TServerSetting& source)
47 const HBufC8* sourceBuf = source.GetStrValue();
48 HBufC8* buf = sourceBuf ? sourceBuf->Alloc() : NULL;
49 if (sourceBuf && !buf)
58 else if (source.IsReal())
65 TReal* temp = new TReal(source.GetRealValue());
78 SetType(source.Type());
81 iValue.i = source.GetIntValue();
88 /** Replaces the contents of this setting with those of source, safely cleaning up previously-
89 owned string, and making a deep copy of source string if of string type.
90 Does not require source and destination type to match. Callers must check if important.
91 @return KErrNone if successful or KErrNoMemory if no memory available for copying any string.
92 @post If error code is not KErrNone, object is guaranteed to be in its original state.
94 inline TInt TServerSetting::Replace(const TServerSetting& aSetting)
98 const HBufC8* sourceBuf = aSetting.GetStrValue();
99 HBufC8* targetBuf = sourceBuf ? sourceBuf->Alloc() : NULL;
100 if (sourceBuf && !targetBuf)
106 iValue.s = targetBuf;
108 else if (aSetting.IsReal())
110 TReal* temp = new TReal(aSetting.GetRealValue());
129 /** Transfer ownership of the contents of this setting with those of source, safely cleaning up previously-
130 owned string, and making a deep copy of source string if of string type.
131 Does not require source and destination type to match. Callers must check if important.
132 @return KErrNone if successful or KErrNoMemory if no memory available for copying any string.
133 @post If error code is not KErrNone, object is guaranteed to be in its original state.
135 inline TInt TServerSetting::Transfer(TServerSetting& aSetting)
140 Mem::FillZ(&aSetting.iValue, sizeof(aSetting.iValue));
141 aSetting.SetType(EDeleted);
147 inline TUint32 TServerSetting::Key() const
152 inline void TServerSetting::SetKey(TUint32 aKey)
157 inline TUint32 TServerSetting::Meta() const
159 #ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS
160 return iMeta & ~KMetaInternal;
162 return iMeta & ~KMetaType;
166 inline void TServerSetting::SetMeta(const TUint32 aMeta)
168 iMeta = (iMeta & KMetaType) | (aMeta & ~KMetaType);
171 inline TUint32 TServerSetting::Type() const
173 return iMeta & KMetaType;
176 inline void TServerSetting::SetType(const TUint32 aType)
178 iMeta = (iMeta & ~KMetaType) | (aType & KMetaType);
181 inline TInt TServerSetting::GetIntValue() const
186 inline const TReal& TServerSetting::GetRealValue() const
191 inline const HBufC8* TServerSetting::GetStrValue() const
196 inline void TServerSetting::SetIntValue(TInt aVal)
202 inline void TServerSetting::SetRealValue(const TReal* aVal)
206 iValue.r = const_cast<TReal*>(aVal);
210 inline void TServerSetting::SetStrValue(const HBufC8* aVal)
213 if(aVal && !aVal->Length())
220 iValue.s = const_cast<HBufC8*>(aVal);
224 inline void TServerSetting::SetDeleted()
229 inline TInt TServerSetting::CopyValue(TInt aVal)
236 inline TInt TServerSetting::CopyValue(const TReal& aVal)
239 TReal* temp=new TReal(aVal);
246 inline TInt TServerSetting::CopyValue(const TDesC8& aVal)
251 HBufC8* temp=aVal.Alloc();
263 inline void TServerSetting::CopyValueL(TInt aVal)
265 User::LeaveIfError(CopyValue(aVal));
268 inline void TServerSetting::CopyValueL(const TReal& aVal)
270 User::LeaveIfError(CopyValue(aVal));
273 inline void TServerSetting::CopyValueL(const TDesC8& aVal)
275 User::LeaveIfError(CopyValue(aVal));
278 inline TInt TServerSetting::AssignValueTo(TInt& aVal) const
280 return IsInt() ? (aVal=iValue.i, KErrNone) : KErrArgument;
283 inline TInt TServerSetting::AssignValueTo(TReal& aVal) const
286 (iValue.r ? (aVal=*(iValue.r), KErrNone) : KErrCorrupt)
290 inline TInt TServerSetting::AssignValueTo(TDes8& aVal) const
293 (iValue.s ? (aVal=iValue.s->Des(), KErrNone) : (aVal=KNullDesC8, KErrNone))
297 inline TInt TServerSetting::AssignValueFrom(TInt aVal)
299 return IsInt() ? (iValue.i=aVal, KErrNone) : KErrArgument;
302 inline TInt TServerSetting::AssignValueFrom(const TReal& aVal)
308 TReal* temp = new TReal(aVal);
317 inline TInt TServerSetting::AssignValueFrom(const TDesC8& aVal)
324 HBufC8* buf = aVal.Alloc();
338 inline void TServerSetting::Reset()
341 iAccessPolicy = NULL;
344 inline void TServerSetting::ResetValue()
361 inline void TServerSetting::PushL() const
363 if(IsStr() && iValue.s)
365 CleanupStack::PushL(iValue.s);
369 CleanupStack::PushL(iValue.r);
373 inline void TServerSetting::Pop() const
375 if(IsStr() && iValue.s)
377 CleanupStack::Pop(iValue.s);
381 CleanupStack::Pop(iValue.r);
385 inline void TServerSetting::PopAndDestroy() const
387 if(IsStr() && iValue.s)
389 CleanupStack::PopAndDestroy(iValue.s);
393 CleanupStack::PopAndDestroy(iValue.r);
397 inline TInt TServerSetting::operator==(const TServerSetting& aSetting) const
399 return aSetting.IsInt() && *this==aSetting.iValue.i ||
400 aSetting.IsReal() && aSetting.iValue.r && *this==*(aSetting.iValue.r) ||
401 aSetting.IsStr() && !aSetting.iValue.s && !iValue.s ||
402 aSetting.IsStr() && aSetting.iValue.s && *this==aSetting.iValue.s->Des();
405 inline TInt TServerSetting::operator==(TInt aVal) const
407 return IsInt() && iValue.i==aVal;
410 inline TInt TServerSetting::operator==(const TReal& aVal) const
412 return IsReal() && iValue.r && *(iValue.r)==aVal;
415 inline TInt TServerSetting::operator==(const TDesC8& aVal) const
417 return IsStr() && iValue.s && iValue.s->Des()==aVal;
420 inline TSettingsAccessPolicy* TServerSetting::AccessPolicy() const
422 return iAccessPolicy;
425 inline void TServerSetting::SetAccessPolicy(TSettingsAccessPolicy* aPolicy)
427 iAccessPolicy = aPolicy;
430 //inline const RArray<TSecurityPolicy>& TServerSetting::GetReadAccessPolicy()
431 inline const TSecurityPolicy* TServerSetting::GetReadAccessPolicy() const
433 return iAccessPolicy ? iAccessPolicy->GetReadAccessPolicy() : NULL;
436 //inline const RArray<TSecurityPolicy>& TServerSetting::GetWriteAccessPolicy()
437 inline const TSecurityPolicy* TServerSetting::GetWriteAccessPolicy() const
439 return iAccessPolicy ? iAccessPolicy->GetWriteAccessPolicy() : NULL;
442 inline TBool TServerSetting::HasAccessPolicy() const
444 return NULL != iAccessPolicy;
447 inline void TServerSetting::ExternalizeMetaL(RWriteStream& aStream) const
449 //Historically, CRE file stores type and meta information seperately for
450 //TServerSetting. To save memory, this has been changed for the
451 //in-memory representation but we must store and retrieve the meta in the
452 //same way for compatibility with existing backup and cre files.
453 #ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS
454 aStream << (Meta() | (iMeta & KMetaIndividual)) ;
458 TUint32 type = Type();
459 TUint8 temp = static_cast<TUint8>(type >> 28) ;
463 inline void TServerSetting::ExternalizeL(RWriteStream& aStream) const
466 ExternalizeMetaL(aStream);
471 TInt32 integerValue = iValue.i ;
472 aStream << integerValue ;
477 aStream << *(iValue.r) ;
483 aStream << *(iValue.s) ;
487 aStream << KNullDesC8 ;
492 // Deleted settings should never be in a settings list being made
493 // persistent. Hence, fail assert if attempting to externalize them:
500 inline void TServerSetting::InternalizeMetaL(RReadStream& aStream)
502 //Historically, CRE file stores type and meta information seperately for
503 //TServerSetting. To save memory, this has been changed for the
504 //in-memory representation but we must store and retrieve the meta in the
505 //same way for compatibility with existing backup and cre files.
512 TUint32 type = (static_cast<TUint32>(temp)) << 28;
516 inline void TServerSetting::InternalizeL(RReadStream& aStream)
519 InternalizeMetaL(aStream);
525 aStream >> integerValue ;
526 iValue.i = integerValue ;
530 iValue.r = new(ELeave)TReal;
531 aStream >> *(iValue.r);
536 HBufC8* string = HBufC8::NewL (aStream, KMaxBinaryLength) ;
550 // Deleted settings should never be in a persistent settings list.
551 // Hence, fail assert if attempting to internalize them:
557 inline TBool TServerSetting::IsType(const TInt&) const
559 return Type() == EInt;
562 inline TBool TServerSetting::IsType(const TReal&) const
564 return Type() == EReal;
567 inline TBool TServerSetting::IsType(const TDesC8&) const
569 return Type() == EString;
572 inline TBool TServerSetting::IsType(const TDesC16&) const
574 return Type() == EString;
577 inline TBool TServerSetting::IsInt() const
579 return (iMeta & KMetaType) == EInt;
582 inline TBool TServerSetting::IsReal() const
584 return (iMeta & KMetaType) == EReal;
587 inline TBool TServerSetting::IsStr() const
589 return (iMeta & KMetaType) == EString;
592 inline TBool TServerSetting::IsDeleted() const
594 return (iMeta & KMetaType) == EDeleted;
597 inline TSettingsAccessPolicy::TSettingsAccessPolicy(TSecurityPolicy& aReadPolicy,
598 TSecurityPolicy& aWritePolicy,
599 TUint32 aLowKey, TUint32 aHighKey,
605 iReadAccessPolicy.Set(aReadPolicy.Package());
606 iWriteAccessPolicy.Set(aWritePolicy.Package());
609 inline TSettingsAccessPolicy::TSettingsAccessPolicy(TSecurityPolicy& aReadPolicy,
610 TSecurityPolicy& aWritePolicy,
616 iReadAccessPolicy.Set(aReadPolicy.Package());
617 iWriteAccessPolicy.Set(aWritePolicy.Package());
620 inline TSettingsAccessPolicy::TSettingsAccessPolicy(TUint32 key)
627 inline TSettingsAccessPolicy::TSettingsAccessPolicy()
634 inline TBool TSettingsAccessPolicy::IsInRange(TUint32 aKey) const
636 if((iLowKey<=aKey)&&(aKey<=iHighKey))
638 else if((0 != iKeyMask)&&((iKeyMask&aKey)==iLowKey))
644 inline void TSettingsAccessPolicy::ExternalizeL(RWriteStream& aStream) const
647 aStream << iHighKey ;
648 aStream << iKeyMask ;
650 // Externalize TSecurityPolicy objects as descriptors
651 aStream << (iReadAccessPolicy.Package()) ;
652 aStream << (iWriteAccessPolicy.Package()) ;
655 inline void TSettingsAccessPolicy::InternalizeL(RReadStream& aStream)
658 aStream >> iHighKey ;
659 aStream >> iKeyMask ;
661 // Internalize TSecurityPolicy objects as descriptors and then use them
662 // to set the actual TSecurityPolicy member data.
663 HBufC8* securityPolicyPackage ;
664 securityPolicyPackage = HBufC8::NewLC(aStream, 10000);
665 iReadAccessPolicy.Set(securityPolicyPackage->Des()) ;
666 CleanupStack::PopAndDestroy(securityPolicyPackage) ;
668 securityPolicyPackage = HBufC8::NewLC(aStream, 10000);
669 iWriteAccessPolicy.Set(securityPolicyPackage->Des()) ;
670 CleanupStack::PopAndDestroy(securityPolicyPackage) ;
674 inline TUint32 TSettingsAccessPolicy::LowKey() const
678 inline TUint32 TSettingsAccessPolicy::HighKey() const
682 inline TUint32 TSettingsAccessPolicy::KeyMask() const
689 It is responsility of client to check the key,
690 this simply returns the TSecurityPolicy - it is set to EAlwaysFail if uninitialised
692 inline const TSecurityPolicy* TSettingsAccessPolicy::GetReadAccessPolicy() const
694 return &iReadAccessPolicy;
700 It is responsility of client to check the key,
701 this simply returns the TSecurityPolicy - it is set to EAlwaysFail if uninitialised
703 inline const TSecurityPolicy* TSettingsAccessPolicy::GetWriteAccessPolicy() const
705 return &iWriteAccessPolicy;
708 inline TSettingsDefaultMeta::TSettingsDefaultMeta(TUint32 aValue, TUint32 aLowKey,
709 TUint32 aHighKey, TUint32 aKeyMask)
714 iDefaultMetaData = aValue;
717 inline TSettingsDefaultMeta::TSettingsDefaultMeta()
722 iDefaultMetaData = 0;
725 inline TUint32 TSettingsDefaultMeta::LowKey() const
730 inline TUint32 TSettingsDefaultMeta::HighKey() const
735 inline TUint32 TSettingsDefaultMeta::KeyMask() const
740 inline TBool TSettingsDefaultMeta::IsInRange(TUint32 aKey) const
742 if((iLowKey<=aKey)&&(aKey<=iHighKey))
744 else if((0 != iKeyMask)&&((iKeyMask&aKey)==iLowKey))
750 inline void TSettingsDefaultMeta::ExternalizeL(RWriteStream& aStream) const
753 aStream << iHighKey ;
754 aStream << iKeyMask ;
755 aStream << iDefaultMetaData ;
758 inline void TSettingsDefaultMeta::InternalizeL(RReadStream& aStream)
761 aStream >> iHighKey ;
762 aStream >> iKeyMask ;
763 aStream >> iDefaultMetaData;
766 inline TSettingSingleMeta::TSettingSingleMeta(TUint32 aKey, TUint32 aMeta) : iKey(aKey), iMeta(aMeta)
770 #ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS
771 inline void TServerSetting::SetIndividualMeta(TBool aIndividualSettingMeta)
773 if (aIndividualSettingMeta)
774 iMeta|= KMetaIndividual;
776 iMeta&=~KMetaIndividual;
779 //NEW: Copy the value only from a source, already validate the type
780 inline TInt TServerSetting::CopyTypeValue(const TServerSetting& source)
785 const HBufC8* sourceBuf = source.GetStrValue();
786 HBufC8* buf = sourceBuf ? sourceBuf->Alloc() : NULL;
787 if (sourceBuf && !buf)
795 else if (source.IsReal())
802 TReal* temp = new TReal(source.GetRealValue());
813 SetType(source.Type());
816 iValue.i = source.GetIntValue();