cmmanager/cmmgr/Framework/Src/cmdestinationimpl.cpp
changeset 1 40cb640ef159
parent 0 5a93021fdf25
child 24 c45d4fe2ff0a
--- 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 );
                     }