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();