mmsharing/mmshavailability/src/musavaconnectionavailability.cpp
branchRCL_3
changeset 33 bc78a40cd63c
parent 32 73a1feb507fb
--- a/mmsharing/mmshavailability/src/musavaconnectionavailability.cpp	Tue Aug 31 15:12:07 2010 +0300
+++ b/mmsharing/mmshavailability/src/musavaconnectionavailability.cpp	Wed Sep 01 12:31:01 2010 +0100
@@ -30,7 +30,6 @@
 #include "mussettings.h"
 #include "mussettingskeys.h"
 #include "muslogger.h"
-#include "musfactorysettings.h"
 
 #include <e32base.h>
 #include <rconnmon.h>
@@ -127,10 +126,9 @@
 
 // ---------------------------------------------------------------------------
 // From CMusAvaAvailability.
-// Executes for the availability
+// Executes for the availability.
 // ---------------------------------------------------------------------------
 //
-
 void CMusAvaConnectionAvailability::DoExecuteL()
     {
     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::DoExecuteL()" )
@@ -138,23 +136,36 @@
     MUS_LOG( "mus: [MUSAVA]  Check network mode" )
     RMobilePhone::TMobilePhoneNetworkMode networkmode = 
                                         iNetworkModeStatus->PhoneNetworkMode();
-
-	TBool SupportedNetwork = EFalse; 
-	
-	TRAPD( err, SupportedNetwork = MusFactorySettings::IsSupportedL(networkmode) );
-	
-	
-	if ( err != KErrNone )
-		{
-	    MUS_LOG1( "mus: [MUSAVA]  Reading activation setting error:%d", err )
-    	SetState( MMusAvaObserver::EMusActivationError );
-		}
-
-	else if ( SupportedNetwork )
+    if ( networkmode == RMobilePhone::ENetworkModeWcdma||
+         networkmode == RMobilePhone::ENetworkModeTdcdma ||
+         networkmode == RMobilePhone::ENetworkModeCdma95 ||
+         networkmode == RMobilePhone::ENetworkModeCdma2000 )
         {
-        if (  networkmode == RMobilePhone::ENetworkModeGsm )
-        	{
-        	MUS_LOG( "mus: [MUSAVA]  Edge Network Mode allowed in settings " )     
+        status = NetworkRegistrationAndSettingsL();
+    	if ( status == MMusAvaObserver::EMusAvaStatusAvailable )
+	        {
+	        MUS_LOG( "mus: [MUSAVA]  Network available" )
+	        SetState( status );
+	        }
+        else
+            {
+            MUS_LOG1( "mus: [MUSAVA] Activation error: %d", status )
+            SetState( status );
+            }        
+        }
+    else if( networkmode == RMobilePhone::ENetworkModeGsm)
+    	{
+    	TInt edgeDtmSupport = KErrNone;
+        TRAPD( err, edgeDtmSupport = 
+                       MultimediaSharingSettings::EdgeDtmSupportSettingL() );
+        if( err != KErrNone )
+            {
+            MUS_LOG1( "mus: [MUSAVA]  Reading activation setting error:%d", err )
+            SetState( MMusAvaObserver::EMusActivationError );
+            }
+        else if( edgeDtmSupport == MusSettingsKeys::EDtmModeAllowed )
+            { 
+            MUS_LOG( "mus: [MUSAVA]  Edge Network Mode allowed in settings " )     
             if( iConnectionMonitor->ConnectionCount() > 0)       
                 {
                 MUS_LOG( "mus: [MUSAVA]  Atlease one packect connection exists " )     
@@ -164,27 +175,39 @@
                 {
                 MUS_LOG( "mus: [MUSAVA]  No Packet connection exists now." )     
                 SetState( MMusAvaObserver::EMusAvaEdgeDtmStatusUnknown );                    
-                }
-        	}
-
-		 else
-        	{
-       		status = NetworkRegistrationAndSettingsL();
-        	MUS_LOG1( "mus: [MUSAVA] Activation Status: %d", status )
-        	SetState( status );
-        	}
-        }
-	else 
-    	{    	
+                }            
+            }
+        else
+            {
+            MUS_LOG( "mus: [MUSAVA]  Edge Network Mode Not allowed in settings " )     
+            SetState( MMusAvaObserver::EMusAvaNetworkType );    
+            }
+    	}
+    else
+        {
         MUS_LOG( "mus: [MUSAVA] Network not available" )
         SetState( MMusAvaObserver::EMusAvaNetworkType );
-    	}
-
+        }
+    
     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::DoExecuteL()" )
     }
 
 
 // ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TBool CMusAvaConnectionAvailability::OperatorVariant()
+    {
+    MusSettingsKeys::TOperatorVariant variantValue = MusSettingsKeys::EStandard;
+    TRAPD( error, variantValue = 
+                  MultimediaSharingSettings::OperatorVariantSettingL() );
+    
+    return ( variantValue == MusSettingsKeys::EOperatorSpecific && 
+             error == KErrNone );
+     
+    }
+
+// ---------------------------------------------------------------------------
 // From CMusAvaAvailability.
 // Stops execution.
 // ---------------------------------------------------------------------------
@@ -212,8 +235,9 @@
     return MMusAvaObserver::EMusAvaBearerStatus;
     }
 
+
 // ---------------------------------------------------------------------------
-// CMusAvaConnectionAvailability::PhoneNetworkModeStatus  
+// CMusAvaConnectionAvailability::PhoneNetworkModeStatus
 // 
 // ---------------------------------------------------------------------------
 //
@@ -223,28 +247,51 @@
     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
     PhoneNetworkModeStatus()" )
     MUS_LOG1( "mus: [MUSAVA] Mobile Phone Network Status = ", aStatus )
-    
-   	TBool SupportedNetwork = EFalse; 
-	
-	TRAPD( err, SupportedNetwork = MusFactorySettings::IsSupportedL(aStatus) );
-    
-    if ( err != KErrNone || !SupportedNetwork )
-    	{
-        MUS_LOG( "mus: [MUSAVA] Network not available" )
-        SetState( MMusAvaObserver::EMusAvaNetworkType );
-    	}
-	else
-		{
-		MMusAvaObserver::TAvailabilityStatus status = 
-		                   MMusAvaObserver::EMusActivationError;
-        TRAP_IGNORE( status = NetworkRegistrationAndSettingsL() );
-        SetState( status );
-		}    
 
+    switch ( aStatus )
+        {
+        case RMobilePhone::ENetworkModeWcdma :
+        case RMobilePhone::ENetworkModeTdcdma :
+        case RMobilePhone::ENetworkModeCdma95:
+        case RMobilePhone::ENetworkModeCdma2000:
+            {
+            MMusAvaObserver::TAvailabilityStatus status = 
+                                        MMusAvaObserver::EMusActivationError;
+            TRAP_IGNORE( status = NetworkRegistrationAndSettingsL() );
+            SetState( status );
+            break;
+            }
+        case RMobilePhone::ENetworkModeGsm : // For EDGE /DTM support
+            {
+            TInt edgeDtmSupport = 0;
+            TRAPD( err, edgeDtmSupport = 
+                       MultimediaSharingSettings::EdgeDtmSupportSettingL() );
+            if( err != KErrNone )
+                {
+                MUS_LOG1( "mus: [MUSAVA]  Reading activation setting error:%d", err )
+                SetState( MMusAvaObserver::EMusActivationError );
+                }
+            else if( edgeDtmSupport == MusSettingsKeys::EDtmModeAllowed )
+                { 
+                MUS_LOG( "mus: [MUSAVA]  Edge Network supported " )            
+                SetState( MMusAvaObserver::EMusAvaEdgeDtmStatusUnknown );                               
+                }
+            else
+                {
+                SetState( MMusAvaObserver::EMusAvaNetworkType );    
+                }
+            break;
+            }
+         default :
+            {
+            SetState( MMusAvaObserver::EMusAvaNetworkType );
+            }
+        }
     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
     PhoneNetworkModeStatus()" )
     }
 
+
 // ---------------------------------------------------------------------------
 // CMusAvaConnectionAvailability::NetworkRegistrationStatus
 // 
@@ -254,30 +301,18 @@
                     RMobilePhone::TMobilePhoneRegistrationStatus aRegStatus )
     {
     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
-    NetworkRegistrationStatus()" )
+NetworkRegistrationStatus()" )
     MUS_LOG1( "Mobile Phone Network Status = ", aRegStatus )
-
-    MusSettingsKeys::TActivation activation  = MusSettingsKeys::ENever;
-
-    TRAPD( err, activation = MultimediaSharingSettings::ActivationSettingL() );
-    if( err != KErrNone )
+    
+    if( OperatorVariant() &&
+        aRegStatus != RMobilePhone::ERegisteredOnHomeNetwork )
         {
-        MUS_LOG1( "mus: [MUSAVA]  Reading activation setting error:%d", err )
-        SetState( MMusAvaObserver::EMusActivationError );
-        }
-    else
-        {
-        if( activation == MusSettingsKeys::EActiveInHomeNetworks &&
-        aRegStatus != RMobilePhone::ERegisteredOnHomeNetwork )
-            {
-            MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
-            NetworkRegistrationStatus()" )
-            SetState( MMusAvaObserver::EMusAvaRoamingError );
-            }
+        MUS_LOG( "mus: [MUSAVA]  Roaming not allowed" )
+        SetState( MMusAvaObserver::EMusAvaRoamingError );
         }
 
     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
-    NetworkRegistrationStatus()" )
+NetworkRegistrationStatus()" )
     }
 
 
@@ -314,9 +349,9 @@
                     SetState( MMusAvaObserver::EMusAvaConnectionErr );
                     }
                	else
-               		{
-               		iConnectionMonitor->SetConnectionID( connectionId );
-               		}
+                    {
+                    iConnectionMonitor->SetConnectionID( connectionId );
+                    }
                 }
             break;
             }
@@ -327,13 +362,12 @@
                 {
                 SetState( MMusAvaObserver::EMusAvaConnectionErr );
                 }
-            break;
-            }
-
-		 case EConnMonConnectionStatusChange:
+                break;
+                }
+         case EConnMonConnectionStatusChange:
             {
             MUS_LOG( "mus: [MUSAVA] Event type = \
-                EConnMonConnectionStatusChange" )
+EConnMonConnectionStatusChange" )
             const CConnMonConnectionStatusChange* connectionStatusChange
                  = (const CConnMonConnectionStatusChange*)(&aConnMonEvent);
             TInt connStatus = connectionStatusChange->ConnectionStatus();
@@ -357,7 +391,7 @@
                 }
             break;
             }
-		case EConnMonNetworkStatusChange:
+        case EConnMonNetworkStatusChange:
             {
             MUS_LOG( "mus: [MUSAVA] Event type = EConnMonNetworkStatusChange" )
             const CConnMonNetworkStatusChange* networkStatusChange
@@ -368,36 +402,36 @@
             	{
             	if( EConnMonStatusAttached == networkStatus ||
             	    EConnMonStatusActive == networkStatus )
-	            	{
-	            	SetState( NetworkRegistrationAndSettingsL() );
-	            	}
+                    {
+                    SetState( NetworkRegistrationAndSettingsL() );
+                    }
              	else
-	                {
-	                SetState( MMusAvaObserver::EMusAvaConnectionErr );
-	                }
+                    {
+                    SetState( MMusAvaObserver::EMusAvaConnectionErr );
+                    }
             	}
             break;
             }
         case EConnMonNetworkRegistrationChange:
             {
             MUS_LOG( "mus: [MUSAVA] Event type = \
-                EConnMonNetworkRegistrationChange" )
+EConnMonNetworkRegistrationChange" )
             const CConnMonNetworkRegistrationChange* registrationChange
                  = (const CConnMonNetworkRegistrationChange*)(&aConnMonEvent);
             TInt registrationStatus = registrationChange->RegistrationStatus();
             MUS_LOG1( "mus: [MUSAVA] RegistrationStatus =  %d", 
                     registrationStatus )
-           	if( connId == EBearerIdWCDMA || connId == EBearerIdWcdmaCSD )
-           	    {
-           	    if ( ENetworkRegistrationRoaming == registrationStatus )
-                    {
-                    SetState( MMusAvaObserver::EMusAvaRoamingError );
-                    }
-                else
-                    {
-                    SetState( NetworkRegistrationAndSettingsL() );
-                    }
+            if( connId == EBearerIdWCDMA || connId == EBearerIdWcdmaCSD )
+                {
+                if ( ENetworkRegistrationRoaming == registrationStatus )
+                {
+                SetState( MMusAvaObserver::EMusAvaRoamingError );
                 }
+            else
+                {
+                SetState( NetworkRegistrationAndSettingsL() );
+                }
+            }
             break;
             }
         case EConnMonBearerChange:
@@ -433,17 +467,8 @@
 
         case EConnMonPacketDataUnavailable:
             {
-			if( connId == musConnID )
-            	{
-            	SetState( MMusAvaObserver::EMusAvaNetworkType );
-            	MUS_LOG( "mus: [MUSAVA] EConnMonPacketDataUnavailable" )	
-            	}
-            else
-                {
-                MUS_LOG2(
-"mus: [MUSAVA] different connId (%d,%d) ignore EConnMonPacketDataUnavailable",
-                          musConnID, connId )
-                }
+            SetState( MMusAvaObserver::EMusAvaNetworkType );
+            MUS_LOG( "mus: [MUSAVA] EConnMonPacketDataUnavailable" )
             break;
             }
 
@@ -470,48 +495,44 @@
 //    
 MMusAvaObserver::TAvailabilityStatus CMusAvaConnectionAvailability::
     ManualActivationL()
-	{
+    {
     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
-    ManualActivationL()" )
+ManualActivationL()" )
 
-    MusSettingsKeys::TOperatorVariant operatorVariant = 
-    	MusSettingsKeys::EStandard;
-    operatorVariant = MultimediaSharingSettings::OperatorVariantSettingL(); 
-    
-    if( operatorVariant ==  MusSettingsKeys::EOperatorSpecific )
+    if( OperatorVariant() )
     	{
     	MUS_LOG( "mus: [MUSAVA] Operator Specific No Manual query" )
     	MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
-    	NetworkRegistrationAndSettingsL()" )
+NetworkRegistrationAndSettingsL()" )
     	return MMusAvaObserver::EMusActivationError;	
     	}
-  	else
-  		{
-  		if ( iSettings.ManualActivation() == 
-  		    MMusAvaSettings::EActivationAllowed )
-  			{
-  			MUS_LOG( "mus: [MUSAVA] Manual activation allowed" )
-  			MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
-    		ManualActivationL()" )
-  			return MMusAvaObserver::EMusAvaStatusAvailable;	
-  			}
-  		else if ( iSettings.ManualActivation() == 
-  		    MMusAvaSettings::EActivationNotExecuted )
-  			{
-  			MUS_LOG( "mus: [MUSAVA] Manual activation is not executed" )
-  			MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
-    		ManualActivationL()" )
-  			return MMusAvaObserver::EMusAvaManualActivation;	
-  			}
-  		else
-  			{
-  			MUS_LOG( "mus: [MUSAVA] Activation error" )
-  			MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
-    		ManualActivationL()" )
-  			return MMusAvaObserver::EMusActivationError;	
-  			}
-  		}
-	}
+    else
+        {
+        if ( iSettings.ManualActivation() == 
+            MMusAvaSettings::EActivationAllowed )
+            {
+            MUS_LOG( "mus: [MUSAVA] Manual activation allowed" )
+            MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
+ManualActivationL()" )
+            return MMusAvaObserver::EMusAvaStatusAvailable;	
+            }
+        else if ( iSettings.ManualActivation() == 
+            MMusAvaSettings::EActivationNotExecuted )
+            {
+            MUS_LOG( "mus: [MUSAVA] Manual activation is not executed" )
+            MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
+ManualActivationL()" )
+            return MMusAvaObserver::EMusAvaManualActivation;	
+            }
+        else
+            {
+            MUS_LOG( "mus: [MUSAVA] Activation error" )
+            MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
+ManualActivationL()" )
+            return MMusAvaObserver::EMusActivationError;	
+            }
+        }
+    }
 
 // -------------------------------------------------------------------------
 // CMusAvaConnectionAvailability::NetworkRegistrationAndSettingsL
@@ -522,7 +543,7 @@
     NetworkRegistrationAndSettingsL()
     {
     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
-    NetworkRegistrationAndSettingsL()" )
+NetworkRegistrationAndSettingsL()" )
     MUS_LOG( "mus: [MUSAVA]  Check registration network status" )
     MUS_LOG( "mus: [MUSAVA]  Check roaming" )
 
@@ -535,33 +556,35 @@
     MusSettingsKeys::TActivation activation = MusSettingsKeys::EAlwaysActive;
   
     activation = MultimediaSharingSettings::ActivationSettingL();
-
+    TBool operatorVariant = OperatorVariant();
+    
     MUS_LOG1( "mus: [MUSAVA]     ActivationSetting returned %d", 
         activation )
-
-	if ( activation == MusSettingsKeys::EAlwaysActive )
-    	{
-    	status = MMusAvaObserver::EMusAvaStatusAvailable;	
-    	}
-   	else if ( activation == MusSettingsKeys::EActiveInHomeNetworks &&
-        regStatus == RMobilePhone::ERegisteredOnHomeNetwork )
-    	{
-    	status = MMusAvaObserver::EMusAvaStatusAvailable;	
-    	}
-    else if( activation == MusSettingsKeys::EActiveInHomeNetworks &&
-        regStatus == RMobilePhone::ERegisteredRoaming )
-        {
-        status = ManualActivationL();        
-        } 
-    else
+    
+    //VS off
+    if ( activation != MusSettingsKeys::EAlwaysActive )
         {
         status = MMusAvaObserver::EMusActivationError;
         }
+    //VS on
+    else
+        {
+        //roaming
+        if( regStatus == RMobilePhone::ERegisteredRoaming )
+            {
+            status = ManualActivationL();        
+            }
+        //other states including also not registered states, thus
+        //failing of PDP context activation will be detected elsewhere
+        else
+            {
+            status = MMusAvaObserver::EMusAvaStatusAvailable;   
+            }
+        }
     
     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
-            NetworkRegistrationAndSettingsL()" )
+NetworkRegistrationAndSettingsL()" )
     return status;
     }
 
-// End of File