diff -r 000000000000 -r ff3b6d0fd310 networkhandling/networkhandlingengine/NetworkHandlingGsmSrc/CNWGsmNetworkCellReselectionHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkhandling/networkhandlingengine/NetworkHandlingGsmSrc/CNWGsmNetworkCellReselectionHandler.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,327 @@ +/* +* Copyright (c) 2002-2009 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: This module contains the implementation of CNWGsmNetworkCellReselectionHandler +* class member functions. +* +*/ + + + +// INCLUDE FILES +#include "CNWNetworkViagBaseEngine.h" +#include "CNWNetworkMCNEngine.h" +#include "CNWGsmNetworkCellReselectionHandler.h" +#include "NWLogger.h" + +#include + + + + +// ============================ MEMBER FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// CNWGsmNetworkCellReselectionHandler::CNWGsmNetworkCellReselectionHandler +// C++ default constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------------------------- +// +CNWGsmNetworkCellReselectionHandler::CNWGsmNetworkCellReselectionHandler( + CNWGsmMessageHandler& aOwner, + RMobilePhone& aPhone, + TNWInfo& aNetworkInfo, + RMmCustomAPI& aCustomAPI, + TNWInterInfo& aInterNetworkInfo) + : CActive( EPriorityStandard ), + iOwner( aOwner ), + iPhone( aPhone ), + iNWNetworkInfo( aNetworkInfo ), + iCustomAPI ( aCustomAPI ), + iInterNetworkInfo( aInterNetworkInfo ) + { + NWLOGSTRING( KNWMESOUT, + "NW: CNWGsmMessageHandler::CNWGsmNetworkCellReselectionHandler()\ + Begin" ); + + iMcnState = EFalse; + CActiveScheduler::Add( this ); + + NWLOGSTRING( KNWMESOUT, + "NW: CNWGsmMessageHandler::CNWGsmNetworkCellReselectionHandler()\ + End" ); + } +// ---------------------------------------------------------------------------- +// CNWGsmNetworkCellReselectionHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ---------------------------------------------------------------------------- +// +void CNWGsmNetworkCellReselectionHandler::ConstructL() + { + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::ConstructL() Begin" ); + + // Attach to startup property + User::LeaveIfError( + iProperty.Attach( KPSUidCellBroadcast, KCbsServerStarted ) ); + + TInt err = iProperty.Get( iMcnState ); + if ( err != KErrNone ) + { + iMcnState = 0; + NWLOGSTRING2( KNWERROR, + "NW: CNWGsmNetworkCellReselectionHandler::ConstructL(), \ + RProperty.Get FAILED: %d", err ); + } + NWLOGSTRING( KNWMESOUT, + "NW: CNWGsmNetworkCellReselectionHandler::ConstructL(),\ + RProperty::Get() called" ); + + if ( iMcnState ) + { + // Establish the session for CBS messages. + // No error handling, if leaves. Session creation will be try again + // when CBS server is ready. + if ( !iMcn ) + { + NWLOGSTRING( KNWOBJECT, + "NW: CNWGsmNetworkCellReselectionHandler::ConstructL(),\ + Mcn hasn't been created yet." ); + iMcn = CMcn::NewL(); + } + } + else + { + NotifyCbsServerStateChanged(); + } + + iViagEngine = CNWNetworkViagBaseEngine::NewL( + *this, + iOwner, + iCustomAPI, + iNWNetworkInfo, + iInterNetworkInfo + ); + + iMcnEngine = CNWNetworkMcnEngine::NewL( + iOwner, + iNWNetworkInfo, + iCustomAPI, + *this ); + + // Start SatRefresh handler if CBS server is already started. + if ( iMcn ) + { + iViagEngine->StartupReadyL(); + } + + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::ConstructL() End " ); + } + +// ---------------------------------------------------------------------------- +// CNWGsmNetworkCellReselectionHandler::NewL +// Two-phased constructor. +// ---------------------------------------------------------------------------- +// +CNWGsmNetworkCellReselectionHandler* CNWGsmNetworkCellReselectionHandler::NewL( + CNWGsmMessageHandler& aOwner, + RMobilePhone& aPhone, + TNWInfo& aNetworkInfo, + RMmCustomAPI& aCustomAPI, + TNWInterInfo& aInterNetworkInfo ) + { + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::NewL() Begin" ); + + CNWGsmNetworkCellReselectionHandler* self = + new (ELeave) CNWGsmNetworkCellReselectionHandler ( aOwner, + aPhone, + aNetworkInfo, + aCustomAPI, + aInterNetworkInfo ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::NewL() End" ); + return self; + } + + +// Destructor +CNWGsmNetworkCellReselectionHandler::~CNWGsmNetworkCellReselectionHandler() + { + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::\ + ~CNWGsmNetworkCellReselectionHandler() Begin " ); + + Cancel(); + delete iMcnEngine; + delete iViagEngine; + if ( iMcn ) + { + delete iMcn; + } + + iProperty.Close(); + + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::\ + ~CNWGsmNetworkCellReselectionHandler() End " ); + } + + +// ---------------------------------------------------------------------------- +// CNWGsmNetworkCellReselectionHandler::HandleCellReselection +// Checks if we got Viag SIM card in ME. +// SubscriberId is checked in the CNWNetworkCommand-class. Viag IMSI has fixed +// prefix which we compare here. +// (other items were commented in a header). +// ---------------------------------------------------------------------------- +// +void CNWGsmNetworkCellReselectionHandler::HandleCellReselection( ) + { + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::\ + HandleCellReselection() Begin " ); + + if( iViagEngine ) + { + iViagEngine->StopTimer(); + iViagEngine->CellReselection(); + } + iMcnEngine->CellReselection(); + + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::\ + HandleCellReselection() End " ); + } + +// ---------------------------------------------------------------------------- +// CNWGsmNetworkCellReselectionHandler::GetMcnPtr +// Returns the pointer to CMcn object. +// ---------------------------------------------------------------------------- +// +CMcn* CNWGsmNetworkCellReselectionHandler::GetMcnPtr() + { + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::GetMcnPtr() Begin " ); + + return iMcn; + + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::GetMcnPtr() End " ); + } + +// ---------------------------------------------------------------------------- +// CNWGsmNetworkCellReselectionHandler::DoCancel +// Cancels the pending async. command. +// (other items were commented in a header). +// ---------------------------------------------------------------------------- +// +void CNWGsmNetworkCellReselectionHandler::DoCancel() + { + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::DoCancel() Begin " ); + + iProperty.Cancel(); + + NWLOGSTRING( KNWMESOUT, "NW: CNWGsmMessageHandler::DoCancel() End " ); + } + +// ---------------------------------------------------------------------------- +// CNWGsmNetworkCellReselectionHandler::RunL +// Receives the completion of the NotifyCbsServerStateChanged command. +// ---------------------------------------------------------------------------- +// +void CNWGsmNetworkCellReselectionHandler::RunL() + { + NWLOGSTRING( KNWREQEND, + "NET CNWGsmNetworkCellReselectionHandler::RunL() Begin" ); + NWLOGSTRING2( KNWREQEND, + "NW: CNWGsmNetworkCellReselectionHandler::RunL(), error value of\ + istatus = %d ", iStatus.Int() ); + + if ( iStatus == KErrNone ) + { + NWLOGSTRING( KNWINT, + "NW CNWGsmNetworkCellReselectionHandler::RunL: NotifyRequest !" ); + //Establish the session for CBS messages. + if ( !iMcn ) + { + iMcn = CMcn::NewL(); + iViagEngine->StartupReadyL(); + iMcnState = ETrue; + } + } + else + { + NWLOGSTRING ( KNWERROR, + "NW: CNWGsmNetworkCellReselectionHandler::RunL: \ + NOTIFYREQUEST FAILED!" ); + } + + NWLOGSTRING( KNWREQEND, + "NET CNWGsmNetworkCellReselectionHandler::RunL() End " ); + } + + +// ---------------------------------------------------------------------------- +// CNWGsmNetworkCellReselectionHandler::RunError +// ---------------------------------------------------------------------------- +// +TInt CNWGsmNetworkCellReselectionHandler::RunError( TInt /* aError */ ) + { + // Just ignore any error and continue without + // any handling to allow smooth execution. + NWLOGSTRING( KNWOBJECT, + "NET CNWGsmNetworkCellReselectionHandler::RunError() called " ); + return KErrNone; + } + + +// ---------------------------------------------------------------------------- +// CNWGsmNetworkCellReselectionHandler::NotifyCbsServerStateChanged +// Calls notify request from Publish and Subscribe or SharedData +// ---------------------------------------------------------------------------- +// +void CNWGsmNetworkCellReselectionHandler::NotifyCbsServerStateChanged() + { + NWLOGSTRING( KNWREQOUT, + "NET CNWGsmNetworkCellReselectionHandler::\ + NotifyCbsServerStateChanged() Begin " ); + + iProperty.Subscribe( iStatus ); + NWLOGSTRING( KNWREQOUT, + "NW CNWGsmNetworkCellReselectionHandler::NotifyCbsServerStateChanged()\ + > RProperty::Subscribe" ); + SetActive(); + + NWLOGSTRING( KNWREQOUT, + "NET CNWGsmNetworkCellReselectionHandler::\ + NotifyCbsServerStateChanged() End " ); + } + +// ---------------------------------------------------------------------------- +// CNWGsmNetworkCellReselectionHandler::HandleUpdateReadingStatus +// Updates Operator name's read status +// ---------------------------------------------------------------------------- +// +void CNWGsmNetworkCellReselectionHandler::UpdateReadingStatus( + const TNWRead& aElementFile, TBool aReadStatus ) + { + NWLOGSTRING2( KNWREQOUT, + "NET CNWGsmNetworkCellReselectionHandler::\ + UpdateReadingStatus() Begin, aReadStatus = %d ", + aReadStatus ); + + iViagEngine->UpdateEFReadingState( aElementFile, aReadStatus ); + + NWLOGSTRING( KNWREQOUT, + "NET CNWGsmNetworkCellReselectionHandler::\ + UpdateReadingStatus() End " ); + } + +// End of File