# HG changeset patch # User hgs # Date 1288191662 -10800 # Node ID 0c32cf868819e78a4e7baa03f8f99ebca5c6a22a # Parent 9f263f780e41b5a10249dcf9d8a7edb1124e3a48 201041_1 diff -r 9f263f780e41 -r 0c32cf868819 bearermanagement/mpm/inc/mpmserver.h --- a/bearermanagement/mpm/inc/mpmserver.h Wed Oct 27 17:51:11 2010 +0300 +++ b/bearermanagement/mpm/inc/mpmserver.h Wed Oct 27 18:01:02 2010 +0300 @@ -51,6 +51,9 @@ // const TInt KPhoneRetryTimeout = 100000; +const TUint32 KMaxOpenTransAttempts = 5; +const TUint32 KRetryAfter = 200000; + // The granularity with which roaming and starting dialogs will allocate memory chunks. // If set to two there will be space for two instances before new memory will be allocated. const TInt KGranularity = 2; @@ -832,9 +835,10 @@ /** * Stops cellular connections, except MMS + * @param aSilentOnly stop only silent cellular connections * @since 5.2 */ - void StopCellularConns(); + void StopCellularConns( TBool aSilentOnly = EFalse ); /** * Handle to connection ui utilities @@ -918,6 +922,13 @@ TBool aCheckForBestIap, TMPMBearerType aDestinationBearerType ); + /** + * Check if iap can be disconnected, and disconnect it + * @since 5.2 + * @param aIapId Iap id for checking + */ + void CheckIapForDisconnect( TInt aIapId ); + private: // Data // Pointer to the ConnMonEvents object diff -r 9f263f780e41 -r 0c32cf868819 bearermanagement/mpm/src/mpmdatausagewatcher.cpp --- a/bearermanagement/mpm/src/mpmdatausagewatcher.cpp Wed Oct 27 17:51:11 2010 +0300 +++ b/bearermanagement/mpm/src/mpmdatausagewatcher.cpp Wed Oct 27 18:01:02 2010 +0300 @@ -118,15 +118,24 @@ // Get the new Cellular data usage setting value from central repository. TInt oldCellularDataUsage = iCellularDataUsage; - if ( GetCurrentDataUsageValue() == KErrNone ) + if ( GetCurrentDataUsageValue() == KErrNone // Updates iCellularDataUsage + && oldCellularDataUsage != iCellularDataUsage + && iServer->RoamingWatcher()->RoamingStatus() != EMPMRoamingStatusUnknown ) { - // Stop cellular connections if the setting changes into Disabled. - if ( oldCellularDataUsage != ECmCellularDataUsageDisabled && - iCellularDataUsage == ECmCellularDataUsageDisabled && - iServer->RoamingWatcher()->RoamingStatus() != EMPMRoamingStatusUnknown ) + // Setting changed while cellular is in use + + if ( iCellularDataUsage == ECmCellularDataUsageDisabled ) { + // Cellular data usage disabled -> disconnect cellular iServer->StopCellularConns(); } + else if ( iCellularDataUsage == ECmCellularDataUsageConfirm ) + { + // Cellular data usage needs to be confirmed -> disconnect if + // there are only silent cellular connections left. + iServer->StopCellularConns( ETrue ); + } + } } diff -r 9f263f780e41 -r 0c32cf868819 bearermanagement/mpm/src/mpmserver.cpp --- a/bearermanagement/mpm/src/mpmserver.cpp Wed Oct 27 17:51:11 2010 +0300 +++ b/bearermanagement/mpm/src/mpmserver.cpp Wed Oct 27 18:01:02 2010 +0300 @@ -481,28 +481,29 @@ // ----------------------------------------------------------------------------- // void CMPMServer::RemoveBMConnection( const TConnectionId aConnId, - CMPMServerSession& /*aSession*/ ) + CMPMServerSession& aSession ) { MPMLOGSTRING2( "CMPMServer::RemoveBMConnection - aConnId = 0x%x", aConnId ) - TInt count = iActiveBMConns.Count(); - - // Decrement by one, because count is n, - // but indexes in array are 0 .. n-1. - // - count--; - // This time we are browsing the array from the end to the beginning, // because removing one element from array affects index numbering. - // - for ( TInt i = count; i >= 0; i-- ) + // Decrement i by one, because count is n, but indexes in array are 0 .. n-1 + for ( TInt i = iActiveBMConns.Count() - 1; i >= 0; i-- ) { if ( iActiveBMConns[i].iConnInfo.iConnId == aConnId ) { + + TInt closeIapId = iActiveBMConns[i].iConnInfo.iIapId; + if ( !closeIapId ) + { + TRAP_IGNORE( closeIapId = aSession.IapSelectionL()->MpmConnPref().IapId() ); + } + // If Connection Id found, remove it. // iActiveBMConns.Remove( i ); + CheckIapForDisconnect( closeIapId ); } } @@ -812,23 +813,13 @@ "CMPMServer::RemoveBMIAPConnection - aIapId = %i, aConnId = 0x%x", aIapId, aConnId ) - TActiveBMConn conn; - conn.iConnInfo.iIapId = aIapId; - // The IAP connection lifetime is determined by the two calls // IAPConnectionStarted and IAPConnectionStopped. - // - TInt count = iActiveBMConns.Count(); - - // Decrement by one, because count is n, - // but indexes in array are 0 .. n-1. - // - count--; // This time we are browsing the array from the end to the beginning, // because removing one element from array affects index numbering. - // - for ( TInt i = count; i >= 0; i-- ) + // Decrement i by one, because count is n, but indexes in array are 0 .. n-1 + for ( TInt i = iActiveBMConns.Count() - 1; i >= 0; i-- ) { if ( iActiveBMConns[i].iConnInfo.iIapId == aIapId ) { @@ -915,37 +906,61 @@ } #endif // _DEBUG - // Start possible forced roaming - TCmUsageOfWlan usageOfWlan = CommsDatAccess()->ForcedRoamingL(); - if ( usageOfWlan == ECmUsageOfWlanKnown || usageOfWlan == ECmUsageOfWlanKnownAndNew ) + // Read info for forced roaming from Commdat + TUint32 maxOpenTransAttempts ( KMaxOpenTransAttempts ) ; + TUint32 retryAfter ( KRetryAfter ); + TInt err; + // CommDat reading might fail because CommDat session could be locked by another process at the moment + // So, we may wait/retry to read from CommDat a bit later. + TCmUsageOfWlan usageOfWlan ( ECmUsageOfWlanKnown ); + do { - if ( IsWlanConnectionStartedL( CommsDatAccess() ) ) + TRAP ( err, usageOfWlan = CommsDatAccess()->ForcedRoamingL() ); + + if( err ) { - iConnMonIapInfo = aIapInfo; + User::After( retryAfter ); + } + } while( err && maxOpenTransAttempts-- ); + + // Start possible forced roaming + if ( !err ) + { + if ( usageOfWlan == ECmUsageOfWlanKnown || usageOfWlan == ECmUsageOfWlanKnownAndNew ) + { + if ( IsWlanConnectionStartedL( CommsDatAccess() ) ) + { + iConnMonIapInfo = aIapInfo; - if ( iRoamingToWlanPeriodic ) - { - iRoamingToWlanPeriodic->Cancel(); + if ( iRoamingToWlanPeriodic ) + { + iRoamingToWlanPeriodic->Cancel(); + } + else + { + iRoamingToWlanPeriodic = CPeriodic::NewL( + CActive::EPriorityStandard ); + } + // start periodic object that calls StartForcedRoamingToWlanL after 10s. + // this handles the case when new wlan connection is + // started from e.g. wlan sniffer but IAP is not yet in Internet SNAP + iRoamingToWlanPeriodic->Start( + TTimeIntervalMicroSeconds32( KRoamingToWlanUpdateInterval ), + TTimeIntervalMicroSeconds32( KRoamingToWlanUpdateInterval ), + TCallBack( StartForcedRoamingToConnectedWlanL, this ) ); } else { - iRoamingToWlanPeriodic = CPeriodic::NewL( - CActive::EPriorityStandard ); + StartForcedRoamingToWlanL( iapInfo ); } - // start periodic object that calls StartForcedRoamingToWlanL after 10s. - // this handles the case when new wlan connection is - // started from e.g. wlan sniffer but IAP is not yet in Internet SNAP - iRoamingToWlanPeriodic->Start( - TTimeIntervalMicroSeconds32( KRoamingToWlanUpdateInterval ), - TTimeIntervalMicroSeconds32( KRoamingToWlanUpdateInterval ), - TCallBack( StartForcedRoamingToConnectedWlanL, this ) ); + + StartForcedRoamingFromWlanL( iapInfo ); } - else - { - StartForcedRoamingToWlanL( iapInfo ); - } - - StartForcedRoamingFromWlanL( iapInfo ); + } + else + { + MPMLOGSTRING2( "CMPMServer::NotifyBMPrefIapL - \ +reading info for forced roaming fails with err %d, forced roaming fails", err ) } // Send notifications for all sessions @@ -1835,7 +1850,7 @@ // Stop all cellular connections except MMS // --------------------------------------------------------------------------- // -void CMPMServer::StopCellularConns() +void CMPMServer::StopCellularConns( TBool aSilentOnly ) { MPMLOGSTRING( "CMPMServer::StopCellularConns" ) @@ -1864,7 +1879,14 @@ if (!(err == KErrNone && iapId == mmsIap)) { // Stop the conn / IAP. - StopConnections( iapId ); + if ( aSilentOnly ) + { + CheckIapForDisconnect( iapId ); + } + else + { + StopConnections( iapId ); + } stoppedIaps.Append( iapId ); } } @@ -2118,6 +2140,79 @@ } // ----------------------------------------------------------------------------- +// CMPMServer::CheckIapForDisconnect +// ----------------------------------------------------------------------------- +// +void CMPMServer::CheckIapForDisconnect( TInt aIapId ) + { + MPMLOGSTRING2( "CMPMServer::CheckIapForDisconnect - aIapId = 0x%x", + aIapId ) + + // Fix for case ou1cimx1#468999: stop sessions to cellular iap + // when there is only silent connections to it, and cellular usage is set + // to always ask + + // Check iap type and usage policy + TMPMBearerType bearerType( EMPMBearerTypeNone ); + TRAP_IGNORE( bearerType = CommsDatAccess()->GetBearerTypeL( aIapId ) ); + + TBool closeIap = ( bearerType == EMPMBearerTypePacketData + && DataUsageWatcher()->CellularDataUsage() == ECmCellularDataUsageConfirm ); + + // No need to put iapSessions to CleanupStack; there are no leaves + RPointerArray iapSessions; + if ( closeIap ) + { + // Check for non-silent sessions to iap + // closeIap is left true also when there are no sessions using the iap + for ( TInt i = 0; i < iActiveBMConns.Count(); i++ ) + { + + CMPMServerSession* session + = GetServerSession( iActiveBMConns[i].iConnInfo.iConnId ); + + TInt sessionIapId = iActiveBMConns[i].iConnInfo.iIapId; + if ( !sessionIapId ) + { + TRAP_IGNORE( sessionIapId = session->IapSelectionL()->MpmConnPref().IapId() ); + } + + if ( sessionIapId == aIapId ) + { + iapSessions.Append( session ); // Don't mind if Append fails + + TBool silent( ETrue ); + TRAP_IGNORE( silent = session->IapSelectionL()->MpmConnPref().NoteBehaviour() + & TExtendedConnPref::ENoteBehaviourConnDisableNotes ); + if ( !silent ) + { + // Non-silent session to iap found + closeIap = EFalse; + break; // for + } + } + } + } + + if ( closeIap ) + { + MPMLOGSTRING2( "CMPMServer::CheckIapForDisconnect - stopping silent sessions to iap 0x%x", + aIapId ) + // Stop all (silent) sessions to iap + for ( TInt i = 0; i < iapSessions.Count(); i++) + { + MPMLOGSTRING2( "CMPMServer::CheckIapForDisconnect - stopping connId 0x%x", + iapSessions[i]->ConnectionId()); + iapSessions[i]->StopConnection(); + } + } + + iapSessions.Close(); + + } + + +// ----------------------------------------------------------------------------- // TMPMBlackListConnId::Append // ----------------------------------------------------------------------------- // diff -r 9f263f780e41 -r 0c32cf868819 bearermanagement/mpm/src/mpmserversession.cpp --- a/bearermanagement/mpm/src/mpmserversession.cpp Wed Oct 27 17:51:11 2010 +0300 +++ b/bearermanagement/mpm/src/mpmserversession.cpp Wed Oct 27 18:01:02 2010 +0300 @@ -111,8 +111,6 @@ // CMPMServerSession::~CMPMServerSession() { - delete iConfirmDlgRoaming; - delete iIapSelection; // Remove serverside objects for notification session. // @@ -142,6 +140,9 @@ // Cancel discreet popup iMyServer.ConnUiUtils()->CancelConnectingViaDiscreetPopup(); + + delete iConfirmDlgRoaming; + delete iIapSelection; } @@ -3447,10 +3448,26 @@ iMyServer.UserConnection() ) { MPMLOGSTRING( "CMPMServerSession::UseUserConnPref - User connection active" ); + + // If user connection is blacklisted for this connection, don't use it. + RArray blacklistedIaps; + CleanupClosePushL( blacklistedIaps ); + iMyServer.GetBlacklistedIAP( iConnId, blacklistedIaps ); + TInt blacklistedIapFoundError = blacklistedIaps.Find( iMyServer.UserConnPref()->IapId() ); + CleanupStack::PopAndDestroy( &blacklistedIaps ); + if ( blacklistedIapFoundError != KErrNotFound ) + { + MPMLOGSTRING( "CMPMServerSession::UseUserConnPref -\ + User connection blacklisted -> don't use user connection" ); + return EFalse; + } + // Check whether default connection will be used if ( iIapSelection->MpmConnPref().ConnType() == TMpmConnPref::EConnTypeDefault ) { + MPMLOGSTRING( "CMPMServerSession::UseUserConnPref -\ + Default connection -> use user connection" ); return ETrue; } else if ( ( iIapSelection->MpmConnPref().ConnType() == @@ -3458,7 +3475,7 @@ PrefsAllowWlan() ) { MPMLOGSTRING( "CMPMServerSession::UseUserConnPref -\ - Prompt from the user" ); + Prompt from the user -> use user connection" ); // Prompt from the user -> use user connection return ETrue; } @@ -3477,6 +3494,8 @@ if ( ( error == KErrNone ) && ( isInternetSnap ) && PrefsAllowWlan() ) { + MPMLOGSTRING( "CMPMServerSession::UseUserConnPref -\ + Application preferencies in Internet SNAP -> use user connection" ); // Iap belongs to internet snap -> use user connection return ETrue; } diff -r 9f263f780e41 -r 0c32cf868819 cmmanager/cpdestinationplugin/src/cpadddestinationentryitemdata.cpp --- a/cmmanager/cpdestinationplugin/src/cpadddestinationentryitemdata.cpp Wed Oct 27 17:51:11 2010 +0300 +++ b/cmmanager/cpdestinationplugin/src/cpadddestinationentryitemdata.cpp Wed Oct 27 18:01:02 2010 +0300 @@ -216,7 +216,7 @@ HbMessageBox *note = new HbMessageBox(HbMessageBox::MessageTypeInformation); note->clearActions(); note->setAttribute(Qt::WA_DeleteOnClose); - QString info = hbTrId("txt_occ_info_invalid_name"); + QString info = hbTrId("txt_occ_info_name_already_in_use"); note->setText(info); note->setTimeout(HbPopup::NoTimeout); HbAction *errorOk = new HbAction( diff -r 9f263f780e41 -r 0c32cf868819 connectionmonitoring/cellularindicatorplugin/src/cellularindicatorplugin.cpp --- a/connectionmonitoring/cellularindicatorplugin/src/cellularindicatorplugin.cpp Wed Oct 27 17:51:11 2010 +0300 +++ b/connectionmonitoring/cellularindicatorplugin/src/cellularindicatorplugin.cpp Wed Oct 27 18:01:02 2010 +0300 @@ -196,8 +196,8 @@ if ( (indicatorInfo[0].toInt() > 1) && indicatorInfo.count() ) { // More than one connection -> show number of connections - QString str = QString(hbTrId("txt_occ_dblist_cellular_data_val_l1_connections")); - ret = str.arg(indicatorInfo[0].toInt()); + int count = indicatorInfo[0].toInt(); + ret = QString( hbTrId("txt_occ_dblist_cellular_data_val_l1_connections", count ) ); } else if ( indicatorInfo[0].toInt() && (indicatorInfo.count() >= 2)) { diff -r 9f263f780e41 -r 0c32cf868819 connectionmonitoring/connmon/connectionmonitor/inc/CPsdFax.h --- a/connectionmonitoring/connmon/connectionmonitor/inc/CPsdFax.h Wed Oct 27 17:51:11 2010 +0300 +++ b/connectionmonitoring/connmon/connectionmonitor/inc/CPsdFax.h Wed Oct 27 18:01:02 2010 +0300 @@ -18,6 +18,7 @@ #ifndef __CPSDFAX_H #define __CPSDFAX_H +#include #include #include #include @@ -36,6 +37,9 @@ // max PSD connection number const TInt KMaxPsdConnectionCount = 2; +// Restore attach mode interval (3 sec) +const TInt KRestoreAttachModeInterval = 3000000; + /** * CPsdFax @@ -178,6 +182,21 @@ */ void DeleteConnections(); + /** + * Timer callback of iRestoreAttachModeTimer + * + * @param aObject Object that triggered timer + * @since 5.2 + */ + static TInt RestoreAttachModeCb( TAny* aObject ); + + /** + * Restores attach mode + * + * @since 5.2 + */ + void RestoreAttachMode(); + private: private: // Data @@ -198,6 +217,9 @@ // Data table for each connection CPsdFaxConnectionData* iConnectionData[KMaxPsdConnectionCount]; + + // Timer to restore attach mode in case at+cgatt=0 given + CPeriodic* iRestoreAttachModeTimer; }; diff -r 9f263f780e41 -r 0c32cf868819 connectionmonitoring/connmon/connectionmonitor/inc/ConnMonIAP.h --- a/connectionmonitoring/connmon/connectionmonitor/inc/ConnMonIAP.h Wed Oct 27 17:51:11 2010 +0300 +++ b/connectionmonitoring/connmon/connectionmonitor/inc/ConnMonIAP.h Wed Oct 27 18:01:02 2010 +0300 @@ -742,6 +742,13 @@ */ TInt GetNetworkRegistration_v2( TInt& aRegistration ) const; + /** + * Restores packet network attach mode. + * @since + * @return void. + */ + void RestoreAttachMode(); + private: // New methods /** diff -r 9f263f780e41 -r 0c32cf868819 connectionmonitoring/connmon/connectionmonitor/src/CPsdFax.cpp --- a/connectionmonitoring/connmon/connectionmonitor/src/CPsdFax.cpp Wed Oct 27 17:51:11 2010 +0300 +++ b/connectionmonitoring/connmon/connectionmonitor/src/CPsdFax.cpp Wed Oct 27 18:01:02 2010 +0300 @@ -81,6 +81,13 @@ iConnUpNotifier = NULL; } + if ( iRestoreAttachModeTimer ) + { + iRestoreAttachModeTimer->Cancel(); + delete iRestoreAttachModeTimer; + iRestoreAttachModeTimer = NULL; + } + // Delete all ConnectionData objects for ( TUint index = 0; index < KMaxPsdConnectionCount; index++ ) { @@ -540,6 +547,51 @@ LOGEXITFN("CPsdFax::DeleteConnections()") } +// --------------------------------------------------------- +// CPsdFax::RestoreAttachModeCb +// --------------------------------------------------------- +// +TInt CPsdFax::RestoreAttachModeCb( TAny* aObject ) + { + LOGENTRFN("CPsdFax::RestoreAttachModeCb()") + + CPsdFax* myself = static_cast( aObject ); + + myself->iRestoreAttachModeTimer->Cancel(); + + // Make sure that ETel goes to correct network status + // in case AT+CGATT=0 has been sent from PC. + myself->iServer->Iap()->RestoreAttachMode(); + + LOGEXITFN("CPsdFax::RestoreAttachModeCb()") + + return 0; + } + + // --------------------------------------------------------- +// CPsdFax::RestoreAttachMode +// --------------------------------------------------------- +// +void CPsdFax::RestoreAttachMode() + { + LOGENTRFN("CPsdFax::RestoreAttachMode()") + + if ( iRestoreAttachModeTimer ) + { + iRestoreAttachModeTimer->Cancel(); + } + else + { + iRestoreAttachModeTimer = CPeriodic::NewL( CActive::EPriorityStandard ); + } + + iRestoreAttachModeTimer->Start( + TTimeIntervalMicroSeconds32( KRestoreAttachModeInterval ), + TTimeIntervalMicroSeconds32( KRestoreAttachModeInterval ), + TCallBack( RestoreAttachModeCb, this ) ); + + LOGEXITFN("CPsdFax::RestoreAttachMode()") + } // ============================ MEMBER FUNCTIONS =============================== @@ -1374,6 +1426,10 @@ // context override is disabled. LOGIT("External PSD connection status EStatusDeleted, disabling dial-up override") iServer->SetDialUpOverrideStatus( EConnMonDialUpOverrideInactive ); + + // Restore packet data network attach mode in case it has been + // changed by sending at+cgatt=0 from PC. + iFaxModule->RestoreAttachMode(); // Delete all old connection objects. This method should be used // carefully because it will delete ConnectionData and diff -r 9f263f780e41 -r 0c32cf868819 connectionmonitoring/connmon/connectionmonitor/src/CWlanSupport.cpp --- a/connectionmonitoring/connmon/connectionmonitor/src/CWlanSupport.cpp Wed Oct 27 17:51:11 2010 +0300 +++ b/connectionmonitoring/connmon/connectionmonitor/src/CWlanSupport.cpp Wed Oct 27 18:01:02 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -17,6 +17,7 @@ #include #include +#include #include "CWlanSupport.h" #include "CEventQueue.h" @@ -27,6 +28,7 @@ #include "ConnMonUtils.h" #include "connmonwlannetwork.h" +using namespace CMManager; // ============================ MEMBER FUNCTIONS =============================== @@ -426,10 +428,24 @@ // Get ssid of current connection TWlanSsid currentSsid; + TWlanConnectionMode currentMode; + TWlanConnectionExtentedSecurityMode currentSecurityMode; + ret = iWlanMgmt->GetConnectionSsid( currentSsid ); + + if ( ret == KErrNone ) + { + ret = iWlanMgmt->GetConnectionMode( currentMode ); + + if ( ret == KErrNone ) + { + ret = iWlanMgmt->GetExtendedConnectionSecurityMode( currentSecurityMode ); + } + } + if ( KErrNone != ret ) { - LOGIT1("ERROR reading current connection ssid from wlan engine <%d>", ret) + LOGIT1("ERROR reading current connection ssid/mode/security mode from wlan engine <%d>", ret) ret = KErrDisconnected; } else @@ -443,6 +459,8 @@ TBuf ssid16; CnvUtfConverter::ConvertToUnicodeFromUtf8( ssid16, currentSsid ); LOGIT2("AppendAvailableIapsBySsidL: ssid: %S, length: %d", &ssid16, ssid16.Length()) + LOGIT1("AppendAvailableIapsBySsidL: mode: %d", currentMode) + LOGIT1("AppendAvailableIapsBySsidL: security mode: %d", currentSecurityMode) // Create wlan service record set CMDBRecordSet* wlanSet = @@ -457,11 +475,27 @@ // Set ssid field in wlan service record (see wlancontainer.h) wlanRecord->iWLanSSID.SetL( ssid16 ); + + // match TWlanConnectionMode to TWlanNetMode + switch ( currentMode ) + { + case EWlanConnectionModeInfrastructure: + case EWlanConnectionModeSecureInfra: + wlanRecord->iWlanConnMode.SetL( EInfra ); + break; + case EWlanConnectionModeAdhoc: + wlanRecord->iWlanConnMode.SetL( EAdhoc ); + break; + default: + wlanRecord->iWlanConnMode.SetL( EInfra ); + break; + } + // Append wlan service record to wlan service record set (currently empty) wlanSet->iRecords.AppendL( wlanRecord ); CleanupStack::Pop( wlanRecord ); // Ownership moved - // Find matching wlan service records (all wlan service records with same SSID) + // Find matching wlan service records (all wlan service records with same SSID and mode) if ( wlanSet->FindL( *db ) ) { TInt wlanRecordCount( wlanSet->iRecords.Count() ); @@ -474,6 +508,57 @@ // LoadL() will only look at ElementId and updates the rest of the fields wlanRecord->SetElementId( wlanSet->iRecords[i]->ElementId() ); wlanRecord->LoadL( *db ); + + // Check security mode + // Map TWlanConnectionExtentedSecurityMode given by WlanEngine + // to TWlanSecMode used in CommsDat. + switch ( currentSecurityMode ) + { + case EWlanConnectionExtentedSecurityModeOpen: + if ( wlanRecord->iWlanSecMode != EWlanSecModeOpen ) + { + continue; + } + break; + case EWlanConnectionExtentedSecurityModeWepOpen: + case EWlanConnectionExtentedSecurityModeWepShared: + if ( wlanRecord->iWlanSecMode != EWlanSecModeWep ) + { + continue; + } + break; + case EWlanConnectionExtentedSecurityMode802d1x: + if ( wlanRecord->iWlanSecMode != EWlanSecMode802_1x ) + { + continue; + } + break; + case EWlanConnectionExtentedSecurityModeWapi: + case EWlanConnectionExtentedSecurityModeWapiPsk: + if ( wlanRecord->iWlanSecMode != EWlanSecModeWAPI ) + { + continue; + } + break; + case EWlanConnectionExtentedSecurityModeWpa2: + case EWlanConnectionExtentedSecurityModeWpa2Psk: + // CommsDat record has EWlanSecModeWpa unless "WPA2 only mode" is set On. + if ( wlanRecord->iWlanSecMode != EWlanSecModeWpa2 && + wlanRecord->iWlanSecMode != EWlanSecModeWpa ) + { + continue; + } + break; + case EWlanConnectionExtentedSecurityModeWpa: + case EWlanConnectionExtentedSecurityModeWpaPsk: + if ( wlanRecord->iWlanSecMode != EWlanSecModeWpa ) + { + continue; + } + break; + default: + continue; + } // Create IAP record CCDIAPRecord* iapRecord = diff -r 9f263f780e41 -r 0c32cf868819 connectionmonitoring/connmon/connectionmonitor/src/ConnMonIAP.cpp --- a/connectionmonitoring/connmon/connectionmonitor/src/ConnMonIAP.cpp Wed Oct 27 17:51:11 2010 +0300 +++ b/connectionmonitoring/connmon/connectionmonitor/src/ConnMonIAP.cpp Wed Oct 27 18:01:02 2010 +0300 @@ -3839,28 +3839,7 @@ nwRegStatus != RPacketService::ERegistrationDenied && nwRegStatus != RPacketService::ENotRegisteredAndNotAvailable ) { - // Query the TSY for the attach mode - RPacketService::TAttachMode attachMode( RPacketService::EAttachWhenNeeded ); - err = iPacketService.GetAttachMode( attachMode ); - - LOGIT2("GetBearerSupportInfo: pckt service attach mode: %d <%d>", attachMode, err) - // Query packet network status (but only if the TSY is set to attach when possible) - if ( KErrNone == err && attachMode == RPacketService::EAttachWhenPossible ) - { - RPacketService::TStatus pcktStatus( RPacketService::EStatusUnattached ); - err = iPacketService.GetStatus( pcktStatus ); - - LOGIT2("GetBearerSupportInfo: pckt service status: %d <%d>", pcktStatus, err) - if ( KErrNone == err && pcktStatus != RPacketService::EStatusUnattached ) - { - aByCell = ETrue; - } - } - else - { - // Attach mode is 'EAttachWhenNeeded' - aByCell = ETrue; - } + aByCell = ETrue; } } @@ -5486,4 +5465,30 @@ return err; } +// --------------------------------------------------------------------------- +// CConnMonIAP::RestoreAttachMode +// --------------------------------------------------------------------------- +// +void CConnMonIAP::RestoreAttachMode() + { + // AT command AT+CGATT=0 will detach phone from cellular network. + // Restore attach mode to cellmo when attach mode is set to EAttachWhenPossible. + // + RPacketService::TAttachMode attachMode( RPacketService::EAttachWhenNeeded ); + TInt err = iPacketService.GetAttachMode( attachMode ); + LOGIT2("CConnMonIAP::RestoreAttachMode: attach mode: %d <%d>", attachMode, err) + + if ( err == KErrNone && attachMode == RPacketService::EAttachWhenPossible ) + { + TRequestStatus status( KErrNone ); + + iPacketService.SetAttachMode( status, RPacketService::EAttachWhenPossible ); + User::WaitForRequest( status ); + LOGIT1("CConnMonIAP::RestoreAttachMode: set --> EAttachWhenPossible, error <%d>", status.Int() ) + + return; + } + LOGIT("No need to restore attach mode.") + } + // End-of-file diff -r 9f263f780e41 -r 0c32cf868819 connectionmonitoring/connmon/connectionmonitor/src/ConnMonServ.cpp --- a/connectionmonitoring/connmon/connectionmonitor/src/ConnMonServ.cpp Wed Oct 27 17:51:11 2010 +0300 +++ b/connectionmonitoring/connmon/connectionmonitor/src/ConnMonServ.cpp Wed Oct 27 18:01:02 2010 +0300 @@ -1082,6 +1082,10 @@ { LOGIT(".") LOGIT1("RunL: CConnMonDialUpOverrideTimer <%d>", iStatus.Int()) + + // Make sure that ETel goes to correct network status + // in case AT+CGATT=0 has been sent from PC. + iServer->Iap()->RestoreAttachMode(); iServer->SetDialUpOverrideStatus( EConnMonDialUpOverrideInactive ); } diff -r 9f263f780e41 -r 0c32cf868819 connectionmonitoring/connmon/dataconnectionlogger/inc/dcl.h --- a/connectionmonitoring/connmon/dataconnectionlogger/inc/dcl.h Wed Oct 27 17:51:11 2010 +0300 +++ b/connectionmonitoring/connmon/dataconnectionlogger/inc/dcl.h Wed Oct 27 18:01:02 2010 +0300 @@ -39,7 +39,6 @@ #endif // __WLAN #include "dclevent.h" -#include "dclTimer.h" #include "saeobserver.h" // CONSTANTS diff -r 9f263f780e41 -r 0c32cf868819 connectionmonitoring/connmon/dataconnectionlogger/src/dcl.cpp --- a/connectionmonitoring/connmon/dataconnectionlogger/src/dcl.cpp Wed Oct 27 17:51:11 2010 +0300 +++ b/connectionmonitoring/connmon/dataconnectionlogger/src/dcl.cpp Wed Oct 27 18:01:02 2010 +0300 @@ -29,6 +29,7 @@ #include "DclPrivateCRKeys.h" #include "dcl.h" +#include "dclTimer.h" #include "dcl_log.h" // -------------------------------------------------------------------------- diff -r 9f263f780e41 -r 0c32cf868819 ipcm_pub/connection_settings_api/inc/cmmanager.h --- a/ipcm_pub/connection_settings_api/inc/cmmanager.h Wed Oct 27 17:51:11 2010 +0300 +++ b/ipcm_pub/connection_settings_api/inc/cmmanager.h Wed Oct 27 18:01:02 2010 +0300 @@ -221,8 +221,7 @@ IMPORT_C void AllDestinationsL( RArray& aDestArray ) const; /** - * Returns the destination to which a specified - * connection method belongs, search is by destination ID + * Returns the destination queried by its ID. * * @since S60 3.2 * @param aDestinationId id of destination