--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/apwizard/src/wsfwlanssiddiscovery.cpp Wed Sep 01 12:20:32 2010 +0100
@@ -0,0 +1,323 @@
+/*
+* 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 SSID discovery class
+*
+*/
+
+
+
+// EXTERNAL INCLUDES
+#include <wlanmgmtclient.h>
+#include <wlanmgmtcommon.h>
+
+// CLASS HEADER
+#include "wsfwlanssiddiscovery.h"
+
+// INTERNAL INCLUDES
+#include "wsflogger.h"
+
+
+using namespace CMManager;
+
+
+/**
+* Management frame information element IDs.
+* needed to determine SSID
+* (from \S60\osext\wlan\wlanldd\wlan_common\umac_common\inc\802dot11.h)
+*/
+enum TWsf802Dot11InformationElementID
+ {
+ 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.
+* (from \S60\osext\wlan\wlanldd\wlan_common\umac_common\inc\802dot11.h)
+*/
+enum TWsf802Dot11CapabilityBitMask
+ {
+ E802Dot11CapabilityEssMask = 0x0001,
+ E802Dot11CapabilityIbssMask = 0x0002,
+ E802Dot11CapabilityCfPollableMask = 0x0004,
+ E802Dot11CapabilityCfPollRequestMask= 0x0008,
+ E802Dot11CapabilityPrivacyMask = 0x0010,
+ E802Dot11ShortPreambleMask = 0x0020,
+ E802Dot11PbccMask = 0x0040,
+ E802Dot11ChannelAgilityMask = 0x0080
+ };
+
+
+// ======================= MEMBER FUNCTIONS =================================
+
+// ----------------------------------------------------------------------------
+// CWsfWlanSsidDiscovery::NewL
+// ----------------------------------------------------------------------------
+//
+CWsfWlanSsidDiscovery* CWsfWlanSsidDiscovery::NewL()
+ {
+ CWsfWlanSsidDiscovery* self = new (ELeave) CWsfWlanSsidDiscovery();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanSsidDiscovery::CWsfWlanSsidDiscovery
+// ----------------------------------------------------------------------------
+//
+CWsfWlanSsidDiscovery::CWsfWlanSsidDiscovery(): CActive( EPriorityStandard )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanSsidDiscovery::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanSsidDiscovery::ConstructL()
+ {
+ LOG_ENTERFN( "CWsfWlanSsidDiscovery::ConstructL" );
+#ifndef __WINS__
+ iWlanMgmt = CWlanMgmtClient::NewL();
+ iScanInfo = CWlanScanInfo::NewL();
+#endif
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanSsidDiscovery::~CWsfWlanSsidDiscovery()
+// ----------------------------------------------------------------------------
+//
+CWsfWlanSsidDiscovery::~CWsfWlanSsidDiscovery()
+ {
+ LOG_ENTERFN( "CWsfWlanSsidDiscovery::~CWsfWlanSsidDiscovery" );
+ Cancel();
+ delete iWlanMgmt;
+ delete iScanInfo;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanSsidDiscovery::DoCancel
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanSsidDiscovery::DoCancel()
+ {
+ LOG_ENTERFN( "CWsfWlanSsidDiscovery::DoCancel" );
+#ifndef __WINS__
+ iWlanMgmt->CancelGetScanResults();
+#endif
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanSsidDiscovery::AbortScanning
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanSsidDiscovery::AbortScanning()
+ {
+ LOG_ENTERFN( "CWsfWlanSsidDiscovery::AbortScanning" );
+ if ( iWait.IsStarted() )
+ {
+ LOG_WRITE( "aborting..." );
+ Cancel();
+
+ iProgState = EAborted;
+ iWait.AsyncStop();
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanSsidDiscovery::RunL
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanSsidDiscovery::RunL()
+ {
+ LOG_ENTERFN( "CWsfWlanSsidDiscovery::RunL" );
+
+ if ( iProgState == EScanning )
+ {
+ if ( !iStatus.Int() )
+ // The list is ready
+ {
+ LOG_WRITE( "No error" );
+ iProgState = EDone;
+ }
+ else
+ // something went wrong -> no coverage.
+ {
+ LOG_WRITE( "error" );
+ }
+ }
+
+ // stop blocking
+ if ( iWait.IsStarted() )
+ {
+ iWait.AsyncStop();
+ }
+
+ }
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanSsidDiscovery::ScanForSsidL
+// ----------------------------------------------------------------------------
+//
+TBool CWsfWlanSsidDiscovery::ScanForSsidL( TWlanSsid& aEnteredSsid,
+ TBool aBroadcast,
+ CMManager::TWlanNetMode& aNetworkMode,
+ CMManager::TWlanSecMode& aSecurityMode,
+ TBool& aUsesPsk )
+ {
+ LOG_ENTERFN( "CWsfWlanSsidDiscovery::ScanForSsidL" );
+
+ if ( IsActive() )
+ {
+ return EFalse;
+ }
+
+ TBool found = EFalse;
+#ifndef __WINS__
+ iProgState = EScanning;
+
+ if ( aBroadcast )
+ {
+ LOG_WRITE( "performing broadcast scan" );
+ iWlanMgmt->GetScanResults( iStatus, *iScanInfo );
+ }
+ else
+ {
+ LOG_WRITE( "performing direct scan" );
+ iWlanMgmt->GetScanResults( aEnteredSsid, iStatus, *iScanInfo );
+ }
+
+ SetActive();
+ iWait.Start();
+
+ // now we have the results and might start to work on them...
+ if ( iProgState == EDone )
+ {
+ LOG_WRITE( "iProgState = EDone" );
+ //finished without error, work on the result...
+ for ( iScanInfo->First(); !found && !iScanInfo->IsDone();
+ iScanInfo->Next() )
+ {
+ TUint8 ieLen( 0 );
+ const TUint8* ieData;
+
+ TInt ret = iScanInfo->InformationElement( E802Dot11SsidIE, ieLen,
+ &ieData );
+ User::LeaveIfError( ret );
+
+ // get the ssid
+ TWlanSsid ssid;
+ ssid.Copy( ieData, ieLen );
+
+ if ( !aEnteredSsid.Compare( ssid ) )
+ {
+ // SSID matched
+ LOG_WRITE( "SSID matched, processing security settings" );
+ found = ETrue;
+
+ // adhoc or infrastructure
+ aNetworkMode = ( iScanInfo->Capability() &
+ E802Dot11CapabilityEssMask ) ?
+ EInfra : EAdhoc;
+
+ // security mode
+ TWlanConnectionSecurityMode connSec =
+ iScanInfo->SecurityMode();
+
+ // convert TWlanConnectionSecurityMode to
+ // CMManager::TWlanSecMode
+ switch ( connSec )
+ {
+ case EWlanConnectionSecurityOpen:
+ {
+ aSecurityMode = EWlanSecModeOpen;
+ break;
+ }
+ case EWlanConnectionSecurityWep:
+ {
+ aSecurityMode = EWlanSecModeWep;
+ break;
+ }
+ case EWlanConnectionSecurity802d1x:
+ {
+ aSecurityMode = EWlanSecMode802_1x;
+ break;
+ }
+ case EWlanConnectionSecurityWpa:
+ case EWlanConnectionSecurityWpaPsk:
+ {
+ aSecurityMode = EWlanSecModeWpa;
+ break;
+ }
+ default:
+ {
+ }
+ }
+
+ aUsesPsk = ( connSec == EWlanConnectionSecurityWpaPsk );
+
+ } // if aEnteredSsid
+
+ } // for
+
+ }
+ else if ( iProgState == EAborted )
+ {
+ LOG_WRITE( "iProgState = EAborted" );
+ User::Leave( KErrCancel );
+ }
+ else
+ {
+ LOG_WRITEF( "iProgState = ???, iStatus = %d", iStatus.Int() );
+ User::LeaveIfError( iStatus.Int() );
+ }
+
+#else // __WINS__
+
+ // we don't like warnings
+ aEnteredSsid, aBroadcast, aNetworkMode, aSecurityMode, aUsesPsk;
+
+#endif // __WINS__
+
+ return found;
+ }
+
+