convergedconnectionhandler/cchserver/src/cchconnmonhandler.cpp
changeset 0 a4daefaec16c
child 14 be41ab7b952f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedconnectionhandler/cchserver/src/cchconnmonhandler.cpp	Mon Jan 18 20:12:36 2010 +0200
@@ -0,0 +1,365 @@
+/*
+* Copyright (c) 2007-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:  CCCHConnMonHandler implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "cchconnmonhandler.h"
+#include "cchserverbase.h"
+#include "cchlogger.h"
+#include "cchservicehandler.h"
+
+// EXTERNAL DATA STRUCTURES
+// None
+
+// EXTERNAL FUNCTION PROTOTYPES
+// None
+
+// CONSTANTS
+// None
+
+// MACROS
+// None
+
+// LOCAL CONSTANTS AND MACROS
+// None
+
+// MODULE DATA STRUCTURES
+// None
+
+// LOCAL FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+// None
+
+// ============================= LOCAL FUNCTIONS =============================
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::CCCHConnMonHandler
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CCCHConnMonHandler::CCCHConnMonHandler( CCCHServerBase& aServer ) :
+    CActive( CActive::EPriorityStandard ),
+    iState( EUninitialized ),
+    iServer( aServer )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::ConstructL()
+    {
+    User::LeaveIfError( iConnMon.ConnectL() );
+    NotifyL();
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::NewL
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CCCHConnMonHandler* CCCHConnMonHandler::NewL( CCCHServerBase& aServer )
+    {
+    CCCHConnMonHandler* self = CCCHConnMonHandler::NewLC( aServer );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::NewLC
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CCCHConnMonHandler* CCCHConnMonHandler::NewLC( CCCHServerBase& aServer )
+    {
+    CCCHConnMonHandler* self = new (ELeave) CCCHConnMonHandler( aServer );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// Destructor
+CCCHConnMonHandler::~CCCHConnMonHandler()
+    {
+    CCHLOGSTRING( "CCCHConnMonHandler::~CCCHConnMonHandler" );
+    
+    StopNotify();
+    Cancel();
+    iAvailableSNAPs.Close();
+    iAvailableIAPs.Close();
+    iConnMon.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::ScanNetworks
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::ScanNetworks( TBool aWlanScan )
+    {
+    CCHLOGSTRING( "CCCHConnMonHandler::ScanNetworks: IN" );
+    
+    if ( aWlanScan )
+        {
+        GetIaps( EBearerIdAll );
+        }
+            
+    CCHLOGSTRING( "CCCHConnMonHandler::ScanNetworks: OUT" );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::ScanNetworksCancel
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::ScanNetworksCancel()
+    {
+    Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::IsSNAPAvailable
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CCCHConnMonHandler::IsSNAPAvailable( TUint aSNAPId ) const
+    {    
+    return ( KErrNotFound == iAvailableSNAPs.Find( aSNAPId ) ) 
+        ? EFalse : ETrue; 
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::IsIapAvailable
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CCCHConnMonHandler::IsIapAvailable( TUint aIapId ) const
+    {
+    return ( KErrNotFound == iAvailableIAPs.Find( aIapId ) ) 
+        ? EFalse : ETrue; 
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::GetIaps
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::GetIaps( TConnMonBearerId aBearerId )
+    {
+    if ( !IsActive() )
+        {
+        iConnMon.GetPckgAttribute( aBearerId,
+                                   0,
+                                   KIapAvailability,
+                                   iIapsBuf,
+                                   iStatus );
+        iState = EGetIAPS;
+        SetActive();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::UpdateIapArray
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::UpdateIapArray( TConnMonIapInfo aIaps )
+    {
+    CCHLOGSTRING2( "CCCHConnMonHandler::UpdateIapArray: IN count %d",
+        iAvailableIAPs.Count() );
+    
+    iAvailableIAPs.Reset();
+    TUint count( 0 );
+
+    // Copy TConnMonIapInfo to RArray so we can use RArray::Find method
+    while ( count < aIaps.iCount )
+        {
+        iAvailableIAPs.Append( aIaps.iIap[ count ].iIapId );
+        count++;
+        }
+    CCHLOGSTRING2( "CCCHConnMonHandler::UpdateIapArray: OUT count %d",
+        iAvailableIAPs.Count() );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::GetSNAPs
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::GetSNAPs()
+    {
+    CCHLOGSTRING( "CCCHConnMonHandler::GetSNAPs: IN" );
+    
+    if ( !IsActive() )
+        {
+        iConnMon.GetPckgAttribute( EBearerIdAll, // some parameter
+                                   0, // pass the size of buffer
+                                   KSNAPsAvailability, // specify the request
+                                   iSNAPbuf, // buffer for writing data
+                                   iStatus );
+        iState = EGetSNAPs;
+        SetActive();
+        }
+    
+    CCHLOGSTRING( "CCCHConnMonHandler::GetSNAPs: OUT" );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::UpdateSnapArray
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::UpdateSnapArray( TConnMonSNAPInfo aSNAPs )
+    {
+    CCHLOGSTRING2( "CCCHConnMonHandler::UpdateSnapArray: IN count %d",
+        iAvailableSNAPs.Count() );
+   
+    iAvailableSNAPs.Reset();
+    TUint count( 0 );
+    // Copy TConnMonSNAPInfo to RArray so we can use RArray::Find method
+    while ( count < aSNAPs.iCount )
+        {
+        iAvailableSNAPs.Append( aSNAPs.iSNAP[ count ].iSNAPId );
+        count++;
+        }        
+    CCHLOGSTRING2( "CCCHConnMonHandler::UpdateSnapArray: OUT count %d",
+        iAvailableSNAPs.Count() );
+    
+    }
+ 
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::NotifyL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::NotifyL()
+    {
+    CCHLOGSTRING( "CCCHConnMonHandler::NotifyL: IN" );
+    
+    iConnMon.NotifyEventL( *this );
+
+    // Thresholds 
+    TInt err = iConnMon.SetUintAttribute( EBearerIdAll,
+                                          0,
+                                          KBearerAvailabilityThreshold,
+                                          1 );
+                                          
+    CCHLOGSTRING2( "CCCHConnMonHandler::NotifyL: OUT", err );
+    }
+    
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::StopNotify
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::StopNotify()
+    {
+    iConnMon.CancelNotifications();
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::RunL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::RunL()
+    {
+    CCHLOGSTRING2( "CCCHConnMonHandler::RunL: IN error: %d", iStatus.Int() );
+    
+    if ( KErrNone == iStatus.Int() )
+        {
+        switch ( iState )
+            {
+            case EGetIAPS:
+                {
+                UpdateIapArray( iIapsBuf() );
+                GetSNAPs();
+                }
+            break;
+            case EGetSNAPs:
+                {
+                UpdateSnapArray( iSNAPbuf() );
+                }
+            break;
+            default:
+                break;
+            }
+        }
+            
+    CCHLOGSTRING( "CCCHConnMonHandler::RunL: OUT" );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::DoCancel
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::DoCancel()
+    {
+    iConnMon.CancelAsyncRequest( EConnMonGetPckgAttribute );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCHConnMonHandler::EventL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CCCHConnMonHandler::EventL( const CConnMonEventBase &aConnMonEvent )
+    {
+    CCHLOGSTRING3
+        ( "CCCHConnMonHandler::EventL: IN EventType = %d, ConnectionId = %d", 
+            aConnMonEvent.EventType(), aConnMonEvent.ConnectionId() );
+    
+    switch ( aConnMonEvent.EventType() )
+        {
+        case EConnMonIapAvailabilityChange:
+            {
+            const CConnMonIapAvailabilityChange* eventIap = NULL;
+            eventIap = static_cast< const CConnMonIapAvailabilityChange* >(
+                &aConnMonEvent );
+
+            TConnMonIapInfo iaps = eventIap->IapAvailability();
+            UpdateIapArray( iaps );
+            }
+            break;
+
+        case EConnMonSNAPsAvailabilityChange:
+            {
+            const CConnMonSNAPsAvailabilityChange* eventSNAP = NULL;
+            eventSNAP = static_cast< const CConnMonSNAPsAvailabilityChange* >(
+                 &aConnMonEvent );
+
+            TConnMonSNAPInfo snaps  = eventSNAP->SNAPAvailability();
+            UpdateSnapArray( snaps );
+            }
+            break;
+        default:
+            break;
+        }
+    CCHLOGSTRING( "CCCHConnMonHandler::EventL: OUT" );
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =======================
+
+//  End of File