--- /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 <CbsServerInternalPSKeys.h>
+
+
+
+
+// ============================ 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