mmsharing/mmshavailability/src/musavaconnectionavailability.cpp
changeset 15 ccd8e69b5392
parent 2 b31261fd4e04
child 20 e8be2c2e049d
child 22 496ad160a278
equal deleted inserted replaced
2:b31261fd4e04 15:ccd8e69b5392
     1 /*
       
     2 * Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   Provide interface for the client requestin availability class.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include "musavaconnectionavailability.h"
       
    21 #include "musavaavailabilityobserver.h"
       
    22 #include "musavasettingsimp.h"
       
    23 #include "musavaobserver.h"
       
    24 #include "musavaavailability.h"
       
    25 #include "musavasharedobject.h"
       
    26 #include "musavaconnectionmonitor.h"
       
    27 #include "musavanetworkregistrationstatus.h"
       
    28 #include "musavanetworkmodestatus.h"
       
    29 #include "musavasip.h"
       
    30 #include "mussettings.h"
       
    31 #include "mussettingskeys.h"
       
    32 #include "muslogger.h"
       
    33 
       
    34 #include <e32base.h>
       
    35 #include <rconnmon.h>
       
    36 #include <e32cmn.h>
       
    37 #include <etelmm.h>
       
    38 #include <nifvar.h>
       
    39 
       
    40 
       
    41 // --------------------------------------------------------------------------
       
    42 // Symbian two-phase constructor
       
    43 // --------------------------------------------------------------------------
       
    44 //
       
    45 CMusAvaConnectionAvailability* CMusAvaConnectionAvailability::NewL(
       
    46     MMusAvaAvailabilityObserver& aObserver,
       
    47     CMusAvaSettingsImp& aSettings  )
       
    48     {
       
    49     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::NewL()" )
       
    50     CMusAvaConnectionAvailability* self =
       
    51         CMusAvaConnectionAvailability::NewLC(
       
    52             aObserver, aSettings );
       
    53     CleanupStack::Pop( self );
       
    54     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::NewL()" )
       
    55     return self;
       
    56     }
       
    57 
       
    58 
       
    59 // -------------------------------------------------------------------------
       
    60 //  Two-phased constructor.
       
    61 // -------------------------------------------------------------------------
       
    62 //
       
    63 CMusAvaConnectionAvailability* CMusAvaConnectionAvailability::NewLC(
       
    64     MMusAvaAvailabilityObserver& aObserver, 
       
    65     CMusAvaSettingsImp& aSettings  )
       
    66     {
       
    67     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::NewLC()" )
       
    68     CMusAvaConnectionAvailability* self =
       
    69         new( ELeave ) CMusAvaConnectionAvailability(
       
    70             aObserver, aSettings );
       
    71     CleanupStack::PushL( self );
       
    72     self->ConstructL();
       
    73     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::NewLC()" )
       
    74     return self;
       
    75     }
       
    76 
       
    77 
       
    78 // -------------------------------------------------------------------------
       
    79 //  Destructor.
       
    80 // -------------------------------------------------------------------------
       
    81 //
       
    82 CMusAvaConnectionAvailability::~CMusAvaConnectionAvailability()
       
    83     {
       
    84     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
       
    85         ~CMusAvaConnectionAvailability()" )
       
    86     if( iSharedObj )
       
    87         {
       
    88         iSharedObj->DeleteSingleton();
       
    89         }
       
    90     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
    91         ~CMusAvaConnectionAvailability()" )
       
    92     }
       
    93 
       
    94 
       
    95 // -------------------------------------------------------------------------
       
    96 //  Constructor.
       
    97 // -------------------------------------------------------------------------
       
    98 //
       
    99 CMusAvaConnectionAvailability::CMusAvaConnectionAvailability(
       
   100     MMusAvaAvailabilityObserver& aObserver, 
       
   101     CMusAvaSettingsImp& aSettings  )
       
   102     :CMusAvaAvailability( aObserver ),
       
   103     iSettings( aSettings )
       
   104     {
       
   105     }
       
   106 
       
   107 
       
   108 // ---------------------------------------------------------------------------
       
   109 // Symbian 2nd phase constructor can leave.
       
   110 // ---------------------------------------------------------------------------
       
   111 //
       
   112 void CMusAvaConnectionAvailability::ConstructL()
       
   113     {
       
   114     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::ConstructL()" )
       
   115     iSharedObj = CMusAvaSharedObject::GetSingletonL();
       
   116     iNetworkRegistrationStatus =  &iSharedObj->MusAvaTelephonyStatus();
       
   117     iNetworkModeStatus = &iSharedObj->NetworkModeStatus();
       
   118     iConnectionMonitor = &iSharedObj->ConnectionMonitor();
       
   119     iNetworkRegistrationStatus->AddAdapterL( *this );
       
   120 	iNetworkModeStatus->AddAdapterL( *this );
       
   121 	iConnectionMonitor->AddAdapterL( *this );
       
   122 	iConnectionMonitor->NotifyEventL();
       
   123     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::ConstructL()" )
       
   124     }
       
   125 
       
   126 
       
   127 // ---------------------------------------------------------------------------
       
   128 // From CMusAvaAvailability.
       
   129 // Executes for the availability.
       
   130 // ---------------------------------------------------------------------------
       
   131 //
       
   132 void CMusAvaConnectionAvailability::DoExecuteL()
       
   133     {
       
   134     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::DoExecuteL()" )
       
   135 	MMusAvaObserver::TAvailabilityStatus status; 
       
   136     MUS_LOG( "mus: [MUSAVA]  Check network mode" )
       
   137     RMobilePhone::TMobilePhoneNetworkMode networkmode = 
       
   138                                         iNetworkModeStatus->PhoneNetworkMode();
       
   139     if ( networkmode == RMobilePhone::ENetworkModeWcdma||
       
   140          networkmode == RMobilePhone::ENetworkModeTdcdma ||
       
   141          networkmode == RMobilePhone::ENetworkModeCdma95 ||
       
   142          networkmode == RMobilePhone::ENetworkModeCdma2000 )
       
   143         {
       
   144         status = NetworkRegistrationAndSettingsL();
       
   145     	if ( status == MMusAvaObserver::EMusAvaStatusAvailable )
       
   146 	        {
       
   147 	        MUS_LOG( "mus: [MUSAVA]  Network available" )
       
   148 	        SetState( status );
       
   149 	        }
       
   150         else
       
   151             {
       
   152             MUS_LOG1( "mus: [MUSAVA] Activation error: %d", status )
       
   153             SetState( status );
       
   154             }        
       
   155         }
       
   156     else if( networkmode == RMobilePhone::ENetworkModeGsm)
       
   157     	{
       
   158     	TInt edgeDtmSupport = KErrNone;
       
   159         TRAPD( err, edgeDtmSupport = 
       
   160                        MultimediaSharingSettings::EdgeDtmSupportSettingL() );
       
   161         if( err != KErrNone )
       
   162             {
       
   163             MUS_LOG1( "mus: [MUSAVA]  Reading activation setting error:%d", err )
       
   164             SetState( MMusAvaObserver::EMusActivationError );
       
   165             }
       
   166         else if( edgeDtmSupport == MusSettingsKeys::EDtmModeAllowed )
       
   167             { 
       
   168             MUS_LOG( "mus: [MUSAVA]  Edge Network Mode allowed in settings " )     
       
   169             if( iConnectionMonitor->ConnectionCount() > 0)       
       
   170                 {
       
   171                 MUS_LOG( "mus: [MUSAVA]  Atlease one packect connection exists " )     
       
   172                 SetState( NetworkRegistrationAndSettingsL() );  
       
   173                 }
       
   174             else
       
   175                 {
       
   176                 MUS_LOG( "mus: [MUSAVA]  No Packet connection exists now." )     
       
   177                 SetState( MMusAvaObserver::EMusAvaEdgeDtmStatusUnknown );                    
       
   178                 }            
       
   179             }
       
   180         else
       
   181             {
       
   182             MUS_LOG( "mus: [MUSAVA]  Edge Network Mode Not allowed in settings " )     
       
   183             SetState( MMusAvaObserver::EMusAvaNetworkType );    
       
   184             }
       
   185     	}
       
   186     else
       
   187         {
       
   188         MUS_LOG( "mus: [MUSAVA] Network not available" )
       
   189         SetState( MMusAvaObserver::EMusAvaNetworkType );
       
   190         }
       
   191     
       
   192     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::DoExecuteL()" )
       
   193     }
       
   194 
       
   195 
       
   196 // ---------------------------------------------------------------------------
       
   197 // ---------------------------------------------------------------------------
       
   198 //
       
   199 TBool CMusAvaConnectionAvailability::OperatorVariant()
       
   200     {
       
   201     MusSettingsKeys::TOperatorVariant variantValue = MusSettingsKeys::EStandard;
       
   202     TRAPD( error, variantValue = 
       
   203                   MultimediaSharingSettings::OperatorVariantSettingL() );
       
   204     
       
   205     return ( variantValue == MusSettingsKeys::EOperatorSpecific && 
       
   206              error == KErrNone );
       
   207      
       
   208     }
       
   209 
       
   210 // ---------------------------------------------------------------------------
       
   211 // From CMusAvaAvailability.
       
   212 // Stops execution.
       
   213 // ---------------------------------------------------------------------------
       
   214 //
       
   215 void CMusAvaConnectionAvailability::Stop()
       
   216     {
       
   217     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::Stop()" )
       
   218     
       
   219     iNetworkRegistrationStatus->RemoveAdapter( *this );
       
   220     iNetworkModeStatus->RemoveAdapter( *this );
       
   221     iConnectionMonitor->RemoveAdapter( *this );
       
   222     
       
   223     SetState( MMusAvaObserver::EMusAvaStatusNotExecuted );
       
   224     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::Stop()" )
       
   225     }
       
   226 
       
   227 
       
   228 // ---------------------------------------------------------------------------
       
   229 // From CMusAvaAvailability.
       
   230 // Returns name of *this* availability module.
       
   231 // ---------------------------------------------------------------------------
       
   232 //
       
   233 MMusAvaObserver::TAvailabilityName CMusAvaConnectionAvailability::Name()
       
   234     {
       
   235     return MMusAvaObserver::EMusAvaBearerStatus;
       
   236     }
       
   237 
       
   238 
       
   239 // ---------------------------------------------------------------------------
       
   240 // CMusAvaConnectionAvailability::PhoneNetworkModeStatus
       
   241 // 
       
   242 // ---------------------------------------------------------------------------
       
   243 //
       
   244 void CMusAvaConnectionAvailability::PhoneNetworkModeStatus(
       
   245                             RMobilePhone::TMobilePhoneNetworkMode aStatus )
       
   246     {
       
   247     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
       
   248     PhoneNetworkModeStatus()" )
       
   249     MUS_LOG1( "mus: [MUSAVA] Mobile Phone Network Status = ", aStatus )
       
   250 
       
   251     switch ( aStatus )
       
   252         {
       
   253         case RMobilePhone::ENetworkModeWcdma :
       
   254         case RMobilePhone::ENetworkModeTdcdma :
       
   255         case RMobilePhone::ENetworkModeCdma95:
       
   256         case RMobilePhone::ENetworkModeCdma2000:
       
   257             {
       
   258             MMusAvaObserver::TAvailabilityStatus status = 
       
   259                                         MMusAvaObserver::EMusActivationError;
       
   260             TRAP_IGNORE( status = NetworkRegistrationAndSettingsL() );
       
   261             SetState( status );
       
   262             break;
       
   263             }
       
   264         case RMobilePhone::ENetworkModeGsm : // For EDGE /DTM support
       
   265             {
       
   266             TInt edgeDtmSupport = 0;
       
   267             TRAPD( err, edgeDtmSupport = 
       
   268                        MultimediaSharingSettings::EdgeDtmSupportSettingL() );
       
   269             if( err != KErrNone )
       
   270                 {
       
   271                 MUS_LOG1( "mus: [MUSAVA]  Reading activation setting error:%d", err )
       
   272                 SetState( MMusAvaObserver::EMusActivationError );
       
   273                 }
       
   274             else if( edgeDtmSupport == MusSettingsKeys::EDtmModeAllowed )
       
   275                 { 
       
   276                 MUS_LOG( "mus: [MUSAVA]  Edge Network supported " )            
       
   277                 SetState( MMusAvaObserver::EMusAvaEdgeDtmStatusUnknown );                               
       
   278                 }
       
   279             else
       
   280                 {
       
   281                 SetState( MMusAvaObserver::EMusAvaNetworkType );    
       
   282                 }
       
   283             break;
       
   284             }
       
   285          default :
       
   286             {
       
   287             SetState( MMusAvaObserver::EMusAvaNetworkType );
       
   288             }
       
   289         }
       
   290     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   291     PhoneNetworkModeStatus()" )
       
   292     }
       
   293 
       
   294 
       
   295 // ---------------------------------------------------------------------------
       
   296 // CMusAvaConnectionAvailability::NetworkRegistrationStatus
       
   297 // 
       
   298 // ---------------------------------------------------------------------------
       
   299 //
       
   300 void CMusAvaConnectionAvailability::NetworkRegistrationStatus(
       
   301                     RMobilePhone::TMobilePhoneRegistrationStatus aRegStatus )
       
   302     {
       
   303     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
       
   304 NetworkRegistrationStatus()" )
       
   305     MUS_LOG1( "Mobile Phone Network Status = ", aRegStatus )
       
   306     
       
   307     if( OperatorVariant() &&
       
   308         aRegStatus != RMobilePhone::ERegisteredOnHomeNetwork )
       
   309         {
       
   310         MUS_LOG( "mus: [MUSAVA]  Roaming not allowed" )
       
   311         SetState( MMusAvaObserver::EMusAvaRoamingError );
       
   312         }
       
   313 
       
   314     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   315 NetworkRegistrationStatus()" )
       
   316     }
       
   317 
       
   318 
       
   319 // ---------------------------------------------------------------------------
       
   320 // CMusAvaConnectionAvailability::EventL
       
   321 //
       
   322 // ---------------------------------------------------------------------------
       
   323 //
       
   324 void CMusAvaConnectionAvailability::EventL(
       
   325                                         const CConnMonEventBase& aConnMonEvent)
       
   326     {
       
   327     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::EventL()" )
       
   328     TInt connectionId = 0;
       
   329     TInt event = aConnMonEvent.EventType();
       
   330     TUint connId = aConnMonEvent.ConnectionId();
       
   331     CMusAvaConnectionMonitor& connectionMonitor = 
       
   332                                             iSharedObj->ConnectionMonitor();
       
   333     TUint musConnID = connectionMonitor.CreatedConnectionID();
       
   334     MUS_LOG1( "mus: [MUSAVA] Current connection ID %d = ", musConnID )
       
   335     MUS_LOG1( "mus: [MUSAVA] Event connection ID %d = ", connId )
       
   336 
       
   337     switch ( event )
       
   338         {
       
   339         case EConnMonCreateConnection:
       
   340             {
       
   341             MUS_LOG( "mus: [MUSAVA] Event type = EConnMonCreateConnection" )
       
   342             if( musConnID == 0 )
       
   343                 {
       
   344                 MUS_LOG( "mus: [MUSAVA] Store Connection ID" )
       
   345                 TRAPD( err, connectionId = 
       
   346                                         iConnectionMonitor->ConnectionIDL() );
       
   347                 if ( err == KErrNotFound )
       
   348                     {
       
   349                     SetState( MMusAvaObserver::EMusAvaConnectionErr );
       
   350                     }
       
   351                	else
       
   352                     {
       
   353                     iConnectionMonitor->SetConnectionID( connectionId );
       
   354                     }
       
   355                 }
       
   356             break;
       
   357             }
       
   358         case EConnMonDeleteConnection:
       
   359             {
       
   360             MUS_LOG( "mus: [MUSAVA] Event type = EConnMonDeleteConnection" )
       
   361             if( connId == musConnID )
       
   362                 {
       
   363                 SetState( MMusAvaObserver::EMusAvaConnectionErr );
       
   364                 }
       
   365                 break;
       
   366                 }
       
   367          case EConnMonConnectionStatusChange:
       
   368             {
       
   369             MUS_LOG( "mus: [MUSAVA] Event type = \
       
   370 EConnMonConnectionStatusChange" )
       
   371             const CConnMonConnectionStatusChange* connectionStatusChange
       
   372                  = (const CConnMonConnectionStatusChange*)(&aConnMonEvent);
       
   373             TInt connStatus = connectionStatusChange->ConnectionStatus();
       
   374             MUS_LOG1( "mus: [MUSAVA] ConnectionStatus =  %d", connStatus )
       
   375             if ( connId == musConnID )
       
   376                 {
       
   377                 if( connStatus == KConnectionFailure ||
       
   378                     connStatus == KConnectionClosed ||
       
   379                     connStatus == KDataTransferTemporarilyBlocked ||
       
   380                     connStatus == KLinkLayerClosed ||
       
   381                     connStatus == KPsdSuspended ||
       
   382                     connStatus == KPsdFinishedDeactivation )
       
   383                     {
       
   384                     SetState( MMusAvaObserver::EMusAvaConnectionErr );
       
   385                     }
       
   386                 if( connStatus == KConnectionOpen ||
       
   387                     connStatus == KLinkLayerOpen )
       
   388                     {
       
   389                     SetState( NetworkRegistrationAndSettingsL() );
       
   390                     }
       
   391                 }
       
   392             break;
       
   393             }
       
   394         case EConnMonNetworkStatusChange:
       
   395             {
       
   396             MUS_LOG( "mus: [MUSAVA] Event type = EConnMonNetworkStatusChange" )
       
   397             const CConnMonNetworkStatusChange* networkStatusChange
       
   398                  = (const CConnMonNetworkStatusChange*)(&aConnMonEvent);
       
   399 			TInt networkStatus = networkStatusChange->NetworkStatus();
       
   400             MUS_LOG1( "mus: [MUSAVA] NetworkStatus =  %d", networkStatus )
       
   401             if( connId == EBearerIdWCDMA || connId == EBearerIdWcdmaCSD )
       
   402             	{
       
   403             	if( EConnMonStatusAttached == networkStatus ||
       
   404             	    EConnMonStatusActive == networkStatus )
       
   405                     {
       
   406                     SetState( NetworkRegistrationAndSettingsL() );
       
   407                     }
       
   408              	else
       
   409                     {
       
   410                     SetState( MMusAvaObserver::EMusAvaConnectionErr );
       
   411                     }
       
   412             	}
       
   413             break;
       
   414             }
       
   415         case EConnMonNetworkRegistrationChange:
       
   416             {
       
   417             MUS_LOG( "mus: [MUSAVA] Event type = \
       
   418 EConnMonNetworkRegistrationChange" )
       
   419             const CConnMonNetworkRegistrationChange* registrationChange
       
   420                  = (const CConnMonNetworkRegistrationChange*)(&aConnMonEvent);
       
   421             TInt registrationStatus = registrationChange->RegistrationStatus();
       
   422             MUS_LOG1( "mus: [MUSAVA] RegistrationStatus =  %d", 
       
   423                     registrationStatus )
       
   424             if( connId == EBearerIdWCDMA || connId == EBearerIdWcdmaCSD )
       
   425                 {
       
   426                 if ( ENetworkRegistrationRoaming == registrationStatus )
       
   427                 {
       
   428                 SetState( MMusAvaObserver::EMusAvaRoamingError );
       
   429                 }
       
   430             else
       
   431                 {
       
   432                 SetState( NetworkRegistrationAndSettingsL() );
       
   433                 }
       
   434             }
       
   435             break;
       
   436             }
       
   437         case EConnMonBearerChange:
       
   438             {
       
   439             MUS_LOG( "mus: [MUSAVA] Event type = EConnMonBearerChange" )
       
   440             MUS_LOG1( "mus: [MUSAVA] Bearer =  %d",connId )
       
   441             if( connId == EBearerIdGPRS ||
       
   442                 connId == EBearerIdWCDMA || 
       
   443                 connId == EBearerIdWcdmaCSD )
       
   444                 {
       
   445                 SetState( NetworkRegistrationAndSettingsL() );
       
   446                 }
       
   447             else
       
   448                 {
       
   449                 SetState( MMusAvaObserver::EMusAvaNetworkType );
       
   450                 }
       
   451             break;
       
   452             }
       
   453 
       
   454         case EConnMonPacketDataAvailable:
       
   455             {
       
   456             MUS_LOG( "mus: [MUSAVA] EConnMonPacketDataAvailable" )
       
   457             /* This is for EDGE /DTM support , This is the only place we can be 
       
   458                sure that packet data available along with CS call. Here we have to
       
   459                check again for activation settings and based on that availability 
       
   460                state has to be set
       
   461             */
       
   462             MMusAvaObserver::TAvailabilityStatus status
       
   463                                                 = NetworkRegistrationAndSettingsL();
       
   464             SetState( status );            
       
   465             break;
       
   466             }
       
   467 
       
   468         case EConnMonPacketDataUnavailable:
       
   469             {
       
   470             SetState( MMusAvaObserver::EMusAvaNetworkType );
       
   471             MUS_LOG( "mus: [MUSAVA] EConnMonPacketDataUnavailable" )
       
   472             break;
       
   473             }
       
   474 
       
   475         case EConnMonBearerInfoChange:
       
   476             {
       
   477             MUS_LOG( "mus: [MUSAVA] EConnMonBearerInfoChange" )           
       
   478             break;
       
   479             }
       
   480         default :
       
   481             {
       
   482             MUS_LOG( "mus: [MUSAVA] Event type is not implemented" )
       
   483             MUS_LOG1( "mus: [MUSAVA] Event type %d = ", event )
       
   484             break;
       
   485             }
       
   486         }
       
   487 
       
   488     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::EventL()" )
       
   489     }
       
   490 
       
   491 // -------------------------------------------------------------------------
       
   492 // CMusAvaConnectionAvailability::MusAvaManualActivation
       
   493 //
       
   494 // -------------------------------------------------------------------------
       
   495 //    
       
   496 MMusAvaObserver::TAvailabilityStatus CMusAvaConnectionAvailability::
       
   497     ManualActivationL()
       
   498     {
       
   499     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
       
   500 ManualActivationL()" )
       
   501 
       
   502     if( OperatorVariant() )
       
   503     	{
       
   504     	MUS_LOG( "mus: [MUSAVA] Operator Specific No Manual query" )
       
   505     	MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   506 NetworkRegistrationAndSettingsL()" )
       
   507     	return MMusAvaObserver::EMusActivationError;	
       
   508     	}
       
   509     else
       
   510         {
       
   511         if ( iSettings.ManualActivation() == 
       
   512             MMusAvaSettings::EActivationAllowed )
       
   513             {
       
   514             MUS_LOG( "mus: [MUSAVA] Manual activation allowed" )
       
   515             MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   516 ManualActivationL()" )
       
   517             return MMusAvaObserver::EMusAvaStatusAvailable;	
       
   518             }
       
   519         else if ( iSettings.ManualActivation() == 
       
   520             MMusAvaSettings::EActivationNotExecuted )
       
   521             {
       
   522             MUS_LOG( "mus: [MUSAVA] Manual activation is not executed" )
       
   523             MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   524 ManualActivationL()" )
       
   525             return MMusAvaObserver::EMusAvaManualActivation;	
       
   526             }
       
   527         else
       
   528             {
       
   529             MUS_LOG( "mus: [MUSAVA] Activation error" )
       
   530             MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   531 ManualActivationL()" )
       
   532             return MMusAvaObserver::EMusActivationError;	
       
   533             }
       
   534         }
       
   535     }
       
   536 
       
   537 // -------------------------------------------------------------------------
       
   538 // CMusAvaConnectionAvailability::NetworkRegistrationAndSettingsL
       
   539 //
       
   540 // -------------------------------------------------------------------------
       
   541 //
       
   542 MMusAvaObserver::TAvailabilityStatus CMusAvaConnectionAvailability::
       
   543     NetworkRegistrationAndSettingsL()
       
   544     {
       
   545     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaConnectionAvailability::\
       
   546 NetworkRegistrationAndSettingsL()" )
       
   547     MUS_LOG( "mus: [MUSAVA]  Check registration network status" )
       
   548     MUS_LOG( "mus: [MUSAVA]  Check roaming" )
       
   549 
       
   550     RMobilePhone::TMobilePhoneRegistrationStatus regStatus;
       
   551     iNetworkRegistrationStatus->NetworkRegistration( regStatus );
       
   552 
       
   553     MUS_LOG1( "mus: [MUSAVA]     NetworkRegistration returned %d", regStatus )
       
   554 
       
   555     MMusAvaObserver::TAvailabilityStatus status;
       
   556     MusSettingsKeys::TActivation activation = MusSettingsKeys::EAlwaysActive;
       
   557   
       
   558     activation = MultimediaSharingSettings::ActivationSettingL();
       
   559     TBool operatorVariant = OperatorVariant();
       
   560     
       
   561     MUS_LOG1( "mus: [MUSAVA]     ActivationSetting returned %d", 
       
   562         activation )
       
   563     
       
   564     //VS off
       
   565     if ( activation != MusSettingsKeys::EAlwaysActive )
       
   566         {
       
   567         status = MMusAvaObserver::EMusActivationError;
       
   568         }
       
   569     //VS on
       
   570     else
       
   571         {
       
   572         //roaming
       
   573         if( regStatus == RMobilePhone::ERegisteredRoaming )
       
   574             {
       
   575             status = ManualActivationL();        
       
   576             }
       
   577         //other states including also not registered states, thus
       
   578         //failing of PDP context activation will be detected elsewhere
       
   579         else
       
   580             {
       
   581             status = MMusAvaObserver::EMusAvaStatusAvailable;   
       
   582             }
       
   583         }
       
   584     
       
   585     MUS_LOG( "mus: [MUSAVA]  <- CMusAvaConnectionAvailability::\
       
   586 NetworkRegistrationAndSettingsL()" )
       
   587     return status;
       
   588     }
       
   589 
       
   590