--- a/convergedconnectionhandler/cchserver/src/cchconnmonhandler.cpp Thu Aug 19 09:45:22 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,655 +0,0 @@
-/*
-* Copyright (c) 2007-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: CCCHConnMonHandler implementation
-*
-*/
-
-
-// INCLUDE FILES
-#include "cchconnmonhandler.h"
-#include "cchserverbase.h"
-#include "cchlogger.h"
-#include "cchservicehandler.h"
-#include "cchconnmonhandlernotifier.h"
-
-// EXTERNAL DATA STRUCTURES
-// None
-
-// EXTERNAL FUNCTION PROTOTYPES
-// None
-
-// CONSTANTS
-// None
-
-// MACROS
-// None
-
-// LOCAL CONSTANTS AND MACROS
-const TInt KPeriodicTimerInterval( 5000000 ); // 5sec.
-
-// 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();
- iConnChangeListenerTimer = CPeriodic::NewL( CActive::EPriorityIdle );
- }
-
-// ---------------------------------------------------------------------------
-// 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" );
- if ( iConnChangeListenerTimer )
- {
- iConnChangeListenerTimer->Cancel();
- }
- delete iConnChangeListenerTimer;
- StopNotify();
- Cancel();
- iPendingRequests.Close();
- iUnsolvedConnIds.Close();
- iConnIapIds.Close();
- iAvailableSNAPs.Close();
- iAvailableIAPs.Close();
- iConnMon.Close();
- }
-
-// ---------------------------------------------------------------------------
-// CCCHConnMonHandler::ScanNetworks
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CCCHConnMonHandler::ScanNetworks(
- TBool aWlanScan, MCCHConnMonHandlerNotifier* aObserver )
- {
- CCHLOGSTRING( "CCCHConnMonHandler::ScanNetworks: IN" );
-
- if ( aWlanScan )
- {
- iNetworkScanningObserver = aObserver;
- 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::SetSNAPsAvailabilityChangeListener
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CCCHConnMonHandler::SetSNAPsAvailabilityChangeListener(
- MCCHConnMonHandlerNotifier* aObserver )
- {
- CCHLOGSTRING( "CCCHConnMonHandler::SetSNAPsAvailabilityChangeListener" );
- iConnChangeListenerTimer->Cancel();
- iSNAPsAvailabilityObserver = aObserver;
- if ( iSNAPsAvailabilityObserver )
- {
- iConnChangeListenerTimer->Start(
- KPeriodicTimerInterval,
- KPeriodicTimerInterval,
- TCallBack( PeriodicTimerCallBack, this ) );
- }
- }
-
-// ---------------------------------------------------------------------------
-// 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::PeriodicTimerCallBack
-// The call back function.
-// ----------------------------------------------------------------------------
-//
-TInt CCCHConnMonHandler::PeriodicTimerCallBack( TAny* aAny )
- {
- CCHLOGSTRING( "CCCHConnMonHandler::PeriodicTimerCallBack" );
-
- CCCHConnMonHandler* self = static_cast<CCCHConnMonHandler*>( aAny );
- self->iConnChangeListenerTimer->Cancel();
-
- if ( self->iSNAPsAvailabilityObserver )
- {
- self->iSNAPsAvailabilityObserver->
- SNAPsAvailabilityChanged( KErrTimedOut );
- }
-
- return KErrNone;
- }
-
-// ---------------------------------------------------------------------------
-// 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() );
- if ( iNetworkScanningObserver )
- {
- iNetworkScanningObserver->NetworkScanningCompletedL(
- iSNAPbuf(), KErrNone );
- iNetworkScanningObserver = NULL;
- }
- }
- break;
-
- case EGetIAP:
- {
- CCHLOGSTRING2( "CCCHConnMonHandler::RunL: iap: %d", iConnIapId );
- TCCHConnectionInfo info;
- info.iIapId = iConnIapId;
- info.iConnId = iConnId;
-
- if ( KErrNotFound == iConnIapIds.Find( info ) )
- {
- iConnIapIds.Append( info );
- }
- iConnId = 0;
- iConnIapId = 0;
-
- CCHLOGSTRING2( "CCCHConnMonHandler::RunL: unsolved conn count: %d", iUnsolvedConnIds.Count() );
- if ( iUnsolvedConnIds.Count() )
- {
- GetIapId();
- }
- }
- break;
-
- case EGetConnectionCount:
- {
- CCHLOGSTRING2( "CCCHConnMonHandler::RunL: conn count: %d", iConnCount );
- TBool familiar( EFalse );
- TUint connId( KErrNone );
- TUint subConnCount( KErrNone );
- for ( TInt i( 1 ); i <= iConnCount; i++ )
- {
- if ( !iConnMon.GetConnectionInfo( i, connId, subConnCount ) )
- {
- familiar = EFalse;
- for ( TInt j( 0 ); j < iConnIapIds.Count(); j++ )
- {
- if ( connId == iConnIapIds[ j ].iConnId )
- {
- CCHLOGSTRING2( "CCCHConnMonHandler::RunL: iap %d is familiar connection", iConnIapIds[ j ].iIapId );
- familiar = ETrue;
- break;
- }
- }
-
- if ( !familiar && KErrNotFound == iUnsolvedConnIds.Find( connId ) )
- {
- iUnsolvedConnIds.Append( connId );
- }
- }
- }
- iConnCount = 0;
-
- CCHLOGSTRING2( "CCCHConnMonHandler::RunL: unsolved conn count: %d", iUnsolvedConnIds.Count() );
- if ( iUnsolvedConnIds.Count() )
- {
- GetIapId();
- }
- }
- break;
-
- default:
- break;
- }
-
-
- if ( iPendingRequests.Count() && !IsActive() )
- {
- CCHLOGSTRING2( "CCCHConnMonHandler::RunL: request pending : %d",
- iPendingRequests[ 0 ] );
- switch ( iPendingRequests[ 0 ] )
- {
- case EGetIAP:
- {
- GetIapId();
- }
- break;
-
- case EGetConnectionCount:
- {
- GetConnectionCount();
- }
- break;
-
- default:
- break;
- }
-
- iPendingRequests.Remove( 0 );
- iPendingRequests.Compress();
- }
- }
- else
- {
- if ( iNetworkScanningObserver )
- {
- iNetworkScanningObserver->NetworkScanningCompletedL(
- iSNAPbuf(), iStatus.Int() );
- iNetworkScanningObserver = NULL;
- }
- }
-
- CCHLOGSTRING( "CCCHConnMonHandler::RunL: OUT" );
- }
-
-// ---------------------------------------------------------------------------
-// CCCHConnMonHandler::StartMonitoringConnectionChanges
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CCCHConnMonHandler::StartMonitoringConnectionChanges()
- {
- iConnIapIds.Reset();
-
- if ( !IsActive() )
- {
- GetConnectionCount();
- }
- else
- {
- iPendingRequests.Append( EGetConnectionCount );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCCHConnMonHandler::StopMonitoringConnectionChanges
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CCCHConnMonHandler::StopMonitoringConnectionChanges(
- RArray<TUint>& aIapIds )
- {
- aIapIds.Reset();
- for ( TInt i( 0 ); i < iConnIapIds.Count(); i++ )
- {
- if ( KErrNotFound == aIapIds.Find( iConnIapIds[ i ].iIapId ) )
- {
- aIapIds.Append( iConnIapIds[ i ].iIapId );
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCCHConnMonHandler::GetConnectionCount
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CCCHConnMonHandler::GetConnectionCount()
- {
- iState = EGetConnectionCount;
- iConnMon.GetConnectionCount( iConnCount, iStatus );
- SetActive();
- }
-
-// ---------------------------------------------------------------------------
-// CCCHConnMonHandler::GetIapId
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CCCHConnMonHandler::GetIapId()
- {
- if ( iUnsolvedConnIds.Count() )
- {
- iConnId = iUnsolvedConnIds[ 0 ];
- iUnsolvedConnIds.Remove( 0 );
- iUnsolvedConnIds.Compress();
-
- iState = EGetIAP;
- iConnMon.GetUintAttribute( iConnId, 0, KIAPId, iConnIapId, iStatus );
- SetActive();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCCHConnMonHandler::RemoveIapId
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CCCHConnMonHandler::RemoveIapId(
- TUint aConnId )
- {
- for ( TInt i( 0 ); i < iConnIapIds.Count(); i++ )
- {
- if ( aConnId == iConnIapIds[ i ].iConnId )
- {
- iConnIapIds.Remove( i );
- iConnIapIds.Compress();
- break;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCCHConnMonHandler::DoCancel
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CCCHConnMonHandler::DoCancel()
- {
- iConnMon.CancelAsyncRequest( EConnMonGetPckgAttribute );
- if ( iNetworkScanningObserver )
- {
- iNetworkScanningObserver->NetworkScanningCompletedL(
- iSNAPbuf(), KErrCancel );
- iNetworkScanningObserver = NULL;
- }
- if ( iSNAPsAvailabilityObserver )
- {
- iConnChangeListenerTimer->Cancel();
- iSNAPsAvailabilityObserver->SNAPsAvailabilityChanged( KErrCancel );
- iSNAPsAvailabilityObserver = NULL;
- }
- }
-
-// ---------------------------------------------------------------------------
-// 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 );
-
- if ( iSNAPsAvailabilityObserver )
- {
- iConnChangeListenerTimer->Cancel();
- iSNAPsAvailabilityObserver->SNAPsAvailabilityChanged( KErrNone );
- }
- }
- break;
-
- case EConnMonCreateConnection:
- {
- const CConnMonCreateConnection* eventCreate = NULL;
- eventCreate = static_cast< const CConnMonCreateConnection* >(
- &aConnMonEvent );
- iUnsolvedConnIds.Append( eventCreate->ConnectionId() );
-
- if ( !IsActive() )
- {
- GetIapId();
- }
- else
- {
- iPendingRequests.Append( EGetIAP );
- }
- }
- break;
-
- case EConnMonDeleteConnection:
- {
- const CConnMonDeleteConnection* eventDelete = NULL;
- eventDelete = static_cast< const CConnMonDeleteConnection* >(
- &aConnMonEvent );
- TUint connId = eventDelete->ConnectionId();
-
- RemoveIapId( connId );
- }
- break;
-
- default:
- break;
- }
- CCHLOGSTRING( "CCCHConnMonHandler::EventL: OUT" );
- }
-
-// ========================== OTHER EXPORTED FUNCTIONS =======================
-
-// End of File