# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1264500768 -7200 # Node ID f7816ffc66ed5695e2831abd1e5335cfc5afa8f5 # Parent 086aae6fc07e776fb2096afafe2246f494ca023c Revision: 201001 Kit: 201004 diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/group/pdpcontextmanager2.mmp --- a/alwayson_net_plugin/pdpcontextmanager2/group/pdpcontextmanager2.mmp Mon Jan 18 20:33:49 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/group/pdpcontextmanager2.mmp Tue Jan 26 12:12:48 2010 +0200 @@ -51,6 +51,7 @@ SOURCE caoconnectionmonitorimpl.cpp SOURCE caoconnectionimpl.cpp SOURCE linger.cpp +SOURCE cenrepobserver.cpp // Component specific internal headers @@ -81,6 +82,8 @@ LIBRARY etelmm.lib LIBRARY CustomAPI.lib LIBRARY etel.lib +LIBRARY extendedconnpref.lib +LIBRARY netmeta.lib #ifdef LOGGING_ENABLED #ifdef LOGGING_MODE_FILE LIBRARY efsrv.lib diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/inc/caoconnectionimpl.h --- a/alwayson_net_plugin/pdpcontextmanager2/inc/caoconnectionimpl.h Mon Jan 18 20:33:49 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/inc/caoconnectionimpl.h Tue Jan 26 12:12:48 2010 +0200 @@ -24,6 +24,7 @@ #include #include #include +#include #include "maoconnectionmanager.h" // FORWARD DECLARATIONS @@ -279,13 +280,11 @@ TInternalState iState; /** - * Own: Access point settings - */ - TCommDbConnPref iAccessPointSettings; - - /** * Own: Comms database */ CCommsDatabase* iCommsDatabase; + + TConnPrefList* iPrefsList; + TExtendedConnPref* iExtPrefs; }; #endif /* CAOCONNECTIONIMPL_H */ diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/inc/caoconnectionmonitorimpl.h --- a/alwayson_net_plugin/pdpcontextmanager2/inc/caoconnectionmonitorimpl.h Mon Jan 18 20:33:49 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/inc/caoconnectionmonitorimpl.h Tue Jan 26 12:12:48 2010 +0200 @@ -304,6 +304,11 @@ * Own: Bearer type */ TInt iBearerValue; + + /** + * Own: Retry counter + */ + TInt iCounter; }; #endif /* CAOCONNECTIONMONITORIMPL_H */ diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/inc/caoserver.h --- a/alwayson_net_plugin/pdpcontextmanager2/inc/caoserver.h Mon Jan 18 20:33:49 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/inc/caoserver.h Tue Jan 26 12:12:48 2010 +0200 @@ -36,6 +36,7 @@ #include "maoraumanagerobserver.h" #include "maogpdsobserver.h" #include "caoasyncwrapper.h" +#include "cenrepobserver.h" // FORWARD DECLARATIONS class CAOConnectionManager; @@ -43,6 +44,8 @@ class CAORAUManager; class CAOSettings; class CAOGpds; +class CAOCenRepObserver; +class MAOCenRepObserver; /** * Always-On Server class. @@ -57,7 +60,8 @@ public MAOConnectionManagerObserver, public MAOTimerObserver, public MAOSettingsObserver, - public MAORAUManagerObserver + public MAORAUManagerObserver, + public MAOCenRepObserver { public: // Constructors & destructors @@ -402,6 +406,18 @@ */ void HandleSuccesfulRAUL( TRAUType aType ); +private: // From base class MAOCenRepObserver + + /** + * From MAOCenRepObserver + * a notification when Central Repository key + * KCRUidCmManager/ KCurrentCellularDataUsage changes. + * + * @since S60 5.1 + * @param aValue New key value + */ + void CurrentCellularDataUsageChangedL( const TInt aValue ); + private: // Data @@ -495,6 +511,12 @@ * Own */ CPeriodic* iAsyncSetup; + + /** + * Central repository key watcher + * Own + */ + CAOCenRepObserver* iCenRepObserver; }; #endif //C_CAOSERVER_H diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/inc/caosettings.h --- a/alwayson_net_plugin/pdpcontextmanager2/inc/caosettings.h Mon Jan 18 20:33:49 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/inc/caosettings.h Tue Jan 26 12:12:48 2010 +0200 @@ -183,6 +183,16 @@ */ TInt LingerTimerValue( const TUint aIapId ) const; + /** + * Checks whether user allows cellular connections + * or not. + * + * @since 5.1 + * @return ETrue if cellular connections are allowed, + * EFalse otherwise. + */ + TBool IsCellularAllowedByUser() const; + private: // From base class MAOSettings /** diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/inc/cenrepobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/alwayson_net_plugin/pdpcontextmanager2/inc/cenrepobserver.h Tue Jan 26 12:12:48 2010 +0200 @@ -0,0 +1,81 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Listens for changes in a Central Repository key. +* +*/ + +#ifndef AOCENREPOBSERVER_H +#define AOCENREPOBSERVER_H + +// FORWARD DECLARATIONS +class CRepository; +class MAOConnectionObserver; + +// Stop requesting new notifications after this many consecutive errors +const TInt KCenRepErrorRetryCount = 80; + +/** +* MAOCenRepObserver +* +* Client application must implement the AOCenRepObserver interface in +* order to receive a notification when Central Repository key +* KCRUidCmManager/ KCurrentCellularDataUsage changes. +* +* @lib PDPCONTEXTMANAGER2.LIB +*/ +class MAOCenRepObserver + { +public: + /** + * This method is called every time when Central Repository key + * KCRUidCmManager/ KCurrentCellularDataUsage changes. + * + * @param aValue The new value for KCurrentCellularDataUsage. + */ + virtual void CurrentCellularDataUsageChangedL( const TInt aValue ) = 0; + }; + +/** +* CAOCenRepObserver +* +* @lib DPCONTEXTMANAGER2.LIB +*/ +NONSHARABLE_CLASS( CAOCenRepObserver ) : public CActive + { +public: + static CAOCenRepObserver* NewL( MAOCenRepObserver& aObserver ); + + static CAOCenRepObserver* NewLC( MAOCenRepObserver& aObserver ); + + virtual ~CAOCenRepObserver(); + +private: + CAOCenRepObserver( MAOCenRepObserver& aObserver ); + + void ConstructL(); + void RequestNotifications(); + +private: // Methods from base class + void DoCancel(); + void RunL(); + +private: + MAOCenRepObserver& iObserver; + CRepository* iRepository; + TInt iErrorCounter; + }; + +#endif // AOCENREPOBSERVER_H + +// End-of-file diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/inc/maosettings.h --- a/alwayson_net_plugin/pdpcontextmanager2/inc/maosettings.h Mon Jan 18 20:33:49 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/inc/maosettings.h Tue Jan 26 12:12:48 2010 +0200 @@ -91,6 +91,16 @@ * @return TInt */ virtual TInt LingerTimerValue( const TUint aIapId ) const = 0; + + /** + * Checks whether user allows cellular connections + * or not. + * + * @since 5.1 + * @return ETrue if cellular connections are allowed, + * EFalse otherwise. + */ + virtual TBool IsCellularAllowedByUser() const = 0; protected: diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/src/caoconnectionimpl.cpp --- a/alwayson_net_plugin/pdpcontextmanager2/src/caoconnectionimpl.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/src/caoconnectionimpl.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -35,9 +35,6 @@ // CONSTANTS _LIT( KPanicCat, "ConnectionImpl" ); - // Default value that indicates that we do not want to prompt user for IAP - const TCommDbDialogPref KDlgPreference = ECommDbDialogPrefDoNotPrompt; - // DATA TYPES enum TPanicCode { @@ -93,6 +90,9 @@ delete iCommsDatabase; iConnection.Close(); + + delete iExtPrefs; + delete iPrefsList; } @@ -112,7 +112,7 @@ // Check IAP TUint iap = iSettings.AccessPointId(); - if ( IsValidIAP( iap ) ) + if ( IsValidIAP( iap ) && iSettings.IsCellularAllowedByUser() ) { // Check that we really have RConnection handle opened TInt err = KErrNone; @@ -123,14 +123,25 @@ } if( err == KErrNone ) - { - // Set acces point settings - iAccessPointSettings.SetIapId( iap ); - iAccessPointSettings.SetDialogPreference( KDlgPreference ); - - // Start connection - iConnection.Start( iAccessPointSettings, iStatus ); - SetActive(); + { + // Start as a silent connection + iExtPrefs->SetIapId( iap ); + iExtPrefs->SetNoteBehaviour( TExtendedConnPref::ENoteBehaviourConnSilent ); + + // Clean iPrefsList and append new prefs + iPrefsList->Remove( 0 ); + TRAPD( err, iPrefsList->AppendL( iExtPrefs ) ) + + if ( err == KErrNone ) + { + iConnection.Start( *iPrefsList, iStatus ); + SetActive(); + } + else + { + LOG_1( _L("iPrefsList->AppendL( iExtPrefs ) FAILED") ); + ActivateSelf( KErrNotSupported ); + } } else { @@ -267,6 +278,9 @@ User::LeaveIfError( iConnection.Open( *iSocketServ, KAfInet ) ); iCommsDatabase = CCommsDatabase::NewL( EDatabaseTypeUnspecified ); + + iExtPrefs = new (ELeave) TExtendedConnPref; + iPrefsList = TConnPrefList::NewL(); } // --------------------------------------------------------------------------- diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/src/caoconnectionmonitorimpl.cpp --- a/alwayson_net_plugin/pdpcontextmanager2/src/caoconnectionmonitorimpl.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/src/caoconnectionmonitorimpl.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -23,6 +23,7 @@ #include "maoconnectionmonitorobserver.h" #include "caoasyncwrapper.h" + // UNNAMED NAMESPACE FOR LOCAL DEFINITIONS namespace { @@ -50,6 +51,9 @@ #endif } +const TInt KRetryCounter = 10; + + // METHODS // --------------------------------------------------------------------------- @@ -224,10 +228,23 @@ if ( aStatus == KErrNone ) { - LOG_2( _L("> NW reg. status: %d"), iWNReg.iRegStatus ); - iObserver.HandleNWRegistrationStatusChangedL( - iWNRegPckg().iRegStatus ); - } + LOG_2( _L("> Current iWNReg.iRegStatus: %d"), iWNReg.iRegStatus ); + + if ( ( iWNReg.iRegStatus < iWNChangeReg.iRegStatus ) && + ( iCounter < KRetryCounter ) ) + { + iCounter++; + LOG_2( _L("> Different from events iWNChangeReg.iRegStatusv: %d"), + iWNChangeReg.iRegStatus ); + iNWRegistrationStatus->IssueRequest(); + } + else + { + iCounter = 0; + iObserver.HandleNWRegistrationStatusChangedL( + iWNRegPckg().iRegStatus ); + } + } else { HandleError( aStatus ); diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/src/caoserver.cpp --- a/alwayson_net_plugin/pdpcontextmanager2/src/caoserver.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/src/caoserver.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -18,6 +18,7 @@ // INCLUDE FILES #include +#include #include "caoserver.h" #include "caoconnectionmanager.h" @@ -179,6 +180,7 @@ delete iPointerStatePool; } + delete iCenRepObserver; delete iGpds; delete iRAUManager; delete iTimer; @@ -227,6 +229,8 @@ #endif // __ALWAYS_ON_CUSTOM_API iGpds = CAOGpds::NewL( iCustomAPI ); + + iCenRepObserver = CAOCenRepObserver::NewL( *this ); InitStatePoolL(); @@ -935,6 +939,37 @@ } } +// --------------------------------------------------------------------------- +// CAOServer::CurrentCellularDataUsageChanged +// --------------------------------------------------------------------------- +// +void CAOServer::CurrentCellularDataUsageChangedL( const TInt aValue ) + { + LOG_1( _L("CAOServer::CurrentCellularDataUsageChanged") ); + LOG_2( _L("> Current state: %S"), + &StateToDesC( CurrentState()->StateName() ) ); + + if ( aValue != ECmCellularDataUsageDisabled ) + { + TAOState* newState = NULL; + + if ( CurrentState()->StateName() == TAOState::EStateDisabled ) + { + newState = iCurrentState->HandleEnableAlwaysOnL(); + } + else + { + // Behaviour is the same as if unconnect timer had expired + iTimer->StopUnconnectTimer(); + newState = iCurrentState->HandleUnconnectTimerExpiredL(); + + if( newState ) + { + iCurrentState = newState; + } + } + } + } // --------------------------------------------------------------------------- // CAOServer::InitStatePoolL diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/src/caosettings.cpp --- a/alwayson_net_plugin/pdpcontextmanager2/src/caosettings.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/src/caosettings.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -18,6 +18,9 @@ // INCLUDE FILES #include +#include +#include + #include "caosettings.h" #include "logger.h" @@ -568,4 +571,31 @@ } } +// --------------------------------------------------------------------------- +// CAOSettings::IsCellularAllowedByUser +// --------------------------------------------------------------------------- +// +TBool CAOSettings::IsCellularAllowedByUser() const + { + TBool allowed( ETrue ); + CRepository* repository = NULL; + + TRAP_IGNORE( repository = CRepository::NewL( KCRUidCmManager ) ) + + if ( repository ) + { + TInt value( 0 ); + TInt err = repository->Get( KCurrentCellularDataUsage, value ); + + if ( err == KErrNone && value == ECmCellularDataUsageDisabled ) + { + // Cellular connection is not allowed by user + allowed = EFalse; + } + } + + delete repository; + return allowed; + } + // End of file diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/src/caotimer.cpp --- a/alwayson_net_plugin/pdpcontextmanager2/src/caotimer.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/src/caotimer.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -210,7 +210,16 @@ { LOG_1( _L("CAOTimer::UnconnectTimerDisabled") ); - return iSettings.UnconnectTimerValue() == 0; + if ( iSettings.IsCellularAllowedByUser() ) + { + return iSettings.UnconnectTimerValue() == 0; + } + else + { + // There should be no retries because user + // does not allow cellular connections. + return ETrue; + } } // --------------------------------------------------------------------------- diff -r 086aae6fc07e -r f7816ffc66ed alwayson_net_plugin/pdpcontextmanager2/src/cenrepobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/alwayson_net_plugin/pdpcontextmanager2/src/cenrepobserver.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Listens to changes in a Central Repository key +* KCurrentCellularDataUsage in Repository KCRUidCmManager. +*/ + +#include +#include +#include + +#include "cenrepobserver.h" +#include "logger.h" + +// ----------------------------------------------------------------------------- +// CAOCenRepObserver::NewL +// ----------------------------------------------------------------------------- +// +CAOCenRepObserver* CAOCenRepObserver::NewL( MAOCenRepObserver& aObserver ) + { + CAOCenRepObserver* self = + CAOCenRepObserver::NewLC( aObserver ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CAOCenRepObserver::NewLC +// ----------------------------------------------------------------------------- +// +CAOCenRepObserver* CAOCenRepObserver::NewLC( MAOCenRepObserver& aObserver ) + { + CAOCenRepObserver* self = + new( ELeave ) CAOCenRepObserver( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CAOCenRepObserver::~CAOCenRepObserver +// ----------------------------------------------------------------------------- +// +CAOCenRepObserver::~CAOCenRepObserver() + { + // Cancel outstanding request, if exists + Cancel(); + delete iRepository; + } + +// ----------------------------------------------------------------------------- +// CAOCenRepObserver::CAOCenRepObserver +// ----------------------------------------------------------------------------- +// +CAOCenRepObserver::CAOCenRepObserver( MAOCenRepObserver& aObserver ) + : + CActive( CActive::EPriorityStandard ), + iObserver( aObserver ) + { + } + +// ----------------------------------------------------------------------------- +// CAOCenRepObserver::ConstructL +// ----------------------------------------------------------------------------- +// +void CAOCenRepObserver::ConstructL() + { + TRAPD( err, iRepository = CRepository::NewL( KCRUidCmManager ) ) + + if ( err == KErrNone ) + { + CActiveScheduler::Add( this ); + RequestNotifications(); + } + else + { + LOG_2( _L("FAILED to open KCRUidCmManager repository <%d>"), err ); + } + } + +// ----------------------------------------------------------------------------- +// CAOCenRepObserver::RequestNotifications +// ----------------------------------------------------------------------------- +// +void CAOCenRepObserver::RequestNotifications() + { + LOG_1( _L("CAOCenRepObserver::RequestNotifications") ); + + TInt err = iRepository->NotifyRequest( KCurrentCellularDataUsage, iStatus ); + + if ( err == KErrNone ) + { + SetActive(); + } + else + { + LOG_2( _L("ERROR, iRepository->NotifyRequest() %d"), err ); + } + } + +// ----------------------------------------------------------------------------- +// CAOCenRepObserver::DoCancel +// ----------------------------------------------------------------------------- +// +void CAOCenRepObserver::DoCancel() + { + iRepository->NotifyCancel( KCurrentCellularDataUsage ); + } + +// ----------------------------------------------------------------------------- +// CAOCenRepObserver::RunL +// ----------------------------------------------------------------------------- +// +void CAOCenRepObserver::RunL() + { + LOG_2( _L("CAOCenRepObserver::RunL() %d"), iStatus.Int() ); + + if ( iStatus.Int() < KErrNone ) + { + iErrorCounter++; + if ( iErrorCounter > KCenRepErrorRetryCount ) + { + LOG_2( _L("Over %d consecutive errors, stopping notifications permanently"), + KCenRepErrorRetryCount ); + return; + } + } + else + { + iErrorCounter = 0; + + TInt value( 0 ); + TInt err = iRepository->Get( KCurrentCellularDataUsage, value ); + + if ( err == KErrNone ) + { + LOG_2( _L("KCurrentCellularDataUsage: %d"), value ); + + TRAPD( leaveCode, iObserver.CurrentCellularDataUsageChangedL( value ) ) + + if ( leaveCode ) + { + LOG_2( _L("iObserver->CurrentCellularDataUsageChangedL FAILED: %d"), + leaveCode ); + } + } + else + { + LOG_2( _L("ERROR, iRepository->Get(KCurrentCellularDataUsage) %d"), err ); + } + } + + RequestNotifications(); + } + +// End-of-file diff -r 086aae6fc07e -r f7816ffc66ed bearermanagement/S60MCPR/src/s60mcpr.cpp --- a/bearermanagement/S60MCPR/src/s60mcpr.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/bearermanagement/S60MCPR/src/s60mcpr.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -464,10 +464,14 @@ // Store PolicyNotification // This could happen if PolicyServer sends notification too early. // + S60MCPRLOGSTRING1("S60MCPR<%x>::StorePolicyNotification()",(TInt*)this); if ( iPendingNotification.Length() == 0 ) { - ASSERT(Mem::Copy((TAny*)iPendingNotification.Ptr(), &aNotification, aNotification.Length())); - iPendingNotification.SetLength( aNotification.Length() ); + S60MCPRLOGSTRING1("S60MCPR<%x>::StorePolicyNotification() iPendingNotification.Length() == 0",(TInt*)this); + Mem::Copy((TAny*)iPendingNotification.Ptr(), &aNotification, KMpmMessageLength); + S60MCPRLOGSTRING1("S60MCPR<%x>::StorePolicyNotification() Mem::Copy",(TInt*)this); + iPendingNotification.SetLength( KMpmMessageLength ); + S60MCPRLOGSTRING1("S60MCPR<%x>::StorePolicyNotification() iPendingNotification.SetLength",(TInt*)this); } #ifdef _DEBUG else diff -r 086aae6fc07e -r f7816ffc66ed bearermanagement/mpm/inc/mpmcommsdataccess.h --- a/bearermanagement/mpm/inc/mpmcommsdataccess.h Mon Jan 18 20:33:49 2010 +0200 +++ b/bearermanagement/mpm/inc/mpmcommsdataccess.h Tue Jan 26 12:12:48 2010 +0200 @@ -468,6 +468,18 @@ */ TUint32 DestinationIdL( CMManager::TSnapPurpose aSnapPurpose ); + /** + * Finds the real IAP behind the virtual IAP. + * @since 3.1 + * @param aVirtualIapId Given virtual Iap Id + * @param aRealIapId Real Iap Id + * @param aAvailableIAPList List of IAPs + * @param aSession Handle to session class + */ + void FindRealIapL( const TUint32 aVirtualIapId, + TUint32& aRealIapId, + const RAvailableIAPList& aAvailableIAPList, + CMPMServerSession& aSession ); private: /** @@ -497,20 +509,7 @@ * @return ETrue WLAN IAP exists under the virtual IAP, * otherwise EFalse. */ - TBool WlanUnderVirtualL( const TUint32 aVirtualIapId, RArray& aIapPath ); - - /** - * Finds the real IAP behind the virtual IAP. - * @since 3.1 - * @param aVirtualIapId Given virtual Iap Id - * @param aRealIapId Real Iap Id - * @param aAvailableIAPList List of IAPs - * @param aSession Handle to session class - */ - void FindRealIapL( const TUint32 aVirtualIapId, - TUint32& aRealIapId, - const RAvailableIAPList& aAvailableIAPList, - CMPMServerSession& aSession ); + TBool WlanUnderVirtualL( const TUint32 aVirtualIapId, RArray& aIapPath ); /** * loads linked record using element id. diff -r 086aae6fc07e -r f7816ffc66ed bearermanagement/mpm/inc/mpmserver.h --- a/bearermanagement/mpm/inc/mpmserver.h Mon Jan 18 20:33:49 2010 +0200 +++ b/bearermanagement/mpm/inc/mpmserver.h Tue Jan 26 12:12:48 2010 +0200 @@ -823,6 +823,16 @@ * @return Number of active connections */ TInt NumberOfActiveConnections(); + + /** + * Returns server session instance that corresponds to given + * connection id. + * @since 5.2 + * @param aConnId Id of the connection. The id must belong to an + * existing server session. + * @return Server session instance + */ + CMPMServerSession* GetServerSession( TConnectionId aConnId ) const; private: @@ -852,15 +862,6 @@ TBool aCheckForBestIap, TMPMBearerType aDestinationBearerType ); - /** - * Returns server session instance that corresponds to given - * connection id. - * @since 5.2 - * @param aConnId Id of the connection. The id must belong to an - * existing server session. - * @return Server session instance - */ - CMPMServerSession* GetServerSession( TConnectionId aConnId ) const; private: // Data // Pointer to the ConnMonEvents object diff -r 086aae6fc07e -r f7816ffc66ed bearermanagement/mpm/src/mpmcommsdataccess.cpp --- a/bearermanagement/mpm/src/mpmcommsdataccess.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/bearermanagement/mpm/src/mpmcommsdataccess.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -2736,8 +2736,13 @@ for (TInt index = 0; index < aActiveBMConns.Count(); index++ ) { + CMPMServerSession* serverSession = + aSession.MyServer().GetServerSession( + aActiveBMConns[index].iConnInfo.iConnId ); + // Add only started iaps to array - if ( aActiveBMConns[index].iConnInfo.iState == EStarted ) + if ( aActiveBMConns[index].iConnInfo.iState == EStarted && + serverSession->ChooseBestIapCalled() ) { activeIaps.AppendL ( aActiveBMConns[index].iConnInfo.iIapId ); } diff -r 086aae6fc07e -r f7816ffc66ed bearermanagement/mpm/src/mpmiapselection.cpp --- a/bearermanagement/mpm/src/mpmiapselection.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/bearermanagement/mpm/src/mpmiapselection.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -117,33 +117,12 @@ iChooseIapPref = aChooseIapPref; - if ( iSession->IsWlanOnlyL( iNewWlansAllowed ) ) - { - if ( iChooseIapPref.BearerSet() == - TExtendedConnPref::EExtendedConnBearerUnknown ) - { - // Force bearerset to WLAN if received bearerset was empty - iChooseIapPref.SetBearerSet( - TExtendedConnPref::EExtendedConnBearerWLAN ); - } - else if ( iChooseIapPref.BearerSet() & - TExtendedConnPref::EExtendedConnBearerWLAN ) - { - // Force bearerset to WLAN only in case where wlan was included - // in the received bearerset. - iChooseIapPref.SetBearerSet( - TExtendedConnPref::EExtendedConnBearerWLAN ); - } - else - { - // If wlan was not included in received bearerset, - // complete selection with error code - ChooseIapComplete( KErrPermissionDenied, - iSession->MyServer().UserConnPref() ); - return; - } - } - + // Update iNewWlansAllowed information. + // No need to filter away cellular iaps here based on UI's Allow Cellular Usage + // setting, since ConnMon checks the setting and reports only correct IAPs + // available for MPM. + iSession->IsWlanOnlyL( iNewWlansAllowed ); + // Always use stored connection info. // If stored information doesn't exist, a normal sequence is used. TUint32 snap( 0 ); @@ -382,31 +361,38 @@ // Check whether confirmation from user is needed for allowing cellular usage. // When application is starting an IAP confirmation is asked only when roaming. - if ( iSession->IsConfirmFirstL( validateIapId ) ) + // This is skipped for VPN (= virtual) IAPs + if ( iSession->IsConfirmFirstL( validateIapId ) && + !( iSession->MyServer().CommsDatAccess()->IsVirtualIapL( validateIapId ) )) { - // Check whether queries are disabled - if ( !( iChooseIapPref.NoteBehaviour() & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) ) + // Check if we are roaming and cellular data usage query has not yet been presented + // to the user in this country + if ( iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming + && iSession->MyServer().RoamingWatcher()->AskCellularDataUsageAbroad() == true ) { - if ( iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming ) + // Check whether queries are enabled + if ( !( iChooseIapPref.NoteBehaviour() & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) ) { - // Check if cellular data usage query has already been presented to the user in this country - if ( iSession->MyServer().RoamingWatcher()->AskCellularDataUsageAbroad() == true ) - { - TConnectionId connId = iSession->ConnectionId(); + TConnectionId connId = iSession->ConnectionId(); - // International roaming - iConfirmDlgStarting = CMPMConfirmDlgStarting::NewL( - *this, - connId, - snap, - validateIapId, - CMPMConfirmDlg::EConfirmDlgVisitorNetwork, - iChooseIapPref, - iSession->MyServer(), - *iSession, - EExplicitConnection ); - return; - } + // International roaming + iConfirmDlgStarting = CMPMConfirmDlgStarting::NewL( + *this, + connId, + snap, + validateIapId, + CMPMConfirmDlg::EConfirmDlgVisitorNetwork, + iChooseIapPref, + iSession->MyServer(), + *iSession, + EExplicitConnection ); + return; + } + else + { + // Queries disabled, connection must fail + ChooseIapComplete( KErrPermissionDenied, &iChooseIapPref ); + return; } } } @@ -547,8 +533,10 @@ else { // Check whether confirmation from user is needed for allowing cellular usage + // This is skipped for VPN (= virtual) IAPs if ( ( iSession->IsConfirmFirstL( validateIapId ) ) && - ( iSession->MyServer().CommsDatAccess()->CheckWlanL( validateIapId ) == ENotWlanIap ) ) + ( iSession->MyServer().CommsDatAccess()->CheckWlanL( validateIapId ) == ENotWlanIap ) && + !( iSession->MyServer().CommsDatAccess()->IsVirtualIapL( validateIapId ) ) ) { // Check whether queries are disabled if ( !( iChooseIapPref.NoteBehaviour() & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) ) @@ -957,31 +945,38 @@ { // Check whether confirmation from user is needed for allowing cellular usage. // When user is starting implicit IAP/SNAP confirmation is asked only when roaming. - if ( iSession->IsConfirmFirstL( iUserSelectionIapId ) ) + // This is skipped for VPN (= virtual) IAPs + if ( iSession->IsConfirmFirstL( iUserSelectionIapId ) && + !( iSession->MyServer().CommsDatAccess()->IsVirtualIapL( iUserSelectionIapId ) ) ) { - // Check whether queries are disabled - if ( !( iChooseIapPref.NoteBehaviour() & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) ) + // Check if we are roaming and cellular data usage query has not yet been presented + // to the user in this country + if ( iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming + && iSession->MyServer().RoamingWatcher()->AskCellularDataUsageAbroad() == true ) { - if ( iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming ) + // Check whether queries are enabled + if ( !( iChooseIapPref.NoteBehaviour() & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) ) { - // Check if cellular data usage query has already been presented to the user in this country - if ( iSession->MyServer().RoamingWatcher()->AskCellularDataUsageAbroad() == true ) - { - TConnectionId connId = iSession->ConnectionId(); + TConnectionId connId = iSession->ConnectionId(); - // International roaming - iConfirmDlgStarting = CMPMConfirmDlgStarting::NewL( - *this, - connId, - iUserSelectionSnapId, - iUserSelectionIapId, - CMPMConfirmDlg::EConfirmDlgVisitorNetwork, - iChooseIapPref, - iSession->MyServer(), - *iSession, - EImplicitConnection ); - return; - } + // International roaming + iConfirmDlgStarting = CMPMConfirmDlgStarting::NewL( + *this, + connId, + iUserSelectionSnapId, + iUserSelectionIapId, + CMPMConfirmDlg::EConfirmDlgVisitorNetwork, + iChooseIapPref, + iSession->MyServer(), + *iSession, + EImplicitConnection ); + return; + } + else + { + // Queries disabled, connection must fail + ChooseIapComplete( KErrPermissionDenied, &iChooseIapPref ); + return; } } } diff -r 086aae6fc07e -r f7816ffc66ed bearermanagement/mpm/src/mpmserver.cpp --- a/bearermanagement/mpm/src/mpmserver.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/bearermanagement/mpm/src/mpmserver.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -1616,8 +1616,12 @@ // Use priority order vpn, wlan and packet for ( TInt index = 0; index < iActiveBMConns.Count(); index++ ) { + CMPMServerSession* serverSession = GetServerSession( + iActiveBMConns[index].iConnInfo.iConnId ); + // Do check only for active connections - if ( iActiveBMConns[index].iConnInfo.iState == EStarted ) + if ( iActiveBMConns[index].iConnInfo.iState == EStarted && + serverSession->ChooseBestIapCalled() ) { TMPMBearerType bearerType = EMPMBearerTypeOther; @@ -1726,7 +1730,11 @@ for ( TInt index = 0; index < iActiveBMConns.Count(); index++ ) { - if ( iActiveBMConns[index].iConnInfo.iState == EStarted ) + CMPMServerSession* serverSession = GetServerSession( + iActiveBMConns[index].iConnInfo.iConnId ); + + if ( iActiveBMConns[index].iConnInfo.iState == EStarted && + serverSession->ChooseBestIapCalled() ) { count++; } diff -r 086aae6fc07e -r f7816ffc66ed bearermanagement/mpm/src/mpmserversession.cpp --- a/bearermanagement/mpm/src/mpmserversession.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/bearermanagement/mpm/src/mpmserversession.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -3600,12 +3600,16 @@ return; } + MPMLOGSTRING2( "CMPMServerSession::RemoveIapsAccordingToBearerSetL:\ + bearerset=%d", iIapSelection->MpmConnPref().BearerSet() ) + // Drop iaps not according to bearer set if ( iIapSelection->MpmConnPref().BearerSet() != TExtendedConnPref::EExtendedConnBearerUnknown ) { TInt index = 0; + // First filter away physical IAPs (WLAN, packet data...) while ( index != aIapInfo.iCount ) { // Get bearer type @@ -3629,8 +3633,18 @@ index++; continue; } + else if ( bearerType == EMPMBearerTypeVpn ) + { + // Don't remove this VPN IAP on this round. + // VPN IAPs are filtered after this. + index++; + continue; + } else { + MPMLOGSTRING2( "CMPMServerSession::RemoveIapsAccordingToBearerSetL:\ + Filtered IAP ID:%d", aIapInfo.iIap[index].iIapId ); + // Remove this iap from the list for ( TInt index2 = index; index2 < aIapInfo.iCount; index2++ ) { @@ -3640,6 +3654,59 @@ aIapInfo.iCount--; } } + // Next filter away the VPN IAPs from the remaining IAPs. + // VPN IAP should survive this filter only if it has at least + // one unfiltered physical IAP still available. If it does not + // then it cannot be used to establish connection and should + // be filtered. + index = 0; + RAvailableIAPList availableIaps; + + for ( TUint i = 0; i < aIapInfo.iCount; i++ ) + { + availableIaps.AppendL( aIapInfo.iIap[i].iIapId ); + } + + MPMLOGSTRING2( "CMPMServerSession::RemoveIapsAccordingToBearerSetL:\ + Starting VPN IAP filtering (iap count: %d)", aIapInfo.iCount ); + + while ( index != aIapInfo.iCount ) + { + // Get bearer type + TMPMBearerType bearerType = EMPMBearerTypeOther; + TUint32 realIapId( 0 ); + bearerType = + iMyServer.CommsDatAccess()->GetBearerTypeL ( aIapInfo.iIap[index].iIapId ); + + if ( bearerType == EMPMBearerTypeVpn ) + { + iMyServer.CommsDatAccess()->FindRealIapL( aIapInfo.iIap[index].iIapId, + realIapId, + availableIaps, + *this); + + MPMLOGSTRING3( "CMPMServerSession::RemoveIapsAccordingToBearerSetL:\ +VPN IAP id: %d, real IAP id: %d", aIapInfo.iIap[index].iIapId, realIapId ); + + if ( realIapId != 0 ) + { + // Actual physical IAP was found for this VPN IAP. Do not filter. + index++; + continue; + } + MPMLOGSTRING2( "CMPMServerSession::RemoveIapsAccordingToBearerSetL:\ +Filtered away VPN IAP: %d", aIapInfo.iIap[index].iIapId ); + + // Remove this iap from the list + for ( TInt index2 = index; index2 < aIapInfo.iCount; index2++ ) + { + aIapInfo.iIap[index2].iIapId = aIapInfo.iIap[index2 + 1].iIapId; + } + + aIapInfo.iCount--; + } + index++; + } } } diff -r 086aae6fc07e -r f7816ffc66ed cmmanager/cmmgr/Framework/Src/cmconnselectrbpage.cpp --- a/cmmanager/cmmgr/Framework/Src/cmconnselectrbpage.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/cmmanager/cmmgr/Framework/Src/cmconnselectrbpage.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -327,6 +327,7 @@ { case EEventEnterKeyPressed: case EEventItemDoubleClicked: + case EEventItemSingleClicked: case EEventItemClicked: { ProcessCommandL(ECmManagerUiCmdDestSelect); diff -r 086aae6fc07e -r f7816ffc66ed cmmanager/cmmgr/Plugins/cmpluginvpn/inc/cmpluginvpn.h --- a/cmmanager/cmmgr/Plugins/cmpluginvpn/inc/cmpluginvpn.h Mon Jan 18 20:33:49 2010 +0200 +++ b/cmmanager/cmmgr/Plugins/cmpluginvpn/inc/cmpluginvpn.h Tue Jan 26 12:12:48 2010 +0200 @@ -20,6 +20,8 @@ #include #include +#include + #include #include @@ -273,6 +275,15 @@ * or leaves with the error code KErrArgument */ TInt CheckValidityAndConvertDestinationIdL( TUint32 aDestinationId ); + + /** + * Retrieves default APs from the Tier Record of given identifier. + * + * @param aTierIdentifier identifier for tier record. + * @since S60 5.2 + * @return an elementid id of the default AP record in tier record. + */ + const TMDBElementId DefaultAPRecordL( const TInt aTierIdentifier = KAfInet ); public: /** diff -r 086aae6fc07e -r f7816ffc66ed cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpluginvpn.cpp --- a/cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpluginvpn.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpluginvpn.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -36,6 +36,9 @@ #include #include +#include +#include + #include "cmlogger.h" #include "cmmanagerimpl.h" #include "cmdestinationimpl.h" @@ -463,6 +466,7 @@ ServiceRecord().iServiceIAP = aValue; ServiceRecord().iServiceNetwork = 0; + ServiceRecord().iServiceSNAP = 0; iVirtualRecord->iNextLayerIAP = aValue; iVirtualRecord->iNextLayerSNAP = 0; } @@ -481,11 +485,13 @@ TInt destinationId( 0 ); destinationId = CheckValidityAndConvertDestinationIdL( aValue ); + TMDBElementId defaultAP = DefaultAPRecordL(); - ServiceRecord().iServiceIAP = 0; - ServiceRecord().iServiceNetwork = destinationId - KCmDefaultDestinationAPTagId; + ServiceRecord().iServiceIAP = 0; + ServiceRecord().iServiceNetwork = 0; + ServiceRecord().iServiceSNAP = defaultAP; iVirtualRecord->iNextLayerIAP = 0; - iVirtualRecord->iNextLayerSNAP = destinationId; + iVirtualRecord->iNextLayerSNAP = destinationId; } break; @@ -898,6 +904,7 @@ ServiceRecord().iServicePolicy.SetL( KNullDesC ); ServiceRecord().iServiceIAP = 0; ServiceRecord().iServiceNetwork = 0; + ServiceRecord().iServiceSNAP = 0; iProxyRecord->iPortNumber = KVpnProxyPortNumberDefault; @@ -2047,4 +2054,37 @@ return id; } +// -------------------------------------------------------------------------- +// CCmPluginVpn::DefaultAPRecordL +// -------------------------------------------------------------------------- +// +const TMDBElementId CCmPluginVpn::DefaultAPRecordL( const TInt aTierIdentifier ) + { + LOGGER_ENTERFN( "CCmPluginVpn::DefaultAPRecordL" ); + // Resolve the Default SNAP AP elementid + // + CCDTierRecord* tierRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdTierRecord ) ); + + CleanupStack::PushL( tierRecord ); + + // Find the correct tier table based on given identifier. + // + tierRecord->iRecordTag = aTierIdentifier; + if ( !tierRecord->FindL( Session() ) ) + { + User::Leave( KErrCorrupt ); + } + + // Find out the default AP for IP connections. + // + TMDBElementId defaultAP = tierRecord->iDefaultAccessPoint; + + // Cleanup tier record. + // + CleanupStack::PopAndDestroy( tierRecord ); + + return defaultAP; + } + // eof diff -r 086aae6fc07e -r f7816ffc66ed cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpvpnsettingsdlg.cpp --- a/cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpvpnsettingsdlg.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpvpnsettingsdlg.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -242,7 +242,17 @@ } case ECmProxyPortNumber: { - retVal = ShowPopupPortNumSettingPageL( aAttribute ); + HBufC* proxyName = iCmPluginBaseEng.GetStringAttributeL( ECmProxyServerName ); + if( !proxyName ) + { + break; + } + CleanupStack::PushL( proxyName ); + if( proxyName->Length() ) + { // Port number is allowed to set after proxy address is set. + retVal = ShowPopupPortNumSettingPageL( aAttribute ); + } + CleanupStack::PopAndDestroy(); // proxyName break; } default: diff -r 086aae6fc07e -r f7816ffc66ed connectionmonitoring/connectionmonitorplugin/data/10281BC1.rss --- a/connectionmonitoring/connectionmonitorplugin/data/10281BC1.rss Mon Jan 18 20:33:49 2010 +0200 +++ b/connectionmonitoring/connectionmonitorplugin/data/10281BC1.rss Tue Jan 26 12:12:48 2010 +0200 @@ -2,9 +2,9 @@ * Copyright (c) 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 "Symbian Foundation License v1.0" +* under the terms of "Eclipse Public License v1.0" * which accompanies this distribution, and is available -* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* at the URL "http://www.eclipse.org/legal/epl-v10.html". * * Initial Contributors: * Nokia Corporation - initial contribution. diff -r 086aae6fc07e -r f7816ffc66ed connectionmonitoring/connmon/connectionmonitor/inc/ConnMonBearerGPRS.h --- a/connectionmonitoring/connmon/connectionmonitor/inc/ConnMonBearerGPRS.h Mon Jan 18 20:33:49 2010 +0200 +++ b/connectionmonitoring/connmon/connectionmonitor/inc/ConnMonBearerGPRS.h Tue Jan 26 12:12:48 2010 +0200 @@ -60,6 +60,12 @@ * Sets available IAPs of this type as available in CommsDat cache */ void FlagAvailableIaps() const; + +private: + /** + * Reads KCurrentCellularDataUsage -key from Repository KCRUidCmManager + */ + TInt CurrentCellularDataUsage() const; }; #endif // CONNMONBEARERGPRS_H diff -r 086aae6fc07e -r f7816ffc66ed connectionmonitoring/connmon/connectionmonitor/src/ConnMonBearerGPRS.cpp --- a/connectionmonitoring/connmon/connectionmonitor/src/ConnMonBearerGPRS.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/connectionmonitoring/connmon/connectionmonitor/src/ConnMonBearerGPRS.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -15,6 +15,10 @@ * */ +#include +#include +#include + #include "ConnMonBearerGPRS.h" #include "connmoncommsdatcache.h" #include "ConnMonIAP.h" @@ -45,43 +49,47 @@ // Is bearer available TBool byCell( EFalse ); TBool byPhone( EFalse ); - - // Find out if we are in 2G or in 3G - it is needed for calculating bearer availability - RMobilePhone::TMobilePhoneNetworkMode mode; - err = iConnMonIAP->MobilePhone()->GetCurrentMode( mode ); - - if ( KErrNone == err ) + + if ( CurrentCellularDataUsage() != ECmCellularDataUsageDisabled ) { - switch ( mode ) - { - case RMobilePhone::ENetworkModeGsm: - case RMobilePhone::ENetworkModeUnknown: // Emulator default - err = iConnMonIAP->GetBearerSupportInfo( EBearerIdGPRS, byCell, byPhone ); - break; - case RMobilePhone::ENetworkModeWcdma: - err = iConnMonIAP->GetBearerSupportInfo( EBearerIdWCDMA, byCell, byPhone ); - break; - default: - LOGEXITFN1("TConnMonBearerGPRS::GetAvailability()", err) - return err; // Return silently, report not available - } + // Find out if we are in 2G or in 3G - it is needed for calculating bearer availability + RMobilePhone::TMobilePhoneNetworkMode mode; + err = iConnMonIAP->MobilePhone()->GetCurrentMode( mode ); if ( KErrNone == err ) { - if ( byCell && byPhone ) + switch ( mode ) { - aAvailable = ETrue; + case RMobilePhone::ENetworkModeGsm: + case RMobilePhone::ENetworkModeUnknown: // Emulator default + err = iConnMonIAP->GetBearerSupportInfo( EBearerIdGPRS, byCell, byPhone ); + break; + case RMobilePhone::ENetworkModeWcdma: + err = iConnMonIAP->GetBearerSupportInfo( EBearerIdWCDMA, byCell, byPhone ); + break; + default: + LOGEXITFN1("TConnMonBearerGPRS::GetAvailability()", err) + return err; // Return silently, report not available + } + + if ( KErrNone == err ) + { + if ( byCell && byPhone ) + { + aAvailable = ETrue; + } } } - } - - // Make GPRS available in wins + + + // Make GPRS available in wins #if defined(__WINSCW__) - LOGIT2("GetAvailability: Emulator override, true values were %d <%d>", aAvailable, err) - err = KErrNone; - aAvailable = ETrue; + LOGIT2("GetAvailability: Emulator override, true values were %d <%d>", aAvailable, err) + err = KErrNone; + aAvailable = ETrue; #endif - + } + //LOGEXITFN1("TConnMonBearerGPRS::GetAvailability()", err) return err; } @@ -123,4 +131,26 @@ LOGEXITFN("TConnMonBearerGPRS::FlagAvailableIaps()") } +// --------------------------------------------------------------------------- +// Read current cellular data usage setting from Central Repository +// --------------------------------------------------------------------------- +// +TInt TConnMonBearerGPRS::CurrentCellularDataUsage() const + { + // Use default value if repository is not available + TInt value( ECmCellularDataUsageAutomatic ); + CRepository* cmRepository = NULL; + + TRAPD( err, cmRepository = CRepository::NewL( KCRUidCmManager ) ) + + if ( err == KErrNone ) + { + err = cmRepository->Get( KCurrentCellularDataUsage, value ); + LOGIT2("KCurrentCellularDataUsage from repository: %d error: <%d>", value, err ) + } + + delete cmRepository; + return value; + } + // End-of-file diff -r 086aae6fc07e -r f7816ffc66ed connectionmonitoring/connmon/connectionmonitor/src/cellulardatausagekeyupdater.cpp --- a/connectionmonitoring/connmon/connectionmonitor/src/cellulardatausagekeyupdater.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/connectionmonitoring/connmon/connectionmonitor/src/cellulardatausagekeyupdater.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -28,6 +28,7 @@ #include "cellulardatausagekeyupdater.h" #include "ConnMonServ.h" +#include "ConnMonAvailabilityManager.h" #include "ConnMonIap.h" #include "ConnMonDef.h" #include "log.h" @@ -99,12 +100,15 @@ if ( err == KErrNone ) { TInt previous( 0 ); - TInt err = cmRepository->Get( KCurrentCellularDataUsage, previous ); + err = cmRepository->Get( KCurrentCellularDataUsage, previous ); if ( err == KErrNone && ( value != previous ) ) { cmRepository->Set( KCurrentCellularDataUsage, value ); - LOGIT1("KCurrentCellularDataUsage set to <%d>", value) + LOGIT1("KCurrentCellularDataUsage set to %d", value) + + LOGIT("CCellularDataUsageKeyUpdater triggered HandleAvailabilityChange()") + iServer->AvailabilityManager()->HandleAvailabilityChange(); } delete cmRepository; } diff -r 086aae6fc07e -r f7816ffc66ed connectionutilities/ConnectionDialogs/ConnectionUiUtilities/src/ChangeConnectionDlg.cpp --- a/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/src/ChangeConnectionDlg.cpp Mon Jan 18 20:33:49 2010 +0200 +++ b/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/src/ChangeConnectionDlg.cpp Tue Jan 26 12:12:48 2010 +0200 @@ -69,7 +69,7 @@ // Destructor CChangeConnectionDlg::~CChangeConnectionDlg() { - delete iExpiryTimer; + //delete iExpiryTimer; } @@ -168,8 +168,9 @@ SetIconsL(); - iExpiryTimer = CExpiryTimer::NewL( *this ); - iExpiryTimer->Start(); + // Timer not in use due the unresolved crash + //iExpiryTimer = CExpiryTimer::NewL( *this ); + //iExpiryTimer->Start(); CLOG_LEAVEFN( "CChangeConnectionDlg::PreLayoutDynInitL " ); } diff -r 086aae6fc07e -r f7816ffc66ed data/cccccc00_emulator.cre Binary file data/cccccc00_emulator.cre has changed