diff -r 30e048a7b597 -r bad0cc58d154 wlansecuritysettings/wpasecuritysettingsui/src/WPASecuritySettingsImpl.cpp --- a/wlansecuritysettings/wpasecuritysettingsui/src/WPASecuritySettingsImpl.cpp Thu Aug 19 09:58:27 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,879 +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: Implementation of class CWPASecuritySettingsImpl. -* -*/ - -/* -* %version: tr1cfwln#29 % -*/ - -// INCLUDE FILES - -#include "WPASecuritySettingsUiPanic.h" - -#include "WPASecuritySettingsUI.hrh" - -#include -#include -#include -#include "WPASecuritySettingsImpl.h" - -#include -#include -#include - - -// CONSTANTS -LOCAL_D const TUint32 KUidNone = 0; // Invalid id -LOCAL_D const TUint32 E8021X = 4; // 802.1X security mode -LOCAL_D const TUint32 EWpa = 8; // Wpa security mode -LOCAL_D const TUint32 EWpa2 = 16; // Wpa2 only security mode - -LOCAL_D const TUint32 KExpEapTypeLength = 8; // expanded EAP type length - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::NewL -// --------------------------------------------------------- -// -CWPASecuritySettingsImpl* CWPASecuritySettingsImpl::NewL( - TSecurityMode aSecurityMode ) - { - CWPASecuritySettingsImpl* settings = new ( ELeave ) - CWPASecuritySettingsImpl( aSecurityMode ); - CleanupStack::PushL( settings ); - settings->ConstructL(); - CleanupStack::Pop( settings ); - return settings; - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::CWPASecuritySettingsImpl -// --------------------------------------------------------- -// -CWPASecuritySettingsImpl::CWPASecuritySettingsImpl( - TSecurityMode aSecurityMode ) -: iSecurityMode( aSecurityMode ), - iWPAMode( EFalse ), - iWpa2Only( EFalse ), - iWPAUnencryptedConn( EFalse ) - { - iWPAEAPPlugin.Zero(); - iWPAPreSharedKey.Zero(); - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::ConstructL -// --------------------------------------------------------- -// -void CWPASecuritySettingsImpl::ConstructL() - { - _LIT8( KMatchString, "EAPPConfig" ); - TRAPD( err, iPlugin = CEAPPluginConfigurationIf::NewL( KMatchString ) ); - if ( err != KErrNone && err != KEComErrNoInterfaceIdentified ) - { - User::Leave( err ); - } - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::~CWPASecuritySettingsImpl -// --------------------------------------------------------- -// -CWPASecuritySettingsImpl::~CWPASecuritySettingsImpl() - { - delete iWPAEnabledEAPPlugin; - delete iWPADisabledEAPPlugin; - delete iPlugin; - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::LoadL -// --------------------------------------------------------- -// -void CWPASecuritySettingsImpl::LoadL( TUint32 aIapId, - CCommsDatabase& aCommsDb ) - { - if ( aIapId == KUidNone ) - { - return; - } - - CCommsDbTableView* wLanServiceTable; - - wLanServiceTable = aCommsDb.OpenViewMatchingUintLC( - TPtrC( WLAN_SERVICE ), TPtrC( WLAN_SERVICE_ID ), aIapId ); - - TInt errorCode = wLanServiceTable->GotoFirstRecord(); - if ( errorCode == KErrNone ) - { - if ( iSecurityMode == ESecurityMode8021x ) - { - // in 802.1x PSK mode is not supported - iWPAMode = EFalse; - } - else - { - // Get WPA Mode - TRAPD( err, wLanServiceTable->ReadUintL( TPtrC( WLAN_ENABLE_WPA_PSK ), - ( TUint32& ) iWPAMode ) ); - if ( err != KErrNone ) - { // do not leave if value is not present in table... - if ( err != KErrUnknown ) - User::Leave( err ); - } - } - - TUint32 secMode = 0; - // Get WPA2 Only Mode - TRAPD( err, wLanServiceTable->ReadUintL( TPtrC( WLAN_SECURITY_MODE ), - secMode ) ); - if ( err != KErrNone ) - { // do not leave if value is not present in table... - if ( err != KErrUnknown ) - User::Leave( err ); - } - - iWpa2Only = secMode == EWpa2; - - // Get Unencrypted Connection mode for 802.1x - if ( iSecurityMode == ESecurityMode8021x ) - { - // WLAN_WPA_KEY_LENGTH is used also for Unencrypted Connection mode - TRAPD( err2, wLanServiceTable->ReadUintL( TPtrC( WLAN_WPA_KEY_LENGTH ), - ( TUint32& ) iWPAUnencryptedConn ) ); - if ( err2 != KErrNone ) - { // do not leave if value is not present in table... - if ( err2 != KErrUnknown ) - User::Leave( err2 ); - } - } - - // Get EAP list - iWPAEAPPlugin.Copy( *wLanServiceTable->ReadLongTextLC( - TPtrC( WLAN_EAPS ) ) ); - CleanupStack::PopAndDestroy(); - - if ( !iWPAEAPPlugin.Length() ) - { - // no data found in the old column, use the new ones - - // enabled EAP types - HBufC *data = wLanServiceTable->ReadLongTextLC( - TPtrC( WLAN_ENABLED_EAPS ) ); - - TPtrC8 reint( reinterpret_cast( data->Ptr() ), - data->Size() ); - - delete iWPAEnabledEAPPlugin; iWPAEnabledEAPPlugin = NULL; - iWPAEnabledEAPPlugin = reint.AllocL(); - - CleanupStack::PopAndDestroy( data ); - - - // 2. disabled EAP types - data = wLanServiceTable->ReadLongTextLC( - TPtrC( WLAN_DISABLED_EAPS ) ); - - reint.Set( reinterpret_cast( data->Ptr() ), - data->Size() ); - - delete iWPADisabledEAPPlugin; iWPADisabledEAPPlugin = NULL; - iWPADisabledEAPPlugin = reint.AllocL(); - - CleanupStack::PopAndDestroy( data ); - } - else - { - // generate appropriate entries in the new enabled and disabled list, - // overwriting those values - - // count the + and - signs to determine the size of enabled and - // disabled descriptors - TLex lex( iWPAEAPPlugin ); - - TInt numPlus = 0; - TInt numMinus = 0; - TChar ch; - while ( !lex.Eos() ) - { - ch = lex.Get(); - if ( ch == '+' ) ++numPlus; - else if ( ch == '-' ) ++numMinus; - } - - // each entry consumes 8 bytes in binary format - delete iWPAEnabledEAPPlugin; iWPAEnabledEAPPlugin = NULL; - iWPAEnabledEAPPlugin = HBufC8::NewL( 8 * numPlus ); - - delete iWPADisabledEAPPlugin; iWPADisabledEAPPlugin = NULL; - iWPADisabledEAPPlugin = HBufC8::NewL( 8 * numMinus ); - - lex.Assign( iWPAEAPPlugin ); - - while ( !lex.Eos() ) - { - // beginning of implementation UID - TInt16 implUid = 0; - - if ( lex.Val( implUid ) != KErrNone || !implUid ) - { - // if the old string is corrupted, null out both lists - iWPAEnabledEAPPlugin->Des().Zero(); - iWPADisabledEAPPlugin->Des().Zero(); - break; - } - - // append it to the appropriate list ('+' enabled, '-' disabled) - _LIT8( KPadding, "\xFE\0\0\0\0\0\0" ); - _LIT8( KMsChapV2Padding, "\xFE\xFF\xFF\xFF\0\0\0"); - const TInt KPlainMsChapV2ImplUid = 99; - - if ( implUid > 0 ) - { - iWPAEnabledEAPPlugin->Des().Append( - Abs( implUid ) == KPlainMsChapV2ImplUid? - KMsChapV2Padding: KPadding ); - iWPAEnabledEAPPlugin->Des().Append( Abs( implUid ) ); - } - else if (implUid < 0 ) - { - iWPADisabledEAPPlugin->Des().Append( - Abs( implUid ) == KPlainMsChapV2ImplUid? - KMsChapV2Padding: KPadding ); - iWPADisabledEAPPlugin->Des().Append( Abs( implUid ) ); - } - - // swallow the delimiter (',') - lex.Get(); - } - - // finally, wipe old column data - iWPAEAPPlugin.Zero(); - } - - // Get PreShared Key - if ( iSecurityMode != ESecurityMode8021x ) - { - wLanServiceTable->ReadTextL( TPtrC( WLAN_WPA_PRE_SHARED_KEY ), - iWPAPreSharedKey ); - } - - if ( !IsValidPsk( iWPAPreSharedKey ) ) - { - // invalid key format - iWPAPreSharedKey.Zero(); - } - } - - CleanupStack::PopAndDestroy( wLanServiceTable ); // wLanServiceTable - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::SaveL -// --------------------------------------------------------- -// -void CWPASecuritySettingsImpl::SaveL( TUint32 aIapId, - CCommsDatabase& aCommsDb, - TTypeOfSaving aTypeOfSaving, - TUint32 aOldIapId ) - { - CCommsDbTableView* wLanServiceTable; - - // Caller MUST initiate a transaction, WE WILL NOT. - - wLanServiceTable = aCommsDb.OpenViewMatchingUintLC( - TPtrC( WLAN_SERVICE ), TPtrC( WLAN_SERVICE_ID ), aIapId ); - TInt errorCode = wLanServiceTable->GotoFirstRecord(); - - if ( errorCode == KErrNone ) - { - wLanServiceTable->UpdateRecord(); - } - else - { - TUint32 dummyUid( KUidNone ); - User::LeaveIfError( wLanServiceTable->InsertRecord( dummyUid ) ); - - // Save link to LAN service - wLanServiceTable->WriteUintL( TPtrC( WLAN_SERVICE_ID ), aIapId ); - } - - // Save WPA Mode - if ( iSecurityMode != ESecurityMode8021x ) - { - wLanServiceTable->WriteUintL( TPtrC( WLAN_ENABLE_WPA_PSK ), - ( TUint32& ) iWPAMode ); - } - - TUint32 secMode; - - if ( iSecurityMode == ESecurityMode8021x ) - { - secMode = E8021X; - } - else if ( iWpa2Only ) - { - secMode = EWpa2; - } - else - { - secMode = EWpa; - } - - // Save security mode - wLanServiceTable->WriteUintL( TPtrC( WLAN_SECURITY_MODE ), secMode ); - - // With expanded EAP types allowed we no longer need the old column - iWPAEAPPlugin.Zero(); - - // Save EAP list - wLanServiceTable->WriteLongTextL( TPtrC( WLAN_EAPS ), iWPAEAPPlugin ); - - - // Save the expanded EAPs - wLanServiceTable->WriteTextL( TPtrC( WLAN_ENABLED_EAPS ), - iWPAEnabledEAPPlugin? - (const TDesC8&)*iWPAEnabledEAPPlugin: - (const TDesC8&)KNullDesC8 ); - - wLanServiceTable->WriteTextL( TPtrC( WLAN_DISABLED_EAPS ), - iWPADisabledEAPPlugin? - (const TDesC8&)*iWPADisabledEAPPlugin: - (const TDesC8&)KNullDesC8 ); - - - - if ( iSecurityMode == ESecurityMode8021x ) - { - // In 802.1x WpaKeyLength is not used - // and the field is reused to save UnencryptedConn mode - wLanServiceTable->WriteUintL( TPtrC( WLAN_WPA_KEY_LENGTH ), - ( TUint32& ) iWPAUnencryptedConn ); - } - else - { - // Save PreShared Key - wLanServiceTable->WriteTextL( TPtrC( WLAN_WPA_PRE_SHARED_KEY ), - iWPAPreSharedKey ); - - // Save PreShared Key Length - wLanServiceTable->WriteUintL( TPtrC( WLAN_WPA_KEY_LENGTH ), - iWPAPreSharedKey.Length() ); - } - - wLanServiceTable->PutRecordChanges(); - - if ( iPlugin ) - { - if ( aTypeOfSaving == ESavingBrandNewAP ) - { - iPlugin->ChangeIapIDL( aOldIapId, aIapId ); - } - else if ( aTypeOfSaving == ESavingNewAPAsACopy ) - { - iPlugin->CopySettingsL( aOldIapId, aIapId ); - } - } - - CleanupStack::PopAndDestroy( wLanServiceTable ); // wLanServiceTable - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::DeleteL -// --------------------------------------------------------- -// -void CWPASecuritySettingsImpl::DeleteL( TUint32 aIapId ) - { - if ( iPlugin ) - { - iPlugin->DeleteSettingsL( aIapId ); - } - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::IsValid -// --------------------------------------------------------- -// -TBool CWPASecuritySettingsImpl::IsValid() - { - TBool retval = ETrue; - if ( iWPAMode || !iPlugin ) - { - retval = IsValidPsk( iWPAPreSharedKey ); - } - - return retval; - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::IsValidPsk -// --------------------------------------------------------- -// -TBool CWPASecuritySettingsImpl::IsValidPsk( const TDesC8& aPsk ) - { - TBool ret( EFalse ); - - TInt len = aPsk.Length(); - - ret = ( len >= EMinLengthOfPreSharedKeyAscii && - len <= EMaxLengthOfPreSharedKeyAscii ); - - if ( !ret && len == ELengthOfPreSharedKeyHex ) - { - // perhaps it is hex - ret = ETrue; - - for ( TInt i = 0; i < len; ++i ) - { - TChar ch( aPsk[i] ); - if ( !ch.IsHexDigit() ) - { - // got a bad character - ret = EFalse; - break; - } - } - } - - return ret; - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::SetWPAPreSharedKey -// --------------------------------------------------------- -// -TInt CWPASecuritySettingsImpl::SetWPAPreSharedKey( - const TDesC& aPreSharedKey ) - { - TInt ret( KErrNone ); - - HBufC8* buf8 = HBufC8::New( aPreSharedKey.Length() ); - - if ( buf8 ) - { - TPtr8 pskPtr( buf8->Des() ); - pskPtr.Copy( aPreSharedKey ); - - if ( IsValidPsk( pskPtr ) ) - { - SetWPAPreSharedKey( pskPtr ); - SetWPAMode( ETrue ); - } - else - { - ret = KErrArgument; - } - - delete buf8; - } - else - { - ret = KErrNoMemory; - } - - return ret; - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::SetWPAEnabledEAPPlugin -// --------------------------------------------------------- -// -TInt CWPASecuritySettingsImpl::SetWPAEnabledEAPPlugin( - const TDesC8& aEnabledPluginList ) - { - delete iWPAEnabledEAPPlugin; iWPAEnabledEAPPlugin = NULL; - - if ( aEnabledPluginList.Length() % KExpEapTypeLength ) - { - // valid expanded EAP types occupy 8 bytes each - return KErrArgument; - } - - if ( aEnabledPluginList.Length() ) - { - iWPAEnabledEAPPlugin = aEnabledPluginList.Alloc(); - if ( !iWPAEnabledEAPPlugin ) - { - return KErrNoMemory; - } - } - - return KErrNone; - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::SetWPADisabledEAPPlugin -// --------------------------------------------------------- -// -TInt CWPASecuritySettingsImpl::SetWPADisabledEAPPlugin( - const TDesC8& aDisabledPluginList ) - { - delete iWPADisabledEAPPlugin; iWPADisabledEAPPlugin = NULL; - - if ( aDisabledPluginList.Length() % KExpEapTypeLength ) - { - // valid expanded EAP types occupy 8 bytes each - return KErrArgument; - } - - if ( aDisabledPluginList.Length() ) - { - iWPADisabledEAPPlugin = aDisabledPluginList.Alloc(); - if ( !iWPADisabledEAPPlugin ) - { - return KErrNoMemory; - } - } - - return KErrNone; - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::LoadL -// --------------------------------------------------------- -// -void CWPASecuritySettingsImpl::LoadL( TUint32 aIapId, - CMDBSession& aSession ) - { - if ( aIapId == KUidNone ) - { - return; - } - - // Load WLAN service table - // first get WLAN table id - CMDBGenericRecord* generic = static_cast - ( CCDRecordBase::RecordFactoryL( 0 ) ); - CleanupStack::PushL( generic ); - generic->InitializeL( TPtrC( WLAN_SERVICE ), NULL ); - generic->LoadL( aSession ); - TMDBElementId wlanTableId = generic->TableId(); - - CMDBField* sidField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanServiceId ) ); - - // prime with service id - *sidField = aIapId; - - if( generic->FindL( aSession) ) - { - if ( iSecurityMode == ESecurityMode8021x ) - { - // in 802.1x PSK mode is not supported - iWPAMode = EFalse; - } - else - { - // Get WPA mode - CMDBField* enableWpaPskField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanEnableWpaPsk ) ); - iWPAMode = *enableWpaPskField; - } - - // Get WPA2 Only Mode - CMDBField* secModeField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanSecMode ) ); - TUint32 secMode = *secModeField; - iWpa2Only = secMode == EWpa2; - - // Get 802.1x Unencrypted Connection saved in reused WpaKeyLengthField - if ( iSecurityMode == ESecurityMode8021x ) - { - CMDBField* WpaKeyLengthField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanWpaKeyLength ) ); - iWPAUnencryptedConn = *WpaKeyLengthField; - } - - // Get EAP plugins - CMDBField* wlanEapsField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanEaps ) ); - iWPAEAPPlugin = *wlanEapsField; - - if ( !iWPAEAPPlugin.Length() ) - { - // no data found in the old column, use the new ones - - // enabled EAP types - CMDBField* wlanEnabledEapsField = - static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanEnabledEaps ) ); - - delete iWPAEnabledEAPPlugin; iWPAEnabledEAPPlugin = NULL; - iWPAEnabledEAPPlugin = - ( ( const TDesC8& ) *wlanEnabledEapsField ).AllocL(); - - - // disabled EAP types - CMDBField* wlanDisabledEapsField = - static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanDisabledEaps ) ); - - delete iWPADisabledEAPPlugin; iWPADisabledEAPPlugin = NULL; - iWPADisabledEAPPlugin = - ( ( const TDesC8& ) *wlanDisabledEapsField ).AllocL(); - - } - else - { - // generate appropriate entries in the new enabled and disabled list, - // overwriting those values - - // count the + and - signs to determine the size of enabled and - // disabled descriptors - TLex lex( iWPAEAPPlugin ); - - TInt numPlus = 0; - TInt numMinus = 0; - TChar ch; - while ( !lex.Eos() ) - { - ch = lex.Get(); - if ( ch == '+' ) ++numPlus; - else if ( ch == '-' ) ++numMinus; - } - - // each entry consumes 8 bytes in binary format - delete iWPAEnabledEAPPlugin; iWPAEnabledEAPPlugin = NULL; - iWPAEnabledEAPPlugin = HBufC8::NewL( 8 * numPlus ); - - delete iWPADisabledEAPPlugin; iWPADisabledEAPPlugin = NULL; - iWPADisabledEAPPlugin = HBufC8::NewL( 8 * numMinus ); - - lex.Assign( iWPAEAPPlugin ); - - while ( !lex.Eos() ) - { - // beginning of implementation UID - TInt16 implUid = 0; - - if ( lex.Val( implUid ) != KErrNone || !implUid ) - { - // if the old string is corrupted, null out both lists - iWPAEnabledEAPPlugin->Des().Zero(); - iWPADisabledEAPPlugin->Des().Zero(); - break; - } - - // append it to the appropriate list ('+' enabled, '-' disabled) - _LIT8( KPadding, "\xFE\0\0\0\0\0\0" ); - _LIT8( KMsChapV2Padding, "\xFE\xFF\xFF\xFF\0\0\0"); - const TInt KPlainMsChapV2ImplUid = 99; - - if ( implUid > 0 ) - { - iWPAEnabledEAPPlugin->Des().Append( - Abs( implUid ) == KPlainMsChapV2ImplUid? - KMsChapV2Padding: KPadding ); - iWPAEnabledEAPPlugin->Des().Append( Abs( implUid ) ); - } - else if (implUid < 0 ) - { - iWPADisabledEAPPlugin->Des().Append( - Abs( implUid ) == KPlainMsChapV2ImplUid? - KMsChapV2Padding: KPadding ); - iWPADisabledEAPPlugin->Des().Append( Abs( implUid ) ); - } - - // swallow the delimiter (',') - lex.Get(); - } - - // finally, wipe old column data - iWPAEAPPlugin.Zero(); - } - - // GetWPA preshared key - if ( iSecurityMode != ESecurityMode8021x ) - { - CMDBField* wpaPskField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanWpaPreSharedKey ) ); - iWPAPreSharedKey = *wpaPskField; - } - - if ( !IsValidPsk( iWPAPreSharedKey ) ) - { - // invalid key format - iWPAPreSharedKey.Zero(); - } - } - - CleanupStack::PopAndDestroy( generic ); - } - - -// --------------------------------------------------------- -// CWPASecuritySettingsImpl::SaveL -// --------------------------------------------------------- -// -void CWPASecuritySettingsImpl::SaveL( TUint32 aIapId, - CMDBSession& aSession, - TTypeOfSaving aTypeOfSaving, - TUint32 aOldIapId ) - { - const TInt KRetryWait = 100000; // Wait time between retries in TTimeIntervalMicroSeconds32 - const TInt KRetryCount = 50; // Max retry count - - // Load WLAN service table - // first get WLAN table id - CMDBGenericRecord* generic = static_cast - ( CCDRecordBase::RecordFactoryL( 0 ) ); - CleanupStack::PushL( generic ); - generic->InitializeL( TPtrC( WLAN_SERVICE ), NULL ); - generic->LoadL( aSession ); - TMDBElementId wlanTableId = generic->TableId(); - - CMDBField* sidField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanServiceId ) ); - - // prime with service id - *sidField = aIapId; - - TBool found = generic->FindL( aSession); - - // If loading failed, WLAN service record will be - // created and StoreL()-d, otherwise, ModifyL() - - if ( iSecurityMode != ESecurityMode8021x ) - { - // Set WPA mode - CMDBField* enableWpaPskField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanEnableWpaPsk ) ); - enableWpaPskField->SetL( iWPAMode ); - } - - // Set security mode - TUint32 secMode; - if ( iSecurityMode == ESecurityMode8021x ) - { - secMode = E8021X; - } - else if ( iWpa2Only ) - { - secMode = EWpa2; - } - else - { - secMode = EWpa; - } - CMDBField* secModeField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanSecMode ) ); - secModeField->SetL( secMode ); - - // Save EAP list - CMDBField* wlanEapsField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanEaps ) ); - - // when using the expanded EAP types, wipe out data in the old column - iWPAEAPPlugin.Zero(); - - wlanEapsField->SetL( iWPAEAPPlugin ); - - // Save the expanded EAPs - CMDBField* wlanEnabledEapsField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanEnabledEaps ) ); - wlanEnabledEapsField->SetL( iWPAEnabledEAPPlugin? - (const TDesC8&)*iWPAEnabledEAPPlugin: - (const TDesC8&)KNullDesC8 ); - - - CMDBField* wlanDisabledEapsField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanDisabledEaps ) ); - wlanDisabledEapsField->SetL( iWPADisabledEAPPlugin? - (const TDesC8&)*iWPADisabledEAPPlugin: - (const TDesC8&)KNullDesC8 ); - - // Save PreShared Key length - CMDBField* keyLengthField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanWpaKeyLength ) ); - if ( iSecurityMode == ESecurityMode8021x ) - { - // In 802.1x keyLengthField is reused to contain Unencrypted Connection info - keyLengthField->SetL( iWPAUnencryptedConn ); - } - else - { - keyLengthField->SetL( iWPAPreSharedKey.Length() ); - - // Save PreShared Key - CMDBField* wpaPskField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanWpaPreSharedKey ) ); - wpaPskField->SetL( iWPAPreSharedKey ); - } - - TInt error( KErrNone ); - - // Saving changes - for ( TInt i( 0 ); i < KRetryCount; i++ ) - { - - // If table existed modify it - if( found ) - { - TRAP( error, generic->ModifyL( aSession ) ); - } - - // Otherwise store a new record - else - { - generic->SetRecordId( KCDNewRecordRequest ); - TRAP( error, generic->StoreL( aSession ) ); - } - - // If operation failed with KErrLocked, we'll retry. - if ( KErrLocked == error ) - { - User::After( KRetryWait ); - } - - // Otherwise break the retry loop. - else - { - break; - } - } - - // If the save operation failed, leave now. - User::LeaveIfError( error ); - - CleanupStack::PopAndDestroy( generic ); - - if ( iPlugin ) - { - if ( aTypeOfSaving == ESavingBrandNewAP ) - { - iPlugin->ChangeIapIDL( aOldIapId, aIapId ); - } - else if ( aTypeOfSaving == ESavingNewAPAsACopy ) - { - iPlugin->CopySettingsL( aOldIapId, aIapId ); - } - } - } - -// End of File