alwayson_net_plugin/pdpcontextmanager2/src/caosettings.cpp
changeset 4 77415202bfc8
parent 3 f7816ffc66ed
child 73 70ee5458c95d
--- a/alwayson_net_plugin/pdpcontextmanager2/src/caosettings.cpp	Tue Jan 26 12:12:48 2010 +0200
+++ b/alwayson_net_plugin/pdpcontextmanager2/src/caosettings.cpp	Tue Feb 02 00:24:11 2010 +0200
@@ -26,6 +26,8 @@
 #include "logger.h"
 #include "maosettingsobserver.h"
 #include "pdpcontextmanagerinternalcrkeys.h"
+#include "maostatecontext.h"
+#include "maoconnectionmanager.h"
 
 // UNNAMED NAMESPACE FOR LOCAL DEFINITIONS
 namespace
@@ -68,11 +70,12 @@
 // CAOSettings::NewL
 // ---------------------------------------------------------------------------
 //
-CAOSettings* CAOSettings::NewL( MAOSettingsObserver& aObserver )
+CAOSettings* CAOSettings::NewL( MAOSettingsObserver& aObserver,
+                                MAOStateContext&     aStateContext )
     {
     LOG_1( _L("CAOSettings::NewL") );
     
-    CAOSettings* self = new( ELeave ) CAOSettings( aObserver );
+    CAOSettings* self = new( ELeave ) CAOSettings( aObserver, aStateContext );
     
     CleanupStack::PushL( self );
     self->ConstructL();
@@ -104,14 +107,16 @@
 // CAOSettings::CAOSettings
 // ---------------------------------------------------------------------------
 //
-CAOSettings::CAOSettings( MAOSettingsObserver& aObserver ):
+CAOSettings::CAOSettings( MAOSettingsObserver& aObserver,
+                          MAOStateContext&     aStateContext ):
     CActive( CActive::EPriorityStandard ),
     iObserver( aObserver ),
     iIAP( KDefaultIAPUid ),
     iRetryTimerValue( KDefaultRetryInterval ),
     iSupportedInHPLMN( EFalse ),
     iSupportedInVPLMN( EFalse ),
-    iLingerTimerValue( KLingerOff )
+    iLingerTimerValue( KLingerOff ),
+    iStateContext( aStateContext )
     {
     LOG_1( _L("CAOSettings::CAOSettings") );
     
@@ -587,13 +592,30 @@
         TInt value( 0 );
         TInt err = repository->Get( KCurrentCellularDataUsage, value );
 
-        if ( err == KErrNone && value == ECmCellularDataUsageDisabled )
+        if ( err == KErrNone )
             {
-            // Cellular connection is not allowed by user
-            allowed = EFalse;
-            }    
+            if ( value == ECmCellularDataUsageDisabled )
+                {
+                // Cellular connection is not allowed by user
+                allowed = EFalse;
+                }
+            else
+                {
+                MAOConnectionManager::TNetworkType nwType =
+                    iStateContext.ConnectionManager().NetworkType();
+                
+                if ( ( nwType == MAOConnectionManager::EVPLMN ) && 
+                     ( value == ECmCellularDataUsageConfirm ) )
+                    {
+                    // Silent connection is not allowed (will fail)
+                    // in visitor network if user has chosen confirm option.
+                    allowed = EFalse;
+                    }
+                }
+            }
         }
-
+    LOG_2( _L("IsCellularAllowedByUser(): %d"), allowed );
+    
     delete repository;
     return allowed;
     }