--- a/wlansecuritysettings/wifiprotectedsetup/pluginsrc/wifiprotactiverunner.cpp Thu Aug 19 09:58:27 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2056 +0,0 @@
-/*
-* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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: Implements a state - machine like active object that controls Wi-Fi Protected Setup Process.
-*
-*/
-
-/*
-* %version: tr1cfwln#29 %
-*/
-
-//SYSTEM INCLUDES
-#include <wlanmgmtclient.h>
-#include <wifiprotplugin.rsg>
-#include <StringLoader.h>
-#include <AknWaitDialog.h>
-#include <cmpluginwlandef.h>
-#include <commdb.h>
-#include <WPASecuritySettingsUI.h>
-#include <WEPSecuritySettingsUI.h>
-#include <e32math.h>
-#include <cmconnectionmethoddef.h>
-#include <wlanerrorcodes.h>
-#include <utf.h>
-#include <AknIconArray.h>
-#include <AknGlobalNote.h>
-#include <AknSgcc.h>
-#include <uikon/eiksrvui.h>
-#include <AknsUtils.h>
-#include <data_caging_path_literals.hrh>
-#include <wifiprot.mbg>
-
-#include <CoreApplicationUIsSDKCRKeys.h>
-#include <e32std.h>
-#include <ConnectionUiUtilities.h>
-
-//USER INCLUDES
-#include "wifiprotlogger.h"
-#include "wifiprotactiverunner.h"
-#include "wifiprotconfirmationnotedlg.h"
-#include "wifiprotselectnetworkdlg.h"
-#include "wifiprotenterpindlg.h"
-#include "wifiprotinitiateeasysetupdlg.h"
-
-#include "featmgr.h"
-
-// valid Wep key lengths, to check wep key format
-// (wep key format depends on key length)
-const TInt KConnUiUtilsWepLengthASCII5 = 5;
-const TInt KConnUiUtilsWepLengthASCII13 = 13;
-const TInt KConnUiUtilsWepLengthASCII29 = 29;
-const TInt KConnUiUtilsWepLengthHEX10 = 10;
-const TInt KConnUiUtilsWepLengthHEX26 = 26;
-const TInt KConnUiUtilsWepLengthHEX58 = 58;
-#ifdef __WINS__
-const TInt KNumberOfEmulatedAvailableNetworks = 2;
-const TInt KIndexOfFirstEmulatedAvailableNetwork = 0;
-const TInt KIndexOfSecondEmulatedAvailableNetwork = 1;
-#endif
-
-/**
-* Management frame information element IDs.
-* needed to determine coverage
-*/
-enum T802Dot11InformationElementID
- {
- E802Dot11SsidIE = 0,
- E802Dot11SupportedRatesIE = 1,
- E802Doi11FhParameterSetIE = 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
- };
-
-const TInt KArrayGranularity = 10;
-const TInt KIconsGranularity = 4;
-
-_LIT( KWiFiFileIcons, "z:wifiprot.mbm" );
-
-_LIT8( KEapWsc, "\xFE\x00\x37\x2A\x00\x00\x00\x01");
-
-_LIT( KWiFiPanic, "Wi-Fi Protected Setup");
-
-using namespace CMManager;
-
-// ================= MEMBER FUNCTIONS =======================
-//
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::NewL
-// --------------------------------------------------------------------------
-//
-CWiFiProtActiveRunner* CWiFiProtActiveRunner::NewL(
- CWiFiProtDlgsPlugin* aParent, TInt aPriority )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::NewL" );
-
- CWiFiProtActiveRunner* self =
- new(ELeave) CWiFiProtActiveRunner( aParent, aPriority );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop(); // self
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::NewL" );
-
- return self;
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::~CWiFiProtActiveRunner
-// --------------------------------------------------------------------------
-//
-CWiFiProtActiveRunner::~CWiFiProtActiveRunner()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::~CWiFiProtActiveRunner" );
-
- // Close notifier
- iNotifier.Close();
-
- Cancel();
-
- // If the cancel has been initiated by the client, temp IAP cannot be deleted until
- // after the RNotifier Cancel() call has returned (deadlock between MPM and CMM).
- // Therefore, temp IAP cleanup must be done later.
- if ( !iClientCancelled )
- {
- TRAP_IGNORE( DeleteTempIapL() ); //we can't do much if delete fails
- }
-
- delete iWlanMgmtEngine;
-
- // if cancelled from client, wait note may still be visible
- if ( iWaitDlg )
- {
- CLOG_WRITE( "iWaitDlg->SetCallback( NULL );" );
- iWaitDlg->SetCallback( NULL );
- CLOG_WRITE( "iWaitDlg->ProcessFinishedL( );" );
- TRAP_IGNORE( iWaitDlg->ProcessFinishedL() );
- delete iWaitDlg;
- }
-
- if ( iPinDlg )
- {
- delete iPinDlg;
- }
-
- TBool cleanupCms = EFalse;
- if ( iReturn == EWiFiCancel )
- {
- cleanupCms = ETrue;
- }
-
- for ( TInt i = 0; i < iCmArray.Count();i++ )
- {
- // if we are setting up a connection, we save the settings into
- // easy wlan iap (connection method), which we shouldn't ever delete!
- if ( ( !iIsConnectionNeeded ) && cleanupCms )
- {
- //we can't do much if delete fails
- TRAP_IGNORE( iCmArray[i]->DeleteL() );
- }
- iCmArray[i]->Close();
- delete iCmArray[i];
- iCmArray[i] = NULL;
- }
-
- iCmArray.ResetAndDestroy();
- iAvailableNetworks.Close();
- delete iIapParametersArray;
- delete iScanInfo;
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::~CWiFiProtActiveRunner" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::StartProtectedSetupL
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::StartProtectedSetupAsyncL (
- const TWlanSsid& aSSid,
- RArray<TUint32>& aUids,
- RCmManagerExt& aCmManagerToUse )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::StartProtectedSetupAsyncL" );
-
- iIsConnectionNeeded = EFalse;
- iUids = &aUids;
- iCmManagerExt = &aCmManagerToUse;
- iSsid.Copy( aSSid );
- ShowInitialDialogL();
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::StartProtectedSetupAsyncL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::StartProtectedSetupConnL
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::StartProtectedSetupConnL (
- const TWlanSsid& aSSid,
- TWlanProtectedSetupCredentialAttribute&
- aNetworkSettings,
- RCmManagerExt& aCmManagerToUse )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::StartProtectedSetupConnL" );
-
- iIsConnectionNeeded = ETrue;
- iNetworkSettings = &aNetworkSettings;
- iCmManagerExt = &aCmManagerToUse;
- iSsid.Copy( aSSid );
- ShowInitialDialogL();
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::StartProtectedSetupConnL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::StartProtectedSetupL
-// --------------------------------------------------------------------------
-//
-WiFiProt::TWiFiReturn CWiFiProtActiveRunner::StartProtectedSetupL (
- const TWlanSsid& aSSid,
- RArray<TUint32>& aUids,
- RCmManagerExt& aCmManagerToUse )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::StartProtectedSetupL" );
-
- iSyncMode = ETrue;
- iIsConnectionNeeded = EFalse;
- iUids = &aUids;
- iCmManagerExt = &aCmManagerToUse;
- iSsid.Copy( aSSid );
- ShowInitialDialogL();
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::StartProtectedSetupL" );
-
- return iReturn;
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::CancelByClient()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::CancelByClient()
- {
- iClientCancelled = ETrue;
- Cancel();
- if ( iWaitDlg )
- {
- CLOG_WRITE( "Removing wait note( );" );
- iWaitDlg->SetCallback( NULL );
-
- TRAPD(err, iWaitDlg->ProcessFinishedL());
- if (err)
- {
- CLOG_WRITE( "LEAVE: iWaitDlg->ProcessFinishedL" );
-
- }
- delete iWaitDlg;
- iWaitDlg = NULL;
- }
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::ShowInitialDialogL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::ShowInitialDialogL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::ShowInitialDialogL" );
-
- if ( IsActive() == EFalse )
- {
-
- // Check if offline mode is on:
- iInOfflineMode = EFalse;
- if ( FeatureManager::FeatureSupported( KFeatureIdOfflineMode ) )
- {
- TInt connAllowed;
- CRepository* repository = CRepository::NewLC(
- KCRUidCoreApplicationUIs );
- repository->Get( KCoreAppUIsNetworkConnectionAllowed, connAllowed );
- CleanupStack::PopAndDestroy(repository); // repository
- if ( connAllowed == 0 )
- {
- iInOfflineMode = ETrue;
- }
- }
-
- if ( iInOfflineMode && iSyncMode )
- {
- // If in offline mode, query about offline mode first.
- iNextWiFiProtState = EWifiProtOfflineQuery;
- }
- else
- {
- // Else initiate easy setup.
- iNextWiFiProtState = EWiFiProtInitiateEasySetup;
- }
-
- iConfirmationDialog =
- new ( ELeave ) CWiFiProtConfirmationNoteDlg( iStatus );
- iConfirmationDialog->ExecuteLD( R_WIFIPROT_CONFIGURE_AUTO_DIALOG );
- iORequest = EWiFiProtReqConfirmDialog;
- SetActive( );
- if ( iSyncMode )
- {
- CLOG_WRITE( "CActiveSchedulerWait Started" );
- iWait.Start();
- CLOG_WRITE( "CActiveSchedulerWait Returned" );
- }
-
- }// do nothing if already active
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::ShowInitialDialogL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::ShowInitiateEasySetupDialogL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::ShowInitiateEasySetupDialogL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::ShowInitiateEasySetupDialogL" );
-
- iDestroyInitDialogLater = EFalse;
- iNextWiFiProtState = EWiFiProtUsePinCode;
- //store it, but not own it
- iInitDialog = new ( ELeave ) CWiFiProtInitiateEasySetupDlg( iStatus );
- iInitDialog->PrepareLC( R_WIFIPROT_INITIATE_EASY_SETUP_DIALOG );
- _LIT( KLinkStartTag, "\n<AknMessageQuery Link>" );
- _LIT( KLinkEndTag, "</AknMessageQuery Link>" );
-
- HBufC *messageBase =
- StringLoader::LoadLC( R_QTN_NETW_CONSET_WPS_MSG_PBC );
- HBufC* linkString1 = StringLoader::LoadLC(
- R_QTN_NETW_CONSET_WPS_MSG_LINK_USE_PIN );
-
- TInt lenMsg = messageBase->Des().Length()+
- linkString1->Des().Length()+
- KLinkStartTag().Length()+
- KLinkEndTag().Length();
-
- HBufC* message = HBufC::NewLC( lenMsg );
- TPtr messagePtr = message->Des();
-
- messagePtr.Append( messageBase->Des() );
-
- messagePtr.Append( KLinkStartTag );
- messagePtr.Append( linkString1->Des() );
- messagePtr.Append( KLinkEndTag );
-
- iInitDialog->SetMessageTextL( messagePtr );
- CleanupStack::PopAndDestroy( message );
-
- CleanupStack::PopAndDestroy( linkString1 );
- CleanupStack::PopAndDestroy( messageBase );
- TCallBack callBackLink( CWiFiProtActiveRunner::UsePinCodeLinkSelectedL,
- this );
-
- iInitDialog->SetLink( callBackLink );
- iInitDialog->RunLD();
- iORequest = EWiFiProtReqInitDialog;
- SetActive( );
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::ShowInitiateEasySetupDialogL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::ShowEnterPinOnStationDialogL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::ShowEnterPinOnStationDialogL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::ShowEnterPinOnStationDialogL" );
-
- iNextWiFiProtState = EWiFiProtStartingWaitDlg;
- TInt pin = 0;
- TTime t;
- t.HomeTime();
- TInt64 seed = t.Int64();
- do {
- pin = Math::Rand( seed );
- }
- while ( pin <(10^(KMaxPINLength-2))
- || ( ((pin / 1000000) % 10) ) == 0 );
- //last digit is checksum, so we need 7 digits
- //and the first shouldn't be 0
- pin = pin % 10000000;
- TInt checkSum = ComputeChecksum(pin);
- pin *= 10;
- pin += checkSum;
- _LIT(KPinFormat,"%d");
- iPIN.Format(KPinFormat, pin);
-
- CLOG_WRITE( "Enter pin code note" );
-
- HBufC* prompt =
- StringLoader::LoadLC( R_QTN_NETW_CONSET_WPS_INFO_ENTER_PIN_CODE, pin );
- CWiFiProtEnterPinDlg* pinDlg = new ( ELeave ) CWiFiProtEnterPinDlg( *this );
-
- CleanupStack::PushL(pinDlg);
- pinDlg->SetPromptL( *prompt );
- CleanupStack::Pop(pinDlg);
-
- CleanupStack::PopAndDestroy( prompt );
- iPinDlg = pinDlg;
- iPinDlg->ExecuteLD( R_WIFIPROT_ENTER_PIN_CODE_DIALOG );
- iPinQueryActive = ETrue;
- SetActive( );
- SetNextStateAndComplete( EWiFiProtConfiguring );
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::ShowEnterPinOnStationDialogL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::ShowWaitingDialogL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::ShowWaitingDialogL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::ShowWaitingDialogL" );
- HBufC* text = StringLoader::LoadLC(
- R_QTN_NETW_CONSET_WAIT_WPS_CONFIGURING );
- iWaitDlg = new ( ELeave ) CAknWaitDialog(
- ( REINTERPRET_CAST( CEikDialog**, &iWaitDlg )),
- ETrue );
- iWaitDlg->SetTextL( *text );
- CleanupStack::PopAndDestroy( text );
- iWaitDlg->SetCallback( this );
- iWaitDlg->SetTone( CAknNoteDialog::EConfirmationTone );
- iWaitDlg->ExecuteLD( R_WIFIPROT_WAIT_NOTE );
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::ShowWaitingDialogL" );
- }
-
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::ShowWaitingDialogAndProceedL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::ShowWaitingDialogAndProceedL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::ShowWaitingDialogAndProceedL" );
-
- iStatus = KRequestPending; //should be set by service provider
- ShowWaitingDialogL();
- SetActive( );
- SetNextStateAndComplete( EWiFiProtConfiguring );
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::ShowWaitingDialogAndProceedL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::ShowFinalNoteL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::ShowFinalNoteL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::ShowFinalNoteL" );
-
- const TInt KSettingsConfNone = 0;
- const TInt KSettingsConfOne = 1;
- const TInt KSettingsConfMulti = 2;
- const TInt KResourceIdInvalid = 0;
-
- HBufC* text = NULL;
- TInt resId = KResourceIdInvalid;
- CAknNoteDialog::TTone tone = CAknNoteDialog::ENoTone;
- TInt numberOfNetworksConfigured = 0;
- if ( iIsConnectionNeeded )
- {
- // we have one network configured if we are here
- numberOfNetworksConfigured = 1;
- }
- else
- {
- numberOfNetworksConfigured = iCmArray.Count();
- }
-
-
- //more than one = multiple
- if ( numberOfNetworksConfigured > KSettingsConfOne)
- {
- numberOfNetworksConfigured = KSettingsConfMulti;
- }
- switch ( numberOfNetworksConfigured )
- {
- case KSettingsConfOne :
- {
- CLOG_WRITE( "Show one network configured note " );
- HBufC* name;
- if ( iIsConnectionNeeded )
- {
- // We have to convert the 8-bit SSID to 16-bit
- HBufC* ssid16 = HBufC::NewLC( (*iIapParametersArray)
- [iAvailableNetworks[
- iSelectedNetworkIndex]].iSsid.Length()+1 );
- TPtr ssid16Ptr( ssid16->Des() );
- CnvUtfConverter::ConvertToUnicodeFromUtf8( ssid16Ptr,
- (*iIapParametersArray)[iAvailableNetworks[
- iSelectedNetworkIndex]].iSsid );
- ssid16Ptr.ZeroTerminate();
- name = ssid16Ptr.AllocL();
- CleanupStack::PopAndDestroy( ssid16 );
- }
- else
- {
- RCmConnectionMethodExt cm =
- iCmManagerExt->ConnectionMethodL(
- iCmArray[0]->GetIntAttributeL( ECmId ) );
- CleanupClosePushL( cm );
- name = cm.GetStringAttributeL( EWlanSSID );
- CleanupStack::PopAndDestroy( &cm );
- }
- CleanupStack::PushL( name );
- text = StringLoader::LoadL(
- R_QTN_NETW_CONSET_CONF_WPS_ONE_NETWORK_CONFIGURED , *name);
- CleanupStack::PopAndDestroy( name );
- CleanupStack::PushL( text );
- resId = R_WIFIPROT_OK_NOTE;
- tone = CAknNoteDialog::EConfirmationTone;
- break;
- }
- case KSettingsConfMulti:
- {
- CLOG_WRITE( "Show multiple networks configured note " );
- text = StringLoader::LoadLC(
- R_QTN_NETW_CONSET_CONF_WPS_MULTIPLE_NETWORKS_CONFIG );
- resId = R_WIFIPROT_OK_NOTE;
- tone = CAknNoteDialog::EConfirmationTone;
- break;
- }
- case KSettingsConfNone :
- {
- CLOG_WRITE( "Show no networks configured note " );
- text = StringLoader::LoadLC(
- R_QTN_NETW_CONSET_CONF_WPS_NO_NETWORKS_CONFIGURED );
- resId = R_WIFIPROT_INFO_NOTE;
- break;
- }
- default:
- {
- //should not ever get here
- CLOG_WRITE( "Unhandled Final Note!!!" );
- User::Leave( KErrGeneral );
- break;
- }
- }
-
- CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog(
- tone,
- CAknNoteDialog::ELongTimeout );
- dlg->SetTextL( *text );
- CleanupStack::PopAndDestroy( text );
- iStatus = KRequestPending; //should be set by service provider
- SetActive( );
- dlg->ExecuteLD( resId );
- SetNextStateAndComplete( EWiFiProtFinished );
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::ShowFinalNoteL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::DialogDismissedL
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::DialogDismissedL( TInt aButtonId )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::DialogDismissedL" );
-
- //wait dialog cancelled
- if ( aButtonId == EAknSoftkeyCancel )
- {
- CLOG_WRITE( "Cancel pressed!" );
- if (iWaitDlg)
- {
- iWaitDlgCancelled = ETrue;
- }
- iUserCancelled = ETrue;
- CancelOngoingRequest();
- }
- // iWaitDlg is destroyed, so we can null it
- iWaitDlg = NULL;
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::DialogDismissedL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::CreateTempIapL
-// --------------------------------------------------------------------------
-//
-TUint32 CWiFiProtActiveRunner::CreateTempIapL( TUint32& aTempServId )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::CreateTempIapL" );
-
- RCmConnectionMethodExt cm;
- cm = iCmManagerExt->CreateConnectionMethodL( KUidWlanBearerType );
- CleanupClosePushL(cm);
-
- // We have to convert the 8-bit SSID to 16-bit for CommsDat.
- HBufC* ssid16 = HBufC::NewLC( iSsid.Length() );
- TPtr ssid16Ptr( ssid16->Des() );
- CnvUtfConverter::ConvertToUnicodeFromUtf8( ssid16Ptr , iSsid );
- cm.SetStringAttributeL( EWlanSSID, *ssid16 );
- cm.SetStringAttributeL( ECmName, *ssid16 );
- CLOG_WRITEF( _L("SSid: ") );
- CLOG_WRITEF( *ssid16 );
- CleanupStack::PopAndDestroy( ssid16 );
-
-
- cm.SetIntAttributeL( EWlanSecurityMode, EWlanSecModeWpa2 );
- cm.UpdateL();
-
- aTempServId = cm.GetIntAttributeL( ECmIapServiceId );
- TInt32 iapID = cm.GetIntAttributeL( ECmId );
-
- CommsDat::CMDBSession* db =
- CommsDat::CMDBSession::NewL( CommsDat::CMDBSession::LatestVersion() );
- CleanupStack::PushL( db );
- CWPASecuritySettings* wpaSecSettings =
- CWPASecuritySettings::NewL( ESecurityModeWpa );
- CleanupStack::PushL( wpaSecSettings );
- User::LeaveIfError( wpaSecSettings->SetWPAEnabledEAPPlugin( KEapWsc ) );
- CLOG_WRITEF( _L("Enabled EAP plugin set: EAP WSC"));
- if (iPIN != KNullDesC)
- {
- User::LeaveIfError( wpaSecSettings->SetWPAPreSharedKey( iPIN ) );
- CLOG_WRITEF( _L("Pin set as WPA key: "));
- CLOG_WRITEF( iPIN );
- }
-
- CLOG_WRITEF( _L("WPA settings save - ECmIapServiceId in aTempServId %d"), aTempServId );
- wpaSecSettings->SaveL( aTempServId , *db, ESavingBrandNewAP, 0 );
- CLOG_WRITEF( _L("WPA settings saved!"));
- CleanupStack::PopAndDestroy( wpaSecSettings );
- db->Close();
- CleanupStack::PopAndDestroy( db );
- CleanupStack::PopAndDestroy( &cm );
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::CreateTempIapL" );
-
- return iapID;
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::RunProtectedSetup
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::RunProtectedSetup ( const TInt32 aIapId )
- {
-
- CLOG_ENTERFN( "CWiFiProtActiveRunner::RunProtectedSetup" );
-
- iNextWiFiProtState = EWiFiProtWlanMgmtEngineReturned;
- if ( iWlanMgmtEngine )
- {
- CLOG_WRITEF(_L(
- "We have a wlanmgmt engine, calling RunProtectedSetup with uid %d")
- , aIapId );
- iWlanMgmtEngine->RunProtectedSetup( iStatus, aIapId,
- *iIapParametersArray );
- iORequest = EWiFiProtReqWPS;
- SetActive( );
- }
- else
- {
- // we complete ourselves after creating these cms synchronously
- //just for wins testing
- //add 1 conneciton method;
-#ifdef __WINS__
- CLOG_WRITE( "No wlanmgmt engine, simulating... " );
- TWlanProtectedSetupCredentialAttribute tmpCred;
- tmpCred.iOperatingMode = EWlanOperatingModeInfrastructure;
- tmpCred.iAuthenticationMode = EWlanAuthenticationModeOpen;
- tmpCred.iSecurityMode = EWlanIapSecurityModeAllowUnsecure;
- tmpCred.iSsid = _L8("Available Network");
-
- TRAP_IGNORE( iIapParametersArray->AppendL(tmpCred) );
-
- tmpCred.iOperatingMode = EWlanOperatingModeInfrastructure;
- tmpCred.iAuthenticationMode = EWlanAuthenticationModeOpen;
- tmpCred.iSecurityMode = EWlanIapSecurityModeAllowUnsecure;
- tmpCred.iSsid = _L8("Available Network 2");
-
- TRAP_IGNORE( iIapParametersArray->AppendL(tmpCred) );
-
- tmpCred.iOperatingMode = EWlanOperatingModeInfrastructure;
- tmpCred.iAuthenticationMode = EWlanAuthenticationModeOpen;
- tmpCred.iSecurityMode = EWlanIapSecurityModeAllowUnsecure;
- tmpCred.iSsid = _L8("Unavailable Network");
-
- TRAP_IGNORE( iIapParametersArray->AppendL(tmpCred) );
-
- iStatus = KRequestPending;
- SetActive( );
- SetNextStateAndComplete(EWiFiProtWlanMgmtEngineReturned );
-#else
- //no engine in hardware, should not ever get here!
- User::Panic( KWiFiPanic , KErrNotFound );
-#endif
- }
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::RunProtectedSetup" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::CWiFiProtActiveRunner
-// --------------------------------------------------------------------------
-//
-CWiFiProtActiveRunner::CWiFiProtActiveRunner(
- CWiFiProtDlgsPlugin* aParent, TInt aPriority )
- : CActive( aPriority ),
- iParent( aParent ),
- iIsConnectionNeeded( EFalse ),
- iWaitDlgCancelled( EFalse ),
- iSsid( KNullDesC8 ),
- iPIN( KNullDesC ),
- iNextWiFiProtState( EWiFiProtAskConfigureAutomatically ),
- iReturn( EWiFiCancel ),
- iUsePin( EFalse ),
- iError( KErrNone ),
- iPinQueryActive( EFalse ),
- iWaitNoteNeeded( EFalse ),
- iInitDialog( NULL ),
- iClientCancelled( EFalse )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::CWiFiProtActiveRunner" );
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::CWiFiProtActiveRunner" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::ConstructL
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::ConstructL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::ConstructL" );
-
- CActiveScheduler::Add( this );
-#ifndef __WINS__
- iWlanMgmtEngine = CWlanMgmtClient::NewL();
- iScanInfo = CWlanScanInfo::NewL();
-#endif // !__WINS__
- iIapParametersArray = new (ELeave)
- CArrayFixSeg<TWlanProtectedSetupCredentialAttribute>
- ( KArrayGranularity );
-
- User::LeaveIfError(iNotifier.Connect()); // Connects to the extended notifier server
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::ConstructL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::DoCancel
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::DoCancel()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::DoCancel" );
-
- CancelOngoingRequest();
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::DoCancel" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::RunL
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::RunL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::RunL" );
-
- // reset the async request id
- iORequest = EWiFiProtReqNone;
-
- if ( iClientCancelled )
- {
- // no further actions needed here, message completion taken care of
- // in the notifier
- return;
- }
-
- CLOG_WRITEF( _L(" iNextWiFiProtState: %d"), iNextWiFiProtState );
- if ( iNextWiFiProtState == EWiFiProtWlanMgmtEngineReturned )
- {
- iORequest = EWiFiProtReqNone;
- //if we have a dialog and configuration is finished,
- // store error code for destroying dialog
- iError = iStatus.Int();
- CleanupTempIapL();
- }
- else if ( iNextWiFiProtState == EWiFiProtDestroyWaitNote )
- {
- DestroyWaitDialog();
- }
- else
- {
- if ( iUserCancelled )
- {
- iStatus = KErrCancel;
- }
-
- if ( iStatus.Int() == KErrNone ) //no error
- {
- HandleNoErrorL();
- }
- // error or cancel
- // try to handle error, if can't, just cancel
- else if ( !HandleErrorL( iStatus.Int() ) )
- {
- if ( (iStatus.Int() != KErrAbort) &&
- (iNextWiFiProtState == EWifiProtOfflineQuery || iNextWiFiProtState == EWiFiProtInitiateEasySetup) )
- {
- // Use WPS to configure or connect in offline mode? -> No -> Continue the traditional way without WPS
- iReturn = EWifiNoAuto;
- }
- else
- {
- iReturn = EWiFiCancel;
- }
-
- if ( iSyncMode )
- {
- if ( iWait.IsStarted() )
- {
- iWait.AsyncStop();
- }
- }
- else
- {
- iParent->CompleteProcessL( iReturn );
- }
- }
- }
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::RunL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::SetNextStateAndComplete
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::SetNextStateAndComplete(
- TWiFiProtStates aNextState,
- TInt aError )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::SetNextStateAndComplete" );
-
- iNextWiFiProtState = aNextState;
- CLOG_WRITEF( _L(" aNextState: %d"), aNextState );
- TRequestStatus* pS = &iStatus;
- User::RequestComplete( pS, aError );
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::SetNextStateAndComplete" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::ConfigureL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::ConfigureL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::ConfigureL" );
- iWaitNoteNeeded = ETrue;
- iTempIapId = CreateTempIapL( iTempServId );
- CLOG_WRITEF( _L("Temp Iap created! Id: %d"), iTempIapId );
- RunProtectedSetup( iTempServId );
- // do not complete self, waiting for engine or user cancel to complete us
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::ConfigureL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::EvaluateResult
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::EvaluateResult()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::EvaluateResult" );
- if (iError == KErrNone)
- {
- if ( iIsConnectionNeeded )
- {
- TRAPD(err, CheckNetworkAvailabilityL());
- if (err)
- {
- CLOG_WRITE(
- "LEAVE: CheckNetworkAvailabilityL" );
- }
- }
- else
- {
- CLOG_WRITE(
- "SetNextStateAndComplete( EWiFiProtSettingsConfNote );" );
- SetNextStateAndComplete( EWiFiProtSettingsConfNote );
- }
- }
- else
- { //now we complete with the error code as dialog is finished
- CLOG_WRITE( "SetNextStateAndComplete( EWiFiProtFinished, iError );" );
- SetNextStateAndComplete( EWiFiProtFinished , iError );
- }
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::EvaluateResult" );
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::DestroyWaitDialog
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::DestroyWaitDialog()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::DestroyWaitDialog" );
-
- CLOG_WRITE( "SetActive();" );
- SetActive();
- iStatus = KRequestPending; //should be set by service provider
- iWaitNoteNeeded = EFalse;
- if( !iWaitDlgCancelled )
- {
- // iWaitDlg possibly wasn't even shown...
- if ( iWaitDlg )
- {
- CLOG_WRITE( "iWaitDlg->SetCallback( NULL );" );
- iWaitDlg->SetCallback( NULL );
- CLOG_WRITE( "iWaitDlg->ProcessFinishedL( );" );
-
- TRAPD(err, iWaitDlg->ProcessFinishedL());
- if (err)
- {
- CLOG_WRITE( "LEAVE: iWaitDlg->ProcessFinishedL( );" );
- }
-
- CLOG_WRITE( "delete iWaitDlg;" );
- delete iWaitDlg;
- iWaitDlg = NULL;
- }
- if ( iPinQueryActive ) //waiting for PIN Query
- {
- CLOG_WRITE(
- "SetNextStateAndComplete( EWiFiProtWaitForPINQuery );" );
- // if pin query is still active, remove the cancel...
- if ( iPinQueryActive && iPinDlg)
- {
- iPinDlg->RemoveCancel();
- }
- iNextWiFiProtState = EWiFiProtWaitForPINQuery;
- }
- else
- {
- EvaluateResult();
- }
- }
- else
- {
- CLOG_WRITE(
- "SetNextStateAndComplete( EWiFiProtFinished, KErrCancel );" );
- SetNextStateAndComplete( EWiFiProtFinished , KErrCancel );
- }
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::DestroyWaitDialog" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::ComputeChecksum
-// --------------------------------------------------------------------------
-//
-TInt CWiFiProtActiveRunner::ComputeChecksum(TInt aPin)
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::ComputeChecksum" );
-
- TInt accum = 0;
- aPin *= 10;
- accum += 3 * ((aPin / 10000000) % 10);
- accum += 1 * ((aPin / 1000000) % 10);
- accum += 3 * ((aPin / 100000) % 10);
- accum += 1 * ((aPin / 10000) % 10);
- accum += 3 * ((aPin / 1000) % 10);
- accum += 1 * ((aPin / 100) % 10);
- accum += 3 * ((aPin / 10) % 10);
- TInt digit = (accum % 10);
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::ComputeChecksum" );
-
- return (10 - digit) % 10;
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::CreateAllIapsL
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::CreateAllIapsL()
- {
- CreateIapL(0);
- iStatus = KRequestPending; //should be set by service provider
- SetActive();
- if ( iIapParametersArray->Count() )
- {
- //another cm, another round
- SetNextStateAndComplete( EWiFiProtCreateAllIaps );
- }
- else
- {
- //cm creation finished
- SetNextStateAndComplete( EWiFiProtDestroyWaitNote );
- }
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::CreateIapL
-// --------------------------------------------------------------------------
-//
-TUint32 CWiFiProtActiveRunner::CreateIapL( const TInt aIndex )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::CreateIapL" );
-
- TInt32 iapID = 0;
- if ( iIapParametersArray->Count() )
- {
- RCmConnectionMethodExt cm;
- cm = iCmManagerExt->CreateConnectionMethodL( KUidWlanBearerType );
- CleanupClosePushL(cm);
- iapID = SetIapDataL( aIndex, cm );
- CleanupStack::Pop( &cm );
-
- RCmConnectionMethodExt* cmToAppend =
- new (ELeave) RCmConnectionMethodExt(cm);
- CleanupStack::PushL(cmToAppend);
- iCmArray.Append( cmToAppend ); //ownership transferred
- CleanupStack::Pop( cmToAppend );
- CLOG_WRITEF( _L("Cm appended to array: ") );
-
-
- (*iIapParametersArray).Delete(aIndex);
- }
-
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::CreateIapL" );
-
- return iapID;
- }
-
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::SetIapDataL
-// --------------------------------------------------------------------------
-//
-TUint32 CWiFiProtActiveRunner::SetIapDataL( const TInt aIndex,
- RCmConnectionMethodExt& aCmToSet )
- {
- // We have to convert the 8-bit SSID to 16-bit for CommsDat.
- HBufC* ssid16 =
- HBufC::NewLC( ( *iIapParametersArray)[aIndex].iSsid.Length() );
- TPtr ssid16Ptr( ssid16->Des() );
- CnvUtfConverter::ConvertToUnicodeFromUtf8(
- ssid16Ptr , (*iIapParametersArray)[aIndex].iSsid );
-
- aCmToSet.SetStringAttributeL( ECmName, *ssid16 );
- aCmToSet.SetStringAttributeL( EWlanSSID, *ssid16 );
- CLOG_WRITEF( _L("Parameters from wlan mgmt engine: ") );
- CLOG_WRITEF( _L("SSid: ") );
- CLOG_WRITEF( *ssid16 );
- CleanupStack::PopAndDestroy( ssid16 );
-
- TInt connMode = EAdhoc;
- switch ( (*iIapParametersArray)[aIndex].iOperatingMode )
- {
- case EWlanOperatingModeAdhoc:
- {
- CLOG_WRITEF( _L("Operating Mode: Adhoc") );
- break;
- }
- case EWlanOperatingModeInfrastructure:
- {
- CLOG_WRITEF( _L("Operating Mode: Infra") );
- connMode = EInfra;
- break;
- }
- default:
- {
- CLOG_WRITEF( _L("Operating Mode: Not Supported") );
- User::Leave( KErrNotSupported );
- break;
- }
- }
- aCmToSet.SetIntAttributeL( EWlanConnectionMode, connMode );
-
- CMManager::TWlanSecMode secMode = EWlanSecModeOpen;
- switch( (*iIapParametersArray)[aIndex].iSecurityMode )
- {
- case EWlanIapSecurityModeAllowUnsecure:
- {
- CLOG_WRITEF( _L("Security Mode: Open") );
- secMode = EWlanSecModeOpen;
- break;
- }
-
- case EWlanIapSecurityModeWep:
- {
- CLOG_WRITEF( _L("Security Mode: Wep") );
- secMode = EWlanSecModeWep;
- break;
- }
-
- case EWlanIapSecurityMode802d1x:
- {
- CLOG_WRITEF( _L("Security Mode: 802_1x") );
- secMode = EWlanSecMode802_1x;
- break;
- }
-
- // EWlanIapSecurityModeWpa and
- // EWlanIapSecurityModeWpa2Only are handled as wpa
- case EWlanIapSecurityModeWpa:
- case EWlanIapSecurityModeWpa2Only:
- {
- CLOG_WRITEF( _L("Security Mode: wpa") );
- secMode = EWlanSecModeWpa;
- break;
- }
-
- default:
- {
- User::Leave( KErrNotSupported );
- }
- }
-
- aCmToSet.SetIntAttributeL( EWlanSecurityMode, secMode );
-
- aCmToSet.UpdateL();
- TInt32 wlanServId = aCmToSet.GetIntAttributeL( ECmIapServiceId );
- TInt32 iapID = aCmToSet.GetIntAttributeL( ECmId );
-
- CommsDat::CMDBSession* db =
- CommsDat::CMDBSession::NewL(
- CommsDat::CMDBSession::LatestVersion() );
- CleanupStack::PushL( db );
-
- switch( (*iIapParametersArray)[aIndex].iSecurityMode )
- {
- case EWlanIapSecurityModeWep:
- {
- SaveWepSecuritySettingsL(
- ( *iIapParametersArray )[aIndex], wlanServId, *db );
- break;
- }
- // EWlanIapSecurityModeWpa and
- // EWlanIapSecurityModeWpa2Only are handled as wpa
- case EWlanIapSecurityModeWpa:
- case EWlanIapSecurityModeWpa2Only:
- {
- CWPASecuritySettings* wpaSecSettings =
- CWPASecuritySettings::NewL( ESecurityModeWpa );
- CleanupStack::PushL( wpaSecSettings );
- if ((*iIapParametersArray)
- [aIndex].iWpaPreSharedKey != KNullDesC8)
- {
- TBuf<KWlanWpaPskMaxLength> wpaBuf16;
- wpaBuf16.Copy((*iIapParametersArray)
- [aIndex].iWpaPreSharedKey);
- User::LeaveIfError(
- wpaSecSettings->SetWPAPreSharedKey( wpaBuf16 ) );
- CLOG_WRITEF( _L("wpa psk set: ") );
- CLOG_WRITEF( wpaBuf16 );
-
- }
-
- TTypeOfSaving typeOfSaving = ESavingBrandNewAP;
-
- if ( iapID == iCmManagerExt->EasyWlanIdL() )
- {
- typeOfSaving = ESavingEditedAP;
- }
-
- wpaSecSettings->SaveL( wlanServId, *db,
- typeOfSaving, 0 ) ;
-
- CleanupStack::PopAndDestroy( wpaSecSettings );
- break;
- }
- // EWlanIapSecurityMode802d1x and
- // EWlanConnectionSecurityOpen - no key needs to be saved
- case EWlanIapSecurityMode802d1x:
- case EWlanConnectionSecurityOpen:
- default:
- {
- break;
- }
- }
-
- db->Close();
- CleanupStack::PopAndDestroy( db );
- return iapID;
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::CleanupTempIapL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::CleanupTempIapL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::CleanupTempIapL" );
-
- //we don't need the temp iap anymore, delete it
- //shouldn't be any errors, because nobody else knows about our temp iap
- DeleteTempIapL();
- SetActive();
- iStatus = KRequestPending; //should be set by service provider
- if ( iError == KErrNone )
- {
- if ( iIsConnectionNeeded )
- {
- StartWlanScan(); //scan wlan before we close the wait dialog
- }
- else
- {
- //start creating iaps
- SetNextStateAndComplete( EWiFiProtCreateAllIaps );
- }
- }
- else
- {
- //don't create iaps or scan wlan, we had an error!
- SetNextStateAndComplete( EWiFiProtDestroyWaitNote );
- }
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::CleanupTempIapL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::DeleteTempIapL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::DeleteTempIapL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::DeleteTempIapL" );
-
- if ( iTempIapId )
- {
- const TInt KInvalidUid = 0;
-
- CLOG_WRITE( "Calling iCmManagerExt->ConnectionMethodL" );
-
- RCmConnectionMethodExt cm =
- iCmManagerExt->ConnectionMethodL(iTempIapId);
-
- CLOG_WRITE( "Calling cm.DeleteL" );
-
- TRAPD(err, cm.DeleteL());
- CLOG_WRITEF( _L("Temp Iap deleted! Error code: %d"), err );
- cm.Close();
- iTempIapId = KInvalidUid;
- }
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::DeleteTempIapL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::IsWepFormatHexL
-// --------------------------------------------------------------------------
-//
-TBool CWiFiProtActiveRunner::IsWepFormatHexL( TInt aLength )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::IsWepFormatHexL" );
-
- if ( ( aLength == KConnUiUtilsWepLengthASCII5 ) ||
- ( aLength == KConnUiUtilsWepLengthASCII13 ) ||
- ( aLength == KConnUiUtilsWepLengthASCII29 ) )
- {
- return EFalse;
- }
- else if ( ( aLength == KConnUiUtilsWepLengthHEX10 ) ||
- ( aLength == KConnUiUtilsWepLengthHEX26 ) ||
- ( aLength == KConnUiUtilsWepLengthHEX58 ) )
- {
- return ETrue;
- }
- else
- {
- User::Leave( KErrNotSupported );
- }
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::IsWepFormatHexL" );
-
- return EFalse;
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::SaveWepSecuritySettingsL
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::SaveWepSecuritySettingsL(
- TWlanProtectedSetupCredentialAttribute
- aCredentialAttribute,
- TUint32 aWlanServiceId,
- CommsDat::CMDBSession& aDb )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::SaveWepSecuritySettingsL" );
-
- CWEPSecuritySettings* wepSecSettings = CWEPSecuritySettings::NewL( );
- CleanupStack::PushL( wepSecSettings );
- TInt keyIndex = 0;
- // wep key 1
- SetWepKeyL( *wepSecSettings, aCredentialAttribute.iWepKey1, keyIndex );
- keyIndex++;
- // wep key 2
- SetWepKeyL( *wepSecSettings, aCredentialAttribute.iWepKey2, keyIndex );
- keyIndex++;
- // wep key 3
- SetWepKeyL( *wepSecSettings, aCredentialAttribute.iWepKey3, keyIndex );
- keyIndex++;
- // wep key 4
- SetWepKeyL( *wepSecSettings, aCredentialAttribute.iWepKey4, keyIndex );
-
- //should be the same enum
- wepSecSettings->SetKeyInUse( (CWEPSecuritySettings::TWEPKeyInUse)
- aCredentialAttribute.iWepDefaultKey );
- CLOG_WRITEF( _L("Wep key in use %d:"),
- aCredentialAttribute.iWepDefaultKey );
-
- CWEPSecuritySettings::TWEPAuthentication auth =
- CWEPSecuritySettings::EAuthOpen;
-
- switch( aCredentialAttribute.iAuthenticationMode )
- {
- case EWlanAuthenticationModeOpen:
- {
- CLOG_WRITEF( _L("Authentication mode: open") );
- break;
- }
- case EWlanAuthenticationModeShared:
- {
- CLOG_WRITEF( _L("Authentication mode: shared") );
- auth = CWEPSecuritySettings::EAuthShared;
- break;
- }
- default:
- {
- break;
- }
- }
-
- //should be the same enum
- wepSecSettings->SetAuthentication(
- (CWEPSecuritySettings::TWEPAuthentication) auth );
- wepSecSettings->SaveL( aWlanServiceId, aDb ) ;
- CleanupStack::PopAndDestroy( wepSecSettings );
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::SaveWepSecuritySettingsL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::HandleErrorL()
-// --------------------------------------------------------------------------
-//
-TBool CWiFiProtActiveRunner::HandleErrorL( TInt aErrorCode )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::HandleErrorL" );
-
- CLOG_WRITEF( _L("Error code: %d"), aErrorCode );
- if (iWaitDlg) //close dialog first
- {
- TInt error = iStatus.Int();
- iStatus = KRequestPending; //should be set by service provider
- SetActive( );
- SetNextStateAndComplete( EWiFiProtDestroyWaitNote , error );
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::HandleErrorL" );
-
- return ETrue;
- }
- else
- {
- TWiFiProtStates nextState = EWiFiProtFinished;
- TInt textResId = 0;
- TInt status = KErrCancel;
- TBool ret = ETrue;
- switch (aErrorCode)
- {
- // Error codes are in the original order
- case KErrWlanProtectedSetupOOBInterfaceReadError:
- case KErrWlanProtectedSetupDecryptionCRCFailure:
- // the same handling here for this error code too
- {
- textResId = R_QTN_ERR_WLAN_SC_CONFIG_FAILED_TRY_AGAIN;
- break;
- }
- case KErrWlanProtectedSetup5_0ChannelNotSupported:
- case KErrWlanProtectedSetup2_4ChannelNotSupported:
- // the same handling here for this error code too
- {
- textResId = R_QTN_ERR_WLAN_SC_CONFIG_FAILED;
- break;
- }
- case KErrWlanSignalTooWeak:
- {
- textResId = R_QTN_ERR_WLAN_SIGNAL_TOO_WEAK;
- break;
- }
- case KErrWlanProtectedSetupNetworkAuthFailure:
- {
- status = KErrNone;
- textResId = R_QTN_ERR_WLAN_SC_CONFIG_FAILED_TRY_AGAIN;
- if ( iUsePin )
- {
- // ...pin code dialog if pin code was used
- nextState = EWiFiProtUsePinCode;
- }
- else
- {
- // ... or initiate WPS dialog if push button was used
- nextState = EWiFiProtInitiateEasySetup;
- }
- break;
- }
- case KErrWlanProtectedSetupNetworkAssociationFailure:
- {
- textResId = R_QTN_ERR_WLAN_NETWORK_NOT_FOUND;
- break;
- }
- case KErrWlanProtectedSetupNoDHCPResponse:
- case KErrWlanProtectedSetupFailedDHCPConfig:
- // the same handling here for this error code too
- case KErrWlanProtectedSetupIPAddressConflict:
- // the same handling here for this error code too
- case KErrWlanProtectedSetupCouldNotConnectToRegistrar:
- // the same handling here for this error code too
- {
- textResId = R_QTN_ERR_WLAN_SC_CONFIG_FAILED;
- break;
- }
- case KErrWlanProtectedSetupMultiplePBCSessionsDetected:
- {
- nextState = EWiFiProtInitiateEasySetup;
- status = KErrNone;
- textResId =
- R_QTN_ERR_WLAN_SC_CONFIG_FAILED_MULTIPLE_PB_SESSIONS;
- break;
- }
- case KErrWlanProtectedSetupRogueActivitySuspected:
- {
- nextState = EWiFiProtUsePinCode;
- iUsePin = ETrue;
- status = KErrNone;
- textResId =
- R_QTN_ERR_WLAN_SC_CONFIG_FAILED_ROGUE_ACTIVITY;
- break;
- }
- case KErrWlanProtectedSetupDeviceBusy:
- case KErrWlanProtectedSetupSetupLocked:
- // the same handling here for this error code too
- case KErrWlanProtectedSetupMessageTimeout:
- // the same handling here for this error code too
- {
- textResId = R_QTN_ERR_WLAN_SC_CONFIG_FAILED_TRY_AGAIN;
- break;
- }
- case KErrWlanProtectedSetupRegistrationSessionTimeout:
- {
- textResId = R_QTN_ERR_WLAN_SC_CONFIG_FAILED_TRY_AGAIN;
- status = KErrNone;
- // Registration session timeout, return to ...
- if ( iUsePin )
- {
- // ...pin code dialog if pin code was used
- nextState = EWiFiProtUsePinCode;
- }
- else
- {
- // ... or initiate WPS dialog if push button was used
- nextState = EWiFiProtInitiateEasySetup;
- }
- break;
- }
- case KErrWlanProtectedSetupDevicePasswordAuthFailure:
- {
- status = KErrNone;
- textResId = R_QTN_ERR_WLAN_SC_CONFIG_FAILED_TRY_AGAIN;
- if ( iUsePin )
- {
- // ...pin code dialog if pin code was used
- nextState = EWiFiProtUsePinCode;
- }
- else
- {
- // ... or initiate WPS dialog if push button was used
- nextState = EWiFiProtInitiateEasySetup;
- }
- break;
- }
- case KErrWlanProtectedSetupPINMethodNotSupported:
- {
- textResId =
- R_QTN_ERR_WLAN_SC_CONFIG_FAILED_PIN_NOT_SUPPORTED;
- break;
- }
- case KErrWlanProtectedSetupPBMethodNotSupported:
- {
- textResId =
- R_QTN_ERR_WLAN_SC_CONFIG_FAILED_PB_NOT_SUPPORTED;
- break;
- }
- case KErrWlanConnAlreadyActive:
- {
- textResId = R_QTN_WLAN_INFO_CONNECTION_ALREADY_ACTIVE;
- break;
- }
- default:
- {
- ret = EFalse;
- }
- }
- if (ret)
- {
- HBufC* text = StringLoader::LoadLC( textResId );
- CLOG_WRITEF( *text );
- CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog(
- CAknNoteDialog::EErrorTone,
- CAknNoteDialog::ELongTimeout );
- dlg->SetTextL( *text );
- CleanupStack::PopAndDestroy( text );
- iStatus = KRequestPending; //should be set by service provider
- SetActive( );
- dlg->ExecuteLD( R_WIFIPROT_ERROR_NOTE );
- SetNextStateAndComplete( nextState , status );
- }
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::HandleErrorL" );
-
- return ret;
- }
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::ShowOfflineQuery
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::ShowOfflineQuery()
- {
- iNextWiFiProtState = EWiFiProtInitiateEasySetup;
-
- iNotifier.StartNotifierAndGetResponse(iStatus,KUidCOfflineWlanNoteDlg,
- KNullDesC8(),
- iOfflineReply );
- SetActive();
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::HandleNoErrorL
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::HandleNoErrorL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::HandleNoErrorL" );
-
- switch (iNextWiFiProtState)
- {
- case EWifiProtOfflineQuery :
- {
- ShowOfflineQuery();
- break;
- }
- case EWiFiProtInitiateEasySetup :
- {
- ShowInitiateEasySetupDialogL();
- break;
- }
- case EWiFiProtUsePinCode :
- {
- if ( iUsePin )
- {
- // dismiss the link dialog now
- if ( iDestroyInitDialogLater )
- {
- iInitDialog->TryExitL( EAknSoftkeyView );
- iDestroyInitDialogLater = EFalse;
- }
- ShowEnterPinOnStationDialogL();
- }
- else
- {
- iStatus = KRequestPending;
- SetActive( );
- SetNextStateAndComplete( EWiFiProtStartingWaitDlg );
- }
- break;
- }
- case EWiFiProtStartingWaitDlg :
- {
- ShowWaitingDialogAndProceedL( );
- break;
- }
- case EWiFiProtConfiguring :
- {
- ConfigureL();
- break;
- }
- case EWiFiProtCreateAllIaps :
- {
- CreateAllIapsL();
- break;
- }
-
- // when we are here, wlan scan is finished
- case EWiFiProtWlanScan :
- {
- iORequest = EWiFiProtReqNone;
- iStatus = KRequestPending;
- SetActive( );
- SetNextStateAndComplete( EWiFiProtDestroyWaitNote );
- break;
- }
- case EWiFiProtSelectConnection :
- {
- SelectConnectionL();
- break;
- }
-
- case EWiFiProtSettingsConfNote :
- {
- ShowFinalNoteL( );
- break;
- }
- case EWiFiProtFinished :
- {
- iReturn = EWiFiOK;
-
- if ( iIsConnectionNeeded )
- {
- *iNetworkSettings = (*iIapParametersArray)[
- iAvailableNetworks[iSelectedNetworkIndex] ];
- }
- else
- {
- // Copy the results into the output array
- for (TInt i = 0; i< iCmArray.Count();i++ )
- {
- CLOG_WRITEF( _L(
- "Copy the results into the output array, i == %d"), i );
- if ( iUids == NULL)
- {
- User::Panic( KWiFiPanic, KErrNotSupported );
- }
- iUids->Append( iCmArray[i]->GetIntAttributeL( ECmId ) );
- }
- }
-
- if ( iSyncMode )
- {
- if (iWait.IsStarted() )
- {
- iWait.AsyncStop();
- }
- }
- else
- {
- iParent->CompleteProcessL( iReturn );
- }
- break;
- }
- default:
- {
- //should not ever get here
- CLOG_WRITE( "Unhandled WiFiProtState!!!" );
- User::Leave( KErrGeneral );
- break;
- }
- }
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::HandleNoErrorL" );
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::PinQueryExitL
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::PinQueryExitL( TInt aResponse )
- {
- iPinQueryActive = EFalse;
- iPinDlg = NULL;
- if ( aResponse == KErrNone )
- {
-
- if ( iWaitNoteNeeded )
- {
- ShowWaitingDialogL();
- }
- else
- {
- EvaluateResult(); //we were just waiting for PIN query to exit
- }
- }
- else
- {
- iUserCancelled = ETrue;
- CancelOngoingRequest();
- }
- }
-
-// --------------------------------------------------------------------------
-// void CWiFiProtActiveRunner::DoUsePinCodeLinkSelectedL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::DoUsePinCodeLinkSelectedL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::DoUsePinCodeLinkSelectedL" );
- if ( !iDestroyInitDialogLater )
- {
- iUsePin = ETrue;
- TRequestStatus* pS = &iStatus;
- User::RequestComplete( pS, KErrNone );
- iDestroyInitDialogLater = ETrue;
- }
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::DoUsePinCodeLinkSelectedL" );
- }
-
-// --------------------------------------------------------------------------
-// void CWiFiProtActiveRunner::StartWlanScan()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::StartWlanScan()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::StartWlanScan" );
- // this flag is needed to store the cancel because we cannot
- // cancel wlan scan itself
-#ifdef __WINS__
- SetNextStateAndComplete( EWiFiProtWlanScan );
-#else
- iORequest = EWiFiProtReqWlanScan;
- iNextWiFiProtState = EWiFiProtWlanScan;
- iWlanMgmtEngine->GetScanResults( iStatus, *iScanInfo );
-#endif
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::StartWlanScan" );
- }
-
-// --------------------------------------------------------------------------
-// void CWiFiProtActiveRunner::CheckNetworkAvailabilityL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::CheckNetworkAvailabilityL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::CheckNetworkAvailabilityL" );
-
- iAvailableNetworks.Reset();
- TBool found = EFalse;
- for (TInt i = 0; i < iIapParametersArray->Count(); i++ )
- {
- found = EFalse;
-#ifdef __WINS__
- for (TInt j = 0; j<KNumberOfEmulatedAvailableNetworks; j++)
-#else
- for ( iScanInfo->First(); (!iScanInfo->IsDone())
- && (!found); iScanInfo->Next() )
-#endif
- {
- TUint8 ieLen( 0 );
- const TUint8* ieData;
- TBuf8<KWlanMaxSsidLength> ssid8;
-#ifdef __WINS__
- TBuf8<KWlanMaxSsidLength> ssidData;
- ieData = ssidData.PtrZ();
- switch (j)
- {
- case KIndexOfFirstEmulatedAvailableNetwork:
- {
- ssidData = _L8("Available Network");
- break;
- }
- case KIndexOfSecondEmulatedAvailableNetwork:
- {
- ssidData = _L8("Available Network 2");
- break;
- }
- default:
- {
- User::Panic( KWiFiPanic , KErrNotFound );
- break;
- }
- }
- ieLen = ssidData.Length();
- TInt ret = KErrNone;
-#else
- TInt ret = iScanInfo->InformationElement( E802Dot11SsidIE, ieLen,
- &ieData );
-#endif
- User::LeaveIfError( ret );
- if ( ieLen )
- {
- CLOG_WRITE( "Starting copying ssid" );
- // get the ssid
- ssid8.Copy( ieData, ieLen );
- CLOG_WRITE( "SSID copied" );
- if ( !(*iIapParametersArray)[i].iSsid.Compare( ssid8 ) )
- {
- iAvailableNetworks.Append(i);
- found = ETrue;
- }
- }
- }
- }
-
- if (iAvailableNetworks.Count() == 1)
- {
- // only one network available, go to confirmation note
- iSelectedNetworkIndex = 0;
- SetNextStateAndComplete( EWiFiProtSettingsConfNote );
- }
- else if (iAvailableNetworks.Count() > 1)
- {
- // more are available, select connection dialog
- SetNextStateAndComplete( EWiFiProtSelectConnection );
- }
- else
- {
- // no wlan networks found note
- ShowNoWlanNetworksNoteL();
- }
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::CheckNetworkAvailabilityL" );
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::SelectConnection
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::SelectConnectionL( )
- {
- CDesCArrayFlat* items =
- new ( ELeave ) CDesCArrayFlat( KArrayGranularity );
- CleanupStack::PushL( items );
-
- _LIT( KListBoxItemFormat, "%d\t%s\t" );
- const TInt KListBoxItemFormatLength = 4;
- TBuf<KWlanMaxSsidLength+KListBoxItemFormatLength+1> buf;
- for (TInt i = 0; i < iAvailableNetworks.Count(); i++ )
- {
- // We have to convert the 8-bit SSID to 16-bit
- HBufC* ssid16 = HBufC::NewLC( (*iIapParametersArray)
- [iAvailableNetworks[i]].iSsid.Length()+1 );
- TPtr ssid16Ptr( ssid16->Des() );
- CnvUtfConverter::ConvertToUnicodeFromUtf8( ssid16Ptr,
- (*iIapParametersArray)[iAvailableNetworks[i]].iSsid );
- ssid16Ptr.ZeroTerminate();
- buf.Format( KListBoxItemFormat,
- 0/*we use only one icon*/, ssid16->Ptr() );
- CleanupStack::PopAndDestroy( ssid16 );
- items->AppendL(buf);
- }
- CAknIconArray* icons = new( ELeave ) CAknIconArray( KIconsGranularity );
- CleanupStack::PushL( icons );
- //creating icon
- TAknsItemID id;
- MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
-
- TParse mbmFile;
- User::LeaveIfError( mbmFile.Set( KWiFiFileIcons,
- &KDC_BITMAP_DIR,
- NULL ) );
-
- CGulIcon* icon = AknsUtils::CreateGulIconL(
- skinInstance,
- id,
- mbmFile.FullName(),
- EMbmWifiprotQgn_prop_wlan_bearer,
- EMbmWifiprotQgn_prop_wlan_bearer_mask );
- ///
-
- CleanupStack::PushL(icon);
- icons->AppendL( icon );
- CleanupStack::Pop(); //icon array takes ownership
- // we are finished, don't create any iaps in connection mode!
- iNextWiFiProtState = EWiFiProtFinished;
- CWiFiProtSelectNetworkDlg* dlg =
- new ( ELeave ) CWiFiProtSelectNetworkDlg(iStatus ,
- iSelectedNetworkIndex,
- items, icons );
- CleanupStack::Pop( icons ); // list takes ownership
- CleanupStack::Pop( items );// list takes ownership
- dlg->PrepareAndRunLD( );
- SetActive();
- }
-
-// --------------------------------------------------------------------------
-// void CWiFiProtActiveRunner::ShowNoWlanNetworksNoteL()
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::ShowNoWlanNetworksNoteL()
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::ShowNoWlanNetworksNoteL" );
- HBufC* stringLabel = StringLoader::LoadLC(
- R_QTN_WLAN_INFO_NO_NETWORKS_FOUND );
-
- RAknUiServer* globalNote = CAknSgcClient::AknSrv();
- if ( globalNote->Handle() )
- {
- globalNote->ShowGlobalNoteL( *stringLabel,
- EAknGlobalInformationNote );
- }
- CleanupStack::PopAndDestroy( stringLabel );
- SetNextStateAndComplete( EWiFiProtFinished );
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::ShowNoWlanNetworksNoteL" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::CancelOngoingRequest
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::CancelOngoingRequest()
- {
-
- CLOG_ENTERFN( "CWiFiProtActiveRunner::CancelOngoingRequest" );
-
- switch ( iORequest )
- {
- case EWiFiProtReqConfirmDialog:
- {
- // Remove the showing dialog and cancel the request
- delete iConfirmationDialog;
- iConfirmationDialog = NULL;
- TRequestStatus* pS = &iStatus;
- User::RequestComplete( pS, KErrCancel );
- break;
- }
- case EWiFiProtReqInitDialog:
- {
- // Remove the showing dialog and cancel the request
- delete iInitDialog;
- iInitDialog = NULL;
- TRequestStatus* pS = &iStatus;
- User::RequestComplete( pS, KErrCancel );
- break;
- }
- case EWiFiProtReqWPS :
- {
- if ( iPinQueryActive )
- {
- delete iPinDlg;
- iPinDlg = NULL;
- }
- if ( iWlanMgmtEngine )
- {
- CLOG_WRITE( "Calling WPS cancel!" );
- iWlanMgmtEngine->CancelProtectedSetup();
- CLOG_WRITE( "WPS cancel called!" );
- }
- break;
- }
- case EWiFiProtReqWlanScan :
- {
- iWlanMgmtEngine->CancelGetScanResults();
- break;
- }
- case EWiFiProtReqNone :
- {
- // it is possible, especially in emulator, that the pin dialog
- // is still visible at this point
- if ( iPinQueryActive )
- {
- delete iPinDlg;
- iPinDlg = NULL;
- TRequestStatus* pS = &iStatus;
- User::RequestComplete( pS, KErrCancel );
- }
- // set CancelCalled flag to make RunL start shutdown next time
- iUserCancelled = ETrue;
- break;
- }
-
- default:
- {
- // should not ever get here
- }
- }
-
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::CancelOngoingRequest" );
-
- }
-
-// --------------------------------------------------------------------------
-// CWiFiProtActiveRunner::SetWepKeyL
-// --------------------------------------------------------------------------
-//
-void CWiFiProtActiveRunner::SetWepKeyL( CWEPSecuritySettings&
- aWepSecSettings,
- TWlanWepKey& aWepKey,
- TInt aKeyNumber )
- {
- if ( aWepKey != KNullDesC8)
- {
- TBool wepKeyInAsciiFormat = IsWepFormatHexL( aWepKey.Length() );
- TBuf<KWlanWepKeyMaxLength> wepBuf16;
- wepBuf16.Copy( aWepKey );
- User::LeaveIfError(aWepSecSettings.SetKeyDataL( aKeyNumber, wepBuf16,
- wepKeyInAsciiFormat ) );
- CLOG_WRITEF( _L("Wep key: %d"), aKeyNumber );
- CLOG_WRITEF( wepBuf16 );
- }
- }
-
-// --------------------------------------------------------------------------
-// TInt CWiFiProtActiveRunner::UsePinCodeLinkSelectedL()
-// --------------------------------------------------------------------------
-//
-TInt CWiFiProtActiveRunner::UsePinCodeLinkSelectedL( TAny* aObject )
- {
- CLOG_ENTERFN( "CWiFiProtActiveRunner::UsePinCodeLinkSelectedL" );
- CWiFiProtActiveRunner* myself =
- static_cast<CWiFiProtActiveRunner*>( aObject );
- myself->DoUsePinCodeLinkSelectedL();
- CLOG_LEAVEFN( "CWiFiProtActiveRunner::UsePinCodeLinkSelectedL" );
-
- return 1;
- }
-// End of File