cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmwlancoveragecheck.cpp
changeset 20 9c97ad6591ae
parent 18 fcbbe021d614
child 21 b8e8e15e80f2
child 23 7ec726f93df1
child 28 860702281757
--- a/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmwlancoveragecheck.cpp	Fri Apr 16 15:21:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,413 +0,0 @@
-/*
-* Copyright (c) 2006 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:  Implementation of WLAN Coverage Check class
-*
-*/
-
-
-#include <wlanmgmtclient.h>
-
-#include "cmwlancoveragecheck.h"
-#include "cmpluginwlan.h"
-#include "cmpluginwlandata.h"
-#include "cmpluginwlandataarray.h"
-#include "cmlogger.h"
-
-
-/**
-* Management frame information element IDs.
-* needed to determine coverage
-*/
-enum T802Dot11InformationElementID
-    {
-    E802Dot11SsidIE                 = 0,
-    E802Dot11SupportedRatesIE       = 1,
-    E802Dot11FhParameterSetIE       = 2,
-    E802Dot11DsParameterSetIE       = 3,
-    E802Dot11CfParameterSetIE       = 4,
-    E802Dot11TimIE                  = 5,
-    E802Dot11IbssParameterSetIE     = 6,
-    E802Dot11CountryIE              = 7,
-    E802Dot11HoppingPatternParamIE  = 8,
-    E802Dot11HoppingPatternTableIE  = 9,
-    E802Dot11RequestIE              = 10,
-
-    E802Dot11ChallengeTextIE        = 16,
-    // Reserved for challenge text extension 17 - 31
-    E802Dot11ErpInformationIE       = 42,
-    E802Dot11ExtendedRatesIE        = 50,
-    E802Dot11AironetIE              = 133,
-    E802Dot11ApIpAddressIE          = 149,
-    E802Dot11RsnIE                  = 221
-    };
-
-
-/**
-* Bit masks for Capability Information field.
-*/
-enum T802Dot11CapabilityBitMask
-    {
-    E802Dot11CapabilityEssMask          = 0x0001,
-    E802Dot11CapabilityIbssMask         = 0x0002,
-    E802Dot11CapabilityCfPollableMask   = 0x0004,
-    E802Dot11CapabilityCfPollRequestMask= 0x0008,
-    E802Dot11CapabilityPrivacyMask      = 0x0010,
-    E802Dot11ShortPreambleMask          = 0x0020,
-    E802Dot11PbccMask                   = 0x0040,      
-    E802Dot11ChannelAgilityMask         = 0x0080
-    };
-
-
-// ======================= MEMBER FUNCTIONS =================================
-
-// ----------------------------------------------------------------------------
-// CCmWlanCoverageCheck::CCmWlanCoverageCheck()
-// ----------------------------------------------------------------------------
-//
-CCmWlanCoverageCheck::CCmWlanCoverageCheck() : CActive( EPriorityStandard )
-    {
-    CActiveScheduler::Add( this );
-    }
-    
-// ----------------------------------------------------------------------------
-// CCmWlanCoverageCheck::~CCmWlanCoverageCheck()
-// ----------------------------------------------------------------------------
-//
-CCmWlanCoverageCheck::~CCmWlanCoverageCheck()
-    {
-    Cancel();
-    }
-    
-// ----------------------------------------------------------------------------
-// CCmWlanCoverageCheck::DoCancel
-// ----------------------------------------------------------------------------
-//
-void CCmWlanCoverageCheck::DoCancel()
-    {
-    iWait.AsyncStop();
-    }
-    
-// ----------------------------------------------------------------------------
-// CCmWlanCoverageCheck::RunL
-// ----------------------------------------------------------------------------
-//
-void CCmWlanCoverageCheck::RunL()
-    {
-    CLOG_WRITE( "RunL entered" );
-    switch( iProgState )
-        {
-        case EScanning:
-            {
-             if( !iStatus.Int() )
-                // The list is ready 
-                {
-                iProgState = EDone;
-                iWait.AsyncStop();
-                }
-            else
-                // something went wrong -> no coverage.
-                {
-                iWait.AsyncStop();
-                }
-            }
-            break;            
-        case EDone:
-            {
-            iWait.AsyncStop();
-            }
-            break;
-            
-        default:
-            {
-            User::Leave( KErrCorrupt );
-            }
-        }
-    }
-
-
-
-// ----------------------------------------------------------------------------
-// CCmWlanCoverageCheck::GetCoverageL
-// ----------------------------------------------------------------------------
-//
-TInt CCmWlanCoverageCheck::GetCoverageL()
-    {
-    LOGGER_ENTERFN( "CCmWlanCoverageCheck::GetCoverageL" );
-
-    iProgState = EServiceStatus;
-    iCoverage = 0;
-    
-    CWlanMgmtClient* wlanMgmt = CWlanMgmtClient::NewL();
-    CleanupStack::PushL( wlanMgmt );
-
-    CWlanScanInfo* scanInfo = CWlanScanInfo::NewL();
-    CleanupStack::PushL( scanInfo );
-
-    iProgState = EScanning;
-    
-    wlanMgmt->GetScanResults( iStatus, *scanInfo );
-    
-    SetActive();
-    iWait.Start();
-    
-    // now we have the results and might start to work on them...
-    if ( iProgState == EDone )
-        { //finished without error, work on the result...
-        CCmPluginWlanDataArray* wlandataarray = new ( ELeave ) 
-            CCmPluginWlanDataArray();
-        CleanupStack::PushL( wlandataarray );
-
-        for ( scanInfo->First(); !scanInfo->IsDone(); scanInfo->Next() )
-            {
-            // iWlanNetworks cannot be modified 'directly' in
-            // a const method (like GetBoolAttributeL), so we have to
-            // cast away the constness.
-            
-            // not simply count as before, but check if it is hidden,
-            // and do not allow duplicates...
-            TBool isHidden( EFalse );
-            
-            TUint8 ieLen( 0 );
-            const TUint8* ieData;
-            TBuf8<KWlanMaxSsidLength> ssid8;
-            
-            TInt ret = scanInfo->InformationElement( E802Dot11SsidIE, ieLen, 
-                                                      &ieData );
-            if ( ret == KErrNone ) 
-                {               
-                isHidden = IsHiddenSsid( ieLen, ieData );
-                if ( !isHidden )
-                    {
-                    // get the ssid
-                    ssid8.Copy( ieData, ieLen );
-                    HBufC* tmp = HBufC::NewLC(KWlanMaxSsidLength);
-                    TPtr tmpptr( tmp->Des() );
-                    
-                    tmpptr.Copy(ssid8);
-                    // get the signal strength                        
-                    TUint8 rxLevel8 = scanInfo->RXLevel();
-                    TInt rxLevel = static_cast< TInt >( rxLevel8 );
-                    
-                    // now add it to an array of CCmPluginWlanData,
-                    // as it is not hidden
-                    // the adding function should handle uniqeness and 
-                    // signal strength checking, it should contain only
-                    // the strongest signal!                        
-                    AddToArrayIfNeededL( *wlandataarray, rxLevel, tmpptr );
-                    
-                    CleanupStack::PopAndDestroy( tmp );
-                    }                
-                }
-            else
-                {
-                User::Leave( ret );
-                }
-            }
-        iCoverage = wlandataarray->Count();
-        
-        CleanupStack::PopAndDestroy( wlandataarray );
-
-        CleanupStack::PopAndDestroy( 2, wlanMgmt );
-        }
-    else
-        {
-        User::LeaveIfError( iStatus.Int() );        
-        }        
-        
-    return iCoverage;
-    }
-
-// ---------------------------------------------------------
-// CCmWlanCoverageCheck::IsHiddenSsid
-// ---------------------------------------------------------
-//    
-TBool CCmWlanCoverageCheck::IsHiddenSsid( TUint aSsidLength, 
-                                   const TUint8* aSsid ) const
-    {
-    LOGGER_ENTERFN( "CCmWlanCoverageCheck::IsHiddenSsid" );
-    
-    const TUint8 CSPACE = 0x20; 
-    TBool result( EFalse );
-    TBool result2( ETrue );
-
-    if ( !aSsidLength )
-        {
-        result = ETrue;
-        }
-
-    TInt count( 0 );
-    TUint8 temp( 0x00 );
-    
-    for ( TUint i( 0 ); i < aSsidLength; ++i )
-        {
-        temp = aSsid[i];
-        count += temp; // in hidden networks characters are: 0x00
-        result2 &= temp == CSPACE ;
-        }
-
-    if( !count || result2 )
-        {
-        result = ETrue;
-        }
-        
-    return result;    
-    }
-
-
-// ---------------------------------------------------------
-// CCmWlanCoverageCheck::AddToArrayIfNeededL
-// ---------------------------------------------------------
-//    
-void CCmWlanCoverageCheck::AddToArrayIfNeededL( 
-                            CCmPluginWlanDataArray& aArray, 
-                            TInt aRXLevel, 
-                            TDesC& aNetworkName ) const
-    {
-    LOGGER_ENTERFN( "CCmWlanCoverageCheck::AddToArrayIfNeededL" );
-
-    // first check if it is already in the array
-    
-    TBool found( EFalse );
-    TInt index( 0 );
-    TInt count = aArray.Count();
-    
-    while( ( index <  count ) && !found  )
-        {
-        if( ( aArray )[index]->iNetworkName->Compare( aNetworkName ) )
-            {
-            ++index;   
-            }
-        else
-            {
-            found = ETrue;
-            }
-        }
-
-    TSignalStrength strength = ( TSignalStrength )aRXLevel;
-    if ( found )
-        {
-        // if already exists, check signal strengths
-        TSignalStrength signal = ( aArray )[index]->iSignalStrength;
-        
-        // set to higher value
-        ( aArray )[index]->iSignalStrength = 
-                              signal < strength ? signal : strength ;
-        }
-    else
-        {
-        // new element, add it to array with signal strength!!
-        CCmPluginWlanData* data = CCmPluginWlanData::NewLC();
-        data->iNetworkName = aNetworkName.AllocL();
-        data->iSignalStrength = strength;
-        aArray.AppendL( data );
-        CleanupStack::Pop( data ); // item owned by list!
-        }    
-    }
-
-
-// ----------------------------------------------------------------------------
-// CCmWlanCoverageCheck::ScanForPromptedSsidL
-// ----------------------------------------------------------------------------
-//
-TBool CCmWlanCoverageCheck::ScanForPromptedSsidL( TWlanSsid aEnteredSsid,
-                                TBool aBroadcast,
-                                TWlanNetMode& aNetworkMode, 
-                                TWlanConnectionExtentedSecurityMode& aSecurityMode,
-                                TBool& aProtectedSetupSupported )
-    {
-    LOGGER_ENTERFN( "CCmWlanCoverageCheck::ScanForPromptedSsidL" );
-    
-    TBool found = EFalse;
-
-    iProgState = EServiceStatus;
-       
-    CWlanMgmtClient* wlanMgmt = CWlanMgmtClient::NewL();
-    CleanupStack::PushL( wlanMgmt );
-
-    CWlanScanInfo* scanInfo = CWlanScanInfo::NewL();
-    CleanupStack::PushL( scanInfo );
-
-    iProgState = EScanning;
-    
-    if ( aBroadcast )
-        {
-        wlanMgmt->GetScanResults( iStatus, *scanInfo );
-        }
-    else
-        {
-        wlanMgmt->GetScanResults( aEnteredSsid, iStatus, *scanInfo );
-        }
-
-    SetActive();
-    iWait.Start();
-    
-    // now we have the results and might start to work on them...
-    if ( iProgState == EDone )
-        {       //finished without error, work on the result...
-        TSignalStrength signalStrength = ESignalStrengthMin;
-
-        for ( scanInfo->First(); !scanInfo->IsDone(); scanInfo->Next() )
-            {
-            TUint8 ieLen( 0 );
-            const TUint8* ieData;
-            TBuf8<KWlanMaxSsidLength> ssid8;
-            
-            TInt ret = scanInfo->InformationElement( E802Dot11SsidIE, ieLen, 
-                                                     &ieData );
-            if ( ret == KErrNone ) 
-                {               
-                // get the ssid
-                ssid8.Copy( ieData, ieLen );
-                
-                if ( !aEnteredSsid.Compare( ssid8 ) )
-                    {
-                    // get the signal strength                        
-                    TUint8 rxLevel8 = scanInfo->RXLevel();
-                    TInt rxLevel = static_cast< TInt >( rxLevel8 );
-            
-                    TSignalStrength strength = ( TSignalStrength )rxLevel;
-                    if ( !found || ( found && strength < signalStrength ) )
-                        {
-                        found = ETrue;
-                        signalStrength = strength;
-
-                        aNetworkMode = ( scanInfo->Capability() & 
-                                         E802Dot11CapabilityEssMask ) ?
-                                       EInfra : EAdhoc;
-                        aSecurityMode = scanInfo->ExtendedSecurityMode();
-
-                        aProtectedSetupSupported = 
-                                        scanInfo->IsProtectedSetupSupported();
-                        }
-                    }
-                }
-            else
-                {
-                User::Leave( ret );
-                }
-        
-            }
-        
-        CleanupStack::PopAndDestroy( scanInfo );
-        CleanupStack::PopAndDestroy( wlanMgmt );
-        }
-    else
-        {
-        User::LeaveIfError( iStatus.Int() );        
-        }
-    
-    return found;
-    }
-
-