diff -r 000000000000 -r a4daefaec16c convergedconnectionhandler/cchserver/src/cchetelnetworkstatusnotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/convergedconnectionhandler/cchserver/src/cchetelnetworkstatusnotifier.cpp Mon Jan 18 20:12:36 2010 +0200 @@ -0,0 +1,221 @@ +/* +* Copyright (c) 2006 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: CCchEtelNetworkStatusNotifier implementation + * +*/ + + +// INCLUDES +#include "cchetelnetworkstatusnotifier.h" +#include "cchclientserver.h" +#include "cchuihandler.h" +#include +#include "cchlogger.h" + + +const TUint KCCHEtelRetryDelay = 1000; +// ============================ MEMBER FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// CCchEtelNetworkStatusNotifier::NewL() +// ---------------------------------------------------------------------------- +CCchEtelNetworkStatusNotifier* CCchEtelNetworkStatusNotifier::NewL( + MCchEtelNetworkStatusObserver& aEtelNetworkStatusObserver ) + { + CCchEtelNetworkStatusNotifier* self = new(ELeave) + CCchEtelNetworkStatusNotifier( aEtelNetworkStatusObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ---------------------------------------------------------------------------- +// CCchEtelNetworkStatusNotifier::CCchEtelNetworkStatusNotifier() +// ---------------------------------------------------------------------------- +CCchEtelNetworkStatusNotifier::CCchEtelNetworkStatusNotifier( + MCchEtelNetworkStatusObserver& aEtelNetworkStatusObserver ) + : CActive( EPriorityStandard ), + iEtelNetworkStatusObserver( aEtelNetworkStatusObserver ), + iRegistrationStatus( RMobilePhone::ERegistrationUnknown ), + iDelay( KCCHEtelRetryDelay ) + { + CActiveScheduler::Add( this ); + } + +// ---------------------------------------------------------------------------- +// CCchEtelNetworkStatusNotifier::ConstructL() +// ---------------------------------------------------------------------------- +void CCchEtelNetworkStatusNotifier::ConstructL() + { + iTimer.CreateLocal(); + iState = ECCHEtelConnect; + Connect(); + } + +// ---------------------------------------------------------------------------- +// CCchEtelNetworkStatusNotifier::~CCchEtelNetworkStatusNotifier() +// ---------------------------------------------------------------------------- + +CCchEtelNetworkStatusNotifier::~CCchEtelNetworkStatusNotifier() + { + if( IsActive() ) + { + Cancel(); + } + iPhone.Close(); + iEtelServer.UnloadPhoneModule( KMmTsyModuleName ); + iTimer.Close(); + } + +// ----------------------------------------------------------------------------- +// CCchEtelNetworkStatusNotifier::Connect +// Handle notification from pubsub session. +// ----------------------------------------------------------------------------- +// +void CCchEtelNetworkStatusNotifier::Connect() + { + CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::Connect IN" ); + TInt error( 0 ); + + switch( iState ) + { + case ECCHEtelConnect: + error = iEtelServer.Connect(); + if( error ) + { + break; + } + iState = ECCHEtelLoadModule; + + case ECCHEtelLoadModule: + error = iEtelServer.LoadPhoneModule( KMmTsyModuleName ); + if( error ) + { + break; + } + iState = ECCHEtelOpenPhone; + + case ECCHEtelOpenPhone: + error = iPhone.Open( iEtelServer, KMmTsyPhoneName ); + if( error ) + { + break; + } + else + { + iState = ECCHEtelConnected; + iPhone.GetNetworkRegistrationStatus( iStatus, iRegistrationStatus ); + } + + } + if ( error ) + { + iTimer.After( iStatus, iDelay ); + iDelay += KCCHEtelRetryDelay; + } + SetActive(); + + CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::Connect OUT" ); + } + +// ----------------------------------------------------------------------------- +// CCchEtelNetworkStatusNotifier::RunL +// Handle notification from pubsub session. +// ----------------------------------------------------------------------------- +// +void CCchEtelNetworkStatusNotifier::RunL() + { + CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::RunL IN" ); + + if ( iState == ECCHEtelConnected ) + { + OrderNotification(); + + if ( RMobilePhone::ENotRegisteredNoService == iRegistrationStatus && + iLastRegistrationStatus != iRegistrationStatus ) + { + iEtelNetworkStatusObserver.MobileNetworkNoService(); + } + + iLastRegistrationStatus = iRegistrationStatus; + } + else + { + Connect(); + } + + CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::RunL OUT" ); + } +// ----------------------------------------------------------------------------- +// CCchEtelNetworkStatusNotifier::DoCancel +// Handle cancel order on this active object. +// ----------------------------------------------------------------------------- +// +void CCchEtelNetworkStatusNotifier::DoCancel() + { + CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::DoCancel IN" ); + if ( EFalse == iNotified ) + { + iPhone.CancelAsyncRequest( + EMobilePhoneGetNetworkRegistrationStatus ); + } + else + { + iPhone.CancelAsyncRequest( + EMobilePhoneNotifyNetworkRegistrationStatusChange ); + } + iNotified = EFalse; + + CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::DoCancel OUT" ); + } + +// ----------------------------------------------------------------------------- +// CCchEtelNetworkStatusNotifier::OrderNotification +// Order new notification from CenRep. +// ----------------------------------------------------------------------------- +// +void CCchEtelNetworkStatusNotifier::OrderNotification() + { + CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::OrderNotification IN" ); + + iNotified = ETrue; + iPhone.NotifyNetworkRegistrationStatusChange( + iStatus, + iRegistrationStatus ); + SetActive(); + + CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::OrderNotification OUT" ); + } + +// ----------------------------------------------------------------------------- +// CCchEtelNetworkStatusNotifier::IsNetworkStatusNoService +// Is network status no service. +// ----------------------------------------------------------------------------- +// +TBool CCchEtelNetworkStatusNotifier::IsNetworkStatusNoService() const + { + CCHLOGSTRING( "CCchEtelNetworkStatusNotifier::IsNetworkStatusNoService" ); + + if ( RMobilePhone::ENotRegisteredNoService == iRegistrationStatus ) + { + return ETrue; + } + else + { + return EFalse; + } + } + +// End of file