diff -r 5a93021fdf25 -r 40cb640ef159 cmmanager/cmmgr/Framework/Src/cmdestinationimpl.cpp --- a/cmmanager/cmmgr/Framework/Src/cmdestinationimpl.cpp Thu Dec 17 08:55:21 2009 +0200 +++ b/cmmanager/cmmgr/Framework/Src/cmdestinationimpl.cpp Thu Jan 07 12:56:54 2010 +0200 @@ -2584,6 +2584,12 @@ case ESnapMetadataDestinationIsLocalised: { + // Check that aValue is within valid range. + if ( aValue > ELocalisedDestIntranet ) + { + User::Leave( KErrArgument ); + } + TUint32 oldVal = TUint32(iData->iMetaDataRec->iMetadata) & ESnapMetadataInternet; if ( aValue != ENotLocalisedDest ) @@ -2638,10 +2644,26 @@ case ESnapMetadataPurpose: { + // Check that aValue is within valid range. + if ( aValue > ESnapPurposeIntranet ) + { + User::Leave( KErrArgument ); + } + + // Check if destination with the given purpose already + // exists + CheckIfPurposeExistL( aValue ); + // ESnapPurposeInternet and ESnapPurposeMMS need special // handling switch( aValue ) { + case ESnapPurposeUnknown: + { + // This also clears ESnapMetadataInternet + SetMetadataL( ESnapMetadataDestinationIsLocalised, ENotLocalisedDest ); + break; + } case ESnapPurposeInternet: { // This sets ESnapMetadataInternet and @@ -2659,7 +2681,8 @@ { SetMetadataL( ESnapMetadataDestinationIsLocalised, ELocalisedDestMMS ); - SetMetadataL( ESnapMetadataHiddenAgent, 1 ); + iData->iMetaDataRec->iMetadata = + ESnapMetadataHiddenAgent | iData->iMetaDataRec->iMetadata; } break; case ESnapPurposeIntranet: @@ -2672,10 +2695,6 @@ break; } - // Check if destination with the given purpose already - // exists - CheckIfPurposeExistL( aValue ); - TUint32 value = aValue << 8; // reset the purpose bit iData->iMetaDataRec->iMetadata = ~ESnapMetadataPurpose & iData->iMetaDataRec->iMetadata; @@ -2701,11 +2720,14 @@ case ESnapMetadataHiddenAgent: { + TUint32 internet = iData->iMetaDataRec->iMetadata & ESnapMetadataInternet; + TUint32 internetLocal = ( iData->iMetaDataRec->iMetadata & ESnapMetadataDestinationIsLocalised ) >> 4; + TUint32 internetPurpose = ( iData->iMetaDataRec->iMetadata & ESnapMetadataPurpose ) >> 8; if( aValue ) { - if ( iData->iMetaDataRec->iMetadata & ESnapMetadataInternet - || ( ( iData->iMetaDataRec->iMetadata >> 4 ) & ELocalisedDestInternet ) - || ( ( iData->iMetaDataRec->iMetadata >> 8 ) & ESnapPurposeInternet ) ) + if ( internet + || ( internetLocal == ELocalisedDestInternet ) + || ( internetPurpose == ESnapPurposeInternet ) ) { User::Leave( KErrArgument ); }