networkhandling/networkhandlingengine/NetworkHandlingSrc/CNWDynamicCapsMonitor.cpp
changeset 15 d7fc66ccd6fb
--- /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