diff -r b31261fd4e04 -r ccd8e69b5392 mmsharing/mmshavailability/src/musavaconnectionavailability.cpp --- a/mmsharing/mmshavailability/src/musavaconnectionavailability.cpp Tue Feb 02 00:09:07 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,590 +0,0 @@ -/* -* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Provide interface for the client requestin availability class. -* -*/ - - - -#include "musavaconnectionavailability.h" -#include "musavaavailabilityobserver.h" -#include "musavasettingsimp.h" -#include "musavaobserver.h" -#include "musavaavailability.h" -#include "musavasharedobject.h" -#include "musavaconnectionmonitor.h" -#include "musavanetworkregistrationstatus.h" -#include "musavanetworkmodestatus.h" -#include "musavasip.h" -#include "mussettings.h" -#include "mussettingskeys.h" -#include "muslogger.h" - -#include -#include -#include -#include -#include - - -// -------------------------------------------------------------------------- -// Symbian two-phase constructor -// -------------------------------------------------------------------------- -// -CMusAvaConnectionAvailability* CMusAvaConnectionAvailability::NewL( - MMusAvaAvailabilityObserver& aObserver, - CMusAvaSettingsImp& aSettings ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::NewL()" ) - CMusAvaConnectionAvailability* self = - CMusAvaConnectionAvailability::NewLC( - aObserver, aSettings ); - CleanupStack::Pop( self ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::NewL()" ) - return self; - } - - -// ------------------------------------------------------------------------- -// Two-phased constructor. -// ------------------------------------------------------------------------- -// -CMusAvaConnectionAvailability* CMusAvaConnectionAvailability::NewLC( - MMusAvaAvailabilityObserver& aObserver, - CMusAvaSettingsImp& aSettings ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::NewLC()" ) - CMusAvaConnectionAvailability* self = - new( ELeave ) CMusAvaConnectionAvailability( - aObserver, aSettings ); - CleanupStack::PushL( self ); - self->ConstructL(); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::NewLC()" ) - return self; - } - - -// ------------------------------------------------------------------------- -// Destructor. -// ------------------------------------------------------------------------- -// -CMusAvaConnectionAvailability::~CMusAvaConnectionAvailability() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::\ - ~CMusAvaConnectionAvailability()" ) - if( iSharedObj ) - { - iSharedObj->DeleteSingleton(); - } - MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ - ~CMusAvaConnectionAvailability()" ) - } - - -// ------------------------------------------------------------------------- -// Constructor. -// ------------------------------------------------------------------------- -// -CMusAvaConnectionAvailability::CMusAvaConnectionAvailability( - MMusAvaAvailabilityObserver& aObserver, - CMusAvaSettingsImp& aSettings ) - :CMusAvaAvailability( aObserver ), - iSettings( aSettings ) - { - } - - -// --------------------------------------------------------------------------- -// Symbian 2nd phase constructor can leave. -// --------------------------------------------------------------------------- -// -void CMusAvaConnectionAvailability::ConstructL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::ConstructL()" ) - iSharedObj = CMusAvaSharedObject::GetSingletonL(); - iNetworkRegistrationStatus = &iSharedObj->MusAvaTelephonyStatus(); - iNetworkModeStatus = &iSharedObj->NetworkModeStatus(); - iConnectionMonitor = &iSharedObj->ConnectionMonitor(); - iNetworkRegistrationStatus->AddAdapterL( *this ); - iNetworkModeStatus->AddAdapterL( *this ); - iConnectionMonitor->AddAdapterL( *this ); - iConnectionMonitor->NotifyEventL(); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::ConstructL()" ) - } - - -// --------------------------------------------------------------------------- -// From CMusAvaAvailability. -// Executes for the availability. -// --------------------------------------------------------------------------- -// -void CMusAvaConnectionAvailability::DoExecuteL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::DoExecuteL()" ) - MMusAvaObserver::TAvailabilityStatus status; - MUS_LOG( "mus: [MUSAVA] Check network mode" ) - RMobilePhone::TMobilePhoneNetworkMode networkmode = - iNetworkModeStatus->PhoneNetworkMode(); - if ( networkmode == RMobilePhone::ENetworkModeWcdma|| - networkmode == RMobilePhone::ENetworkModeTdcdma || - networkmode == RMobilePhone::ENetworkModeCdma95 || - networkmode == RMobilePhone::ENetworkModeCdma2000 ) - { - 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 " ) - SetState( NetworkRegistrationAndSettingsL() ); - } - else - { - MUS_LOG( "mus: [MUSAVA] No Packet connection exists now." ) - SetState( MMusAvaObserver::EMusAvaEdgeDtmStatusUnknown ); - } - } - 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. -// --------------------------------------------------------------------------- -// -void CMusAvaConnectionAvailability::Stop() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::Stop()" ) - - iNetworkRegistrationStatus->RemoveAdapter( *this ); - iNetworkModeStatus->RemoveAdapter( *this ); - iConnectionMonitor->RemoveAdapter( *this ); - - SetState( MMusAvaObserver::EMusAvaStatusNotExecuted ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::Stop()" ) - } - - -// --------------------------------------------------------------------------- -// From CMusAvaAvailability. -// Returns name of *this* availability module. -// --------------------------------------------------------------------------- -// -MMusAvaObserver::TAvailabilityName CMusAvaConnectionAvailability::Name() - { - return MMusAvaObserver::EMusAvaBearerStatus; - } - - -// --------------------------------------------------------------------------- -// CMusAvaConnectionAvailability::PhoneNetworkModeStatus -// -// --------------------------------------------------------------------------- -// -void CMusAvaConnectionAvailability::PhoneNetworkModeStatus( - RMobilePhone::TMobilePhoneNetworkMode aStatus ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::\ - PhoneNetworkModeStatus()" ) - MUS_LOG1( "mus: [MUSAVA] Mobile Phone Network Status = ", aStatus ) - - 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 -// -// --------------------------------------------------------------------------- -// -void CMusAvaConnectionAvailability::NetworkRegistrationStatus( - RMobilePhone::TMobilePhoneRegistrationStatus aRegStatus ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::\ -NetworkRegistrationStatus()" ) - MUS_LOG1( "Mobile Phone Network Status = ", aRegStatus ) - - if( OperatorVariant() && - aRegStatus != RMobilePhone::ERegisteredOnHomeNetwork ) - { - MUS_LOG( "mus: [MUSAVA] Roaming not allowed" ) - SetState( MMusAvaObserver::EMusAvaRoamingError ); - } - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ -NetworkRegistrationStatus()" ) - } - - -// --------------------------------------------------------------------------- -// CMusAvaConnectionAvailability::EventL -// -// --------------------------------------------------------------------------- -// -void CMusAvaConnectionAvailability::EventL( - const CConnMonEventBase& aConnMonEvent) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::EventL()" ) - TInt connectionId = 0; - TInt event = aConnMonEvent.EventType(); - TUint connId = aConnMonEvent.ConnectionId(); - CMusAvaConnectionMonitor& connectionMonitor = - iSharedObj->ConnectionMonitor(); - TUint musConnID = connectionMonitor.CreatedConnectionID(); - MUS_LOG1( "mus: [MUSAVA] Current connection ID %d = ", musConnID ) - MUS_LOG1( "mus: [MUSAVA] Event connection ID %d = ", connId ) - - switch ( event ) - { - case EConnMonCreateConnection: - { - MUS_LOG( "mus: [MUSAVA] Event type = EConnMonCreateConnection" ) - if( musConnID == 0 ) - { - MUS_LOG( "mus: [MUSAVA] Store Connection ID" ) - TRAPD( err, connectionId = - iConnectionMonitor->ConnectionIDL() ); - if ( err == KErrNotFound ) - { - SetState( MMusAvaObserver::EMusAvaConnectionErr ); - } - else - { - iConnectionMonitor->SetConnectionID( connectionId ); - } - } - break; - } - case EConnMonDeleteConnection: - { - MUS_LOG( "mus: [MUSAVA] Event type = EConnMonDeleteConnection" ) - if( connId == musConnID ) - { - SetState( MMusAvaObserver::EMusAvaConnectionErr ); - } - break; - } - case EConnMonConnectionStatusChange: - { - MUS_LOG( "mus: [MUSAVA] Event type = \ -EConnMonConnectionStatusChange" ) - const CConnMonConnectionStatusChange* connectionStatusChange - = (const CConnMonConnectionStatusChange*)(&aConnMonEvent); - TInt connStatus = connectionStatusChange->ConnectionStatus(); - MUS_LOG1( "mus: [MUSAVA] ConnectionStatus = %d", connStatus ) - if ( connId == musConnID ) - { - if( connStatus == KConnectionFailure || - connStatus == KConnectionClosed || - connStatus == KDataTransferTemporarilyBlocked || - connStatus == KLinkLayerClosed || - connStatus == KPsdSuspended || - connStatus == KPsdFinishedDeactivation ) - { - SetState( MMusAvaObserver::EMusAvaConnectionErr ); - } - if( connStatus == KConnectionOpen || - connStatus == KLinkLayerOpen ) - { - SetState( NetworkRegistrationAndSettingsL() ); - } - } - break; - } - case EConnMonNetworkStatusChange: - { - MUS_LOG( "mus: [MUSAVA] Event type = EConnMonNetworkStatusChange" ) - const CConnMonNetworkStatusChange* networkStatusChange - = (const CConnMonNetworkStatusChange*)(&aConnMonEvent); - TInt networkStatus = networkStatusChange->NetworkStatus(); - MUS_LOG1( "mus: [MUSAVA] NetworkStatus = %d", networkStatus ) - if( connId == EBearerIdWCDMA || connId == EBearerIdWcdmaCSD ) - { - if( EConnMonStatusAttached == networkStatus || - EConnMonStatusActive == networkStatus ) - { - SetState( NetworkRegistrationAndSettingsL() ); - } - else - { - SetState( MMusAvaObserver::EMusAvaConnectionErr ); - } - } - break; - } - case EConnMonNetworkRegistrationChange: - { - MUS_LOG( "mus: [MUSAVA] Event type = \ -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() ); - } - } - break; - } - case EConnMonBearerChange: - { - MUS_LOG( "mus: [MUSAVA] Event type = EConnMonBearerChange" ) - MUS_LOG1( "mus: [MUSAVA] Bearer = %d",connId ) - if( connId == EBearerIdGPRS || - connId == EBearerIdWCDMA || - connId == EBearerIdWcdmaCSD ) - { - SetState( NetworkRegistrationAndSettingsL() ); - } - else - { - SetState( MMusAvaObserver::EMusAvaNetworkType ); - } - break; - } - - case EConnMonPacketDataAvailable: - { - MUS_LOG( "mus: [MUSAVA] EConnMonPacketDataAvailable" ) - /* This is for EDGE /DTM support , This is the only place we can be - sure that packet data available along with CS call. Here we have to - check again for activation settings and based on that availability - state has to be set - */ - MMusAvaObserver::TAvailabilityStatus status - = NetworkRegistrationAndSettingsL(); - SetState( status ); - break; - } - - case EConnMonPacketDataUnavailable: - { - SetState( MMusAvaObserver::EMusAvaNetworkType ); - MUS_LOG( "mus: [MUSAVA] EConnMonPacketDataUnavailable" ) - break; - } - - case EConnMonBearerInfoChange: - { - MUS_LOG( "mus: [MUSAVA] EConnMonBearerInfoChange" ) - break; - } - default : - { - MUS_LOG( "mus: [MUSAVA] Event type is not implemented" ) - MUS_LOG1( "mus: [MUSAVA] Event type %d = ", event ) - break; - } - } - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::EventL()" ) - } - -// ------------------------------------------------------------------------- -// CMusAvaConnectionAvailability::MusAvaManualActivation -// -// ------------------------------------------------------------------------- -// -MMusAvaObserver::TAvailabilityStatus CMusAvaConnectionAvailability:: - ManualActivationL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::\ -ManualActivationL()" ) - - if( OperatorVariant() ) - { - MUS_LOG( "mus: [MUSAVA] Operator Specific No Manual query" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ -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; - } - } - } - -// ------------------------------------------------------------------------- -// CMusAvaConnectionAvailability::NetworkRegistrationAndSettingsL -// -// ------------------------------------------------------------------------- -// -MMusAvaObserver::TAvailabilityStatus CMusAvaConnectionAvailability:: - NetworkRegistrationAndSettingsL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::\ -NetworkRegistrationAndSettingsL()" ) - MUS_LOG( "mus: [MUSAVA] Check registration network status" ) - MUS_LOG( "mus: [MUSAVA] Check roaming" ) - - RMobilePhone::TMobilePhoneRegistrationStatus regStatus; - iNetworkRegistrationStatus->NetworkRegistration( regStatus ); - - MUS_LOG1( "mus: [MUSAVA] NetworkRegistration returned %d", regStatus ) - - MMusAvaObserver::TAvailabilityStatus status; - MusSettingsKeys::TActivation activation = MusSettingsKeys::EAlwaysActive; - - activation = MultimediaSharingSettings::ActivationSettingL(); - TBool operatorVariant = OperatorVariant(); - - MUS_LOG1( "mus: [MUSAVA] ActivationSetting returned %d", - activation ) - - //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()" ) - return status; - } - -