networkhandling/networkhandlingengine/NetworkHandlingSrc/CNWDynamicCapsMonitor.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networkhandling/networkhandlingengine/NetworkHandlingSrc/CNWDynamicCapsMonitor.cpp Mon May 03 13:01:45 2010 +0300
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2010 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
+* CNWDynamicCapsMonitor
+*
+*/
+
+// INCLUDE FILES
+#include <pcktcs.h> // for EPacketGetDynamicCaps
+#include <etelpckt.h> // for RPacketService
+#include "CNWDynamicCapsMonitor.h"
+#include "CNWMessageHandler.h"
+#include "NWLogger.h"
+
+// ================= MEMBER FUNCTIONS =======================================
+
+// -----------------------------------------------------------------------------
+// CNWDynamicCapsMonitor::CNWDynamicCapsMonitor
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CNWDynamicCapsMonitor::CNWDynamicCapsMonitor(
+ CNWMessageHandler& aOwner, // ref. to owner class
+ RMobilePhone& aPhone, // ref. to phone
+ TNWInfo& aNetworkInfo, // ref. to network info struct
+ RMmCustomAPI& aCustomAPI ) //ref. to customAPI
+ : CNWNetworkMonitorBase( aOwner,
+ aPhone,
+ aNetworkInfo,
+ aCustomAPI )
+ {
+ NWLOGSTRING( KNWOBJECT, "NW: CNWDynamicCapsMonitor::CNWDynamicCapsMonitor -START" );
+ CActiveScheduler::Add( this );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CNWDynamicCapsMonitor::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CNWDynamicCapsMonitor::ConstructL()
+ {
+ NWLOGSTRING( KNWOBJECT, "NW: CNWDynamicCapsMonitor::ConstructL -START" );
+ User::LeaveIfError( iPacketService.Open( iPhone ) );
+ // Assign lower priority than other networkhandling monitors.
+ // (Default in CNWNetworkMonitorBase is EPriorityStandard)
+ SetPriority( EPriorityIdle );
+
+ NWLOGSTRING( KNWOBJECT, "NW: CNWDynamicCapsMonitor::ConstructL -END" );
+ }
+
+// -----------------------------------------------------------------------------
+// CNWDynamicCapsMonitor::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNWDynamicCapsMonitor* CNWDynamicCapsMonitor::NewL(
+ CNWMessageHandler& aOwner,
+ RMobilePhone& aPhone,
+ TNWInfo& aNetworkInfo,
+ RMmCustomAPI& aCustomAPI )
+ {
+ NWLOGSTRING( KNWOBJECT, "NW: CNWDynamicCapsMonitor::NewL -START" );
+ CNWDynamicCapsMonitor* self =
+ new( ELeave ) CNWDynamicCapsMonitor( aOwner,
+ aPhone,
+ aNetworkInfo,
+ aCustomAPI );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ NWLOGSTRING( KNWOBJECT, "NW: CNWDynamicCapsMonitor::NewL -END" );
+ return self;
+ }
+
+
+// Destructor
+CNWDynamicCapsMonitor::~CNWDynamicCapsMonitor()
+ {
+ Cancel();
+ iPacketService.Close();
+
+ NWLOGSTRING( KNWOBJECT, "NW: CNWDynamicCapsMonitor::~CNWDynamicCapsMonitor -END" );
+ }
+
+// -----------------------------------------------------------------------------
+// CNWDynamicCapsMonitor::DoCancel
+// Cancels the pending async. command.
+// -----------------------------------------------------------------------------
+//
+void CNWDynamicCapsMonitor::DoCancel()
+ {
+ NWLOGSTRING( KNWREQEND, "NW: CNWDynamicCapsMonitor::DoCancel: Request CancelAsyncRequest( EPacketNotifyDynamicCapsChange )" );
+ iPacketService.CancelAsyncRequest( EPacketNotifyDynamicCapsChange );
+ }
+
+// -----------------------------------------------------------------------------
+// CNWDynamicCapsMonitor::RunL
+// Receives notification that the dynamic packet data capabilities changed.
+// Saves new value in TNWInfo object. (This will be used by active idle to
+// hide the alpha tag if CS registration is unsuccessful.)
+// -----------------------------------------------------------------------------
+//
+void CNWDynamicCapsMonitor::RunL()
+ {
+ NWLOGSTRING2( KNWREQEND,
+ "NW: CNWDynamicCapsMonitor::RunL, iStatus = %d", iStatus.Int() );
+
+ if( iStatus.Int() == KErrNone )
+ {
+ if ( iNWNetworkInfo.iDynamicCapsFlags != iDynamicCapsFlags )
+ {
+ // Update dynamic caps info
+ UpdateDynamicCapsFlags( iDynamicCapsFlags );
+ iOwner.SendMessage(
+ MNWMessageObserver::ENWMessageDynamicCapsChange );
+ }
+ IssueRequest();
+ }
+ // Check if monitor can be restarted.
+ else if ( iStatus != KErrCancel && iStatus != KErrServerTerminated )
+ {
+ NWLOGSTRING2( KNWERROR,
+ "NW: CNWDynamicCapsMonitor::RunL, Unknown error situation, iStatus = %d", iStatus.Int() );
+ IssueRequest();
+ }
+ else
+ {
+ NWLOGSTRING2( KNWERROR,
+ "NW: CNWDynamicCapsMonitor::RunL, Server Terminated or request Cancelled, iStatus = %d", iStatus.Int() );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CNWDynamicCapsMonitor::IssueRequest
+// Request a notification when the dynamic packet data capabilities change.
+// -----------------------------------------------------------------------------
+//
+void CNWDynamicCapsMonitor::IssueRequest()
+ {
+ NWLOGSTRING( KNWOBJECT, "NW: CNWDynamicCapsMonitor::IssueRequest() -START" );
+
+ if( !IsActive() )
+ {
+ NWLOGSTRING( KNWREQIN,
+ "NW:CNWDynamicCapsMonitor::IssueRequest > RPacketService::NotifyDynamicCapsChange" );
+ iPacketService.NotifyDynamicCapsChange( iStatus, iDynamicCapsFlags );
+ SetActive();
+ }
+ else
+ {
+ NWLOGSTRING( KNWERROR,
+ "NW: CNWDynamicCapsMonitor::IssueRequest: Already active" );
+ }
+
+ NWLOGSTRING( KNWOBJECT, "NW: CNWDynamicCapsMonitor::IssueRequest() -END" );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CNWDynamicCapsMonitor::UpdateDynamicCapsFlags()
+// Update the value of iNWNetworkInfo.iDynamicCapsFlags
+// -----------------------------------------------------------------------------
+//
+void CNWDynamicCapsMonitor::UpdateDynamicCapsFlags(
+ const RPacketService::TDynamicCapsFlags aDynamicCapsFlags )
+ {
+ NWLOGSTRING( KNWOBJECT, "NW: CNWDynamicCapsMonitor::UpdateDynamicCapsFlags()" );
+ iNWNetworkInfo.iDynamicCapsFlags = aDynamicCapsFlags;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CNWDynamicCapsMonitor::RunError()
+// Processes any errors.
+// -----------------------------------------------------------------------------
+//
+TInt CNWDynamicCapsMonitor::RunError( TInt /*aError*/ )
+ {
+ return KErrNone; // Handled the error fully
+ }
+
+// end of file