--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alwayson_net_plugin/pdpcontextmanager2/src/caosettings.cpp Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,571 @@
+/*
+* Copyright (c) 2004,2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implements the CAOSettings class
+*
+*/
+
+
+// INCLUDE FILES
+#include <centralrepository.h>
+
+#include "caosettings.h"
+#include "logger.h"
+#include "maosettingsobserver.h"
+#include "pdpcontextmanagerinternalcrkeys.h"
+
+// UNNAMED NAMESPACE FOR LOCAL DEFINITIONS
+namespace
+ {
+ // CONSTANTS
+#ifdef _DEBUG
+ _LIT( KPanicCat, "Settings" );
+#endif
+
+ // Default values
+ const TInt KDefaultRetryInterval = 1;
+ const TInt KDefaultIAPUid = 1;
+ const TInt KDefaultConnectionInterval = 25;
+ const TInt KDefaultUnconnectInterval = 25;
+ const TInt KLingerOff = 0;
+ const TInt KLingerForEver = -1;
+
+ const TUint KIapColumn = 0x00000100;
+ const TUint KLingerColumn = 0x00000200;
+
+ // DATA TYPES
+ enum TPanicCode
+ {
+ EAlreadyFetchingSettings,
+ ENotActive
+ };
+
+ // LOCAL FUNCTIONS
+#ifdef _DEBUG
+ LOCAL_C void Panic( TPanicCode aCode )
+ {
+ User::Panic( KPanicCat, aCode );
+ }
+#endif
+ }
+
+// METHODS
+
+// ---------------------------------------------------------------------------
+// CAOSettings::NewL
+// ---------------------------------------------------------------------------
+//
+CAOSettings* CAOSettings::NewL( MAOSettingsObserver& aObserver )
+ {
+ LOG_1( _L("CAOSettings::NewL") );
+
+ CAOSettings* self = new( ELeave ) CAOSettings( aObserver );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::~CAOSettings
+// ---------------------------------------------------------------------------
+//
+CAOSettings::~CAOSettings()
+ {
+ LOG_1( _L("CAOSettings::~CAOSettings") );
+
+ Cancel();
+ if ( iCenRepNotifyHandler )
+ {
+ iCenRepNotifyHandler->StopListening();
+ delete iCenRepNotifyHandler;
+ }
+ delete iRepository;
+
+ iLingerSettings.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::CAOSettings
+// ---------------------------------------------------------------------------
+//
+CAOSettings::CAOSettings( MAOSettingsObserver& aObserver ):
+ CActive( CActive::EPriorityStandard ),
+ iObserver( aObserver ),
+ iIAP( KDefaultIAPUid ),
+ iRetryTimerValue( KDefaultRetryInterval ),
+ iSupportedInHPLMN( EFalse ),
+ iSupportedInVPLMN( EFalse ),
+ iLingerTimerValue( KLingerOff )
+ {
+ LOG_1( _L("CAOSettings::CAOSettings") );
+
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::ConstructL()
+ {
+ LOG_1( _L("CAOSettings::ConstructL") );
+
+ // Create cenrep
+ iRepository = CRepository::NewL( KCRUidPDPContextManager );
+
+ // Create cenrep listener
+ iCenRepNotifyHandler = CCenRepNotifyHandler::NewL(
+ *this,
+ *iRepository );
+ iCenRepNotifyHandler->StartListeningL();
+
+ // Get connection timer value
+ iConnectionTimerValue = KDefaultConnectionInterval;
+ UpdateConnectionTimerSetting();
+
+ // Get unconnect timer value
+ iUnconnectTimerValue = KDefaultUnconnectInterval;
+ UpdateUnconnectTimerSetting();
+
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::FetchSettings
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::FetchSettings( TUint32 aId )
+ {
+ LOG_2( _L("CAOSettings::FetchSettings: aId: %d"), aId );
+
+ __ASSERT_DEBUG( !IsActive(), Panic( EAlreadyFetchingSettings ) );
+
+ // Let just scheduler run and get settings when RunL is called
+ iSettingsToFetch = aId;
+ iStatus = KRequestPending;
+ SetActive();
+ CompleteSelf( iStatus, KErrNone );
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::RunL
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::RunL()
+ {
+ LOG_2( _L("CAOSettings::RunL: iStatus: %d"), iStatus.Int() );
+
+ // Currently we cannot complete with an error
+ SetupSettings( iSettingsToFetch );
+ iObserver.HandleSettingsChangedL();
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::DoCancel()
+ {
+ LOG_1( _L("CAOSettings::DoCancel") );
+
+ // We must complete pending request if needed
+ // Checking IsActive is not sufficient, we must check also
+ // iStatus
+ if ( iStatus == KRequestPending && IsActive() )
+ {
+ CompleteSelf( iStatus, KErrCancel );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::RunError
+// ---------------------------------------------------------------------------
+//
+TInt CAOSettings::RunError( TInt /*aError*/ )
+ {
+ LOG_1( _L("CAOSettings::RunError") );
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::AccessPointId
+// ---------------------------------------------------------------------------
+//
+TInt CAOSettings::AccessPointId() const
+ {
+ LOG_1( _L("CAOSettings::AccessPointId") );
+
+ return iIAP;
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::RetryTimerValue
+// ---------------------------------------------------------------------------
+//
+TInt CAOSettings::RetryTimerValue() const
+ {
+ LOG_1( _L("CAOSettings::RetryTimerValue") );
+
+ return iRetryTimerValue;
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::AlwaysOnSupportedInHPLMN
+// ---------------------------------------------------------------------------
+//
+TBool CAOSettings::AlwaysOnSupportedInHPLMN() const
+ {
+ LOG_1( _L("CAOSettings::AlwaysOnSupportedInHPLMN") );
+
+ return iSupportedInHPLMN;
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::AlwaysOnSupportedInVPLMN
+// ---------------------------------------------------------------------------
+//
+TBool CAOSettings::AlwaysOnSupportedInVPLMN() const
+ {
+ LOG_1( _L("CAOSettings::AlwaysOnSupportedInVPLMN") );
+
+ return iSupportedInVPLMN;
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::ConnectionTimerValue
+// ---------------------------------------------------------------------------
+//
+TInt CAOSettings::ConnectionTimerValue() const
+ {
+ LOG_1( _L("CAOSettings::ConnectionTimerValue") );
+
+ return iConnectionTimerValue;
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::UnconnectTimerValue
+// ---------------------------------------------------------------------------
+//
+TInt CAOSettings::UnconnectTimerValue() const
+ {
+ LOG_1( _L("CAOSettings::UnconnectTimerValue") );
+
+ return iUnconnectTimerValue;
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::LingerTimerValue
+// ---------------------------------------------------------------------------
+//
+TInt CAOSettings::LingerTimerValue( const TUint aIapId ) const
+ {
+ LOG_1( _L("CAOSettings::LingerTimerValue") );
+
+ for ( TInt j=0; j < iLingerSettings.Count(); j++ )
+ {
+ if ( iLingerSettings[ j ].iIap == aIapId )
+ {
+ LOG_3( _L("Linger setting found >> iap: %d, interval: %d"),
+ aIapId,
+ iLingerSettings[ j ].iInterval);
+
+ if ( iLingerSettings[ j ].iInterval == 0 )
+ {
+ return KLingerForEver;
+ }
+ else
+ {
+ return ( iLingerSettings[ j ].iInterval );
+ }
+ }
+ }
+
+ LOG_2( _L("LingerTimerValue() not found >> iap: %d"),
+ aIapId );
+
+ return KLingerOff; // Linger is off
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::HandleNotifyGeneric
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::HandleNotifyGeneric( TUint32 aId )
+ {
+ LOG_2( _L("CAOSettings::HandleNotifyGeneric: aId: %d"), aId );
+
+ switch ( aId )
+ {
+ // We are interested only in Always-On settings
+ case KPDPContextManagerDefaultUid:
+ case KPDPContextManagerRetryTimer:
+ case KPDPContextManagerConnectionTimer:
+ case KPDPContextManagerUnconnectTimer:
+ case KPDPContextManagerEnableWhenRoaming:
+ case KPDPContextManagerEnableWhenHome:
+ {
+ FetchSettings( aId );
+ break;
+ }
+ default:
+ {
+ if ( ( aId & KLingerColumn ) == KLingerColumn )
+ {
+ FetchSettings( KPDPContextManagerLinger );
+ }
+
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::SetupSettings
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::SetupSettings( TUint32 aId )
+ {
+ LOG_2( _L("CAOSettings::SetupSettings: aId: %d"), aId );
+
+ switch ( aId )
+ {
+ case KPDPContextManagerDefaultUid:
+ {
+ UpdateIAPSetting();
+ break;
+ }
+ case KPDPContextManagerRetryTimer:
+ {
+ UpdateRetryTimerSetting();
+ break;
+ }
+ case KPDPContextManagerConnectionTimer:
+ {
+ UpdateConnectionTimerSetting();
+ break;
+ }
+ case KPDPContextManagerUnconnectTimer:
+ {
+ UpdateUnconnectTimerSetting();
+ break;
+ }
+ case KPDPContextManagerEnableWhenHome:
+ {
+ UpdateHPLMNSetting();
+ break;
+ }
+ case KPDPContextManagerEnableWhenRoaming:
+ {
+ UpdateVPLMNSetting();
+ break;
+ }
+ case KPDPContextManagerLinger:
+ {
+ UpdateLingerTimerSetting();
+ break;
+ }
+ default:
+ {
+ // Set all
+ UpdateIAPSetting();
+ UpdateRetryTimerSetting();
+ UpdateConnectionTimerSetting();
+ UpdateUnconnectTimerSetting();
+ UpdateHPLMNSetting();
+ UpdateVPLMNSetting();
+ UpdateLingerTimerSetting();
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::CompleteSelf
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::CompleteSelf( TRequestStatus& aStatus, TInt aReason )
+ {
+ LOG_1( _L("CAOSettings::CompleteSelf") );
+
+ __ASSERT_DEBUG( IsActive(), Panic( ENotActive ) );
+
+ TRequestStatus* status = &aStatus;
+ User::RequestComplete( status, aReason );
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::UpdateIAPSetting
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::UpdateIAPSetting()
+ {
+ LOG_2( _L("CAOSettings::UpdateIAPSettingL >> Old value: %d"), iIAP );
+
+ UpdateSetting( KPDPContextManagerDefaultUid, iIAP );
+
+ LOG_2( _L("CAOSettings::UpdateIAPSettingL >> New value: %d"), iIAP );
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::UpdateRetryTimerSetting
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::UpdateRetryTimerSetting()
+ {
+ LOG_2( _L("CAOSettings::UpdateRetryTimerSetting >> Old value: %d"),
+ iRetryTimerValue );
+
+ UpdateSetting( KPDPContextManagerRetryTimer, iRetryTimerValue );
+
+ LOG_2( _L("CAOSettings::UpdateRetryTimerSetting >> New value: %d"),
+ iRetryTimerValue );
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::UpdateConnectionTimerSetting
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::UpdateConnectionTimerSetting()
+ {
+ LOG_2( _L("CAOSettings::UpdateConnectionTimerSetting >> Old value: %d"),
+ iConnectionTimerValue );
+
+ UpdateSetting( KPDPContextManagerConnectionTimer, iConnectionTimerValue );
+
+ LOG_2( _L("CAOSettings::UpdateConnectionTimerSetting >> New value: %d"),
+ iConnectionTimerValue );
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::UpdateUnconnectTimerSetting
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::UpdateUnconnectTimerSetting()
+ {
+ LOG_2( _L("CAOSettings::UpdateUnconnectTimerSetting >> Old value: %d"),
+ iUnconnectTimerValue );
+
+ UpdateSetting( KPDPContextManagerUnconnectTimer, iUnconnectTimerValue );
+
+ LOG_2( _L("CAOSettings::UpdateUnconnectTimerSetting >> New value: %d"),
+ iUnconnectTimerValue );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAOSettings::UpdateHPLMNSetting
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::UpdateHPLMNSetting()
+ {
+ LOG_2( _L("CAOSettings::UpdateHPLMNSetting >> Old value: %d"),
+ iSupportedInHPLMN );
+
+ UpdateSetting( KPDPContextManagerEnableWhenHome, iSupportedInHPLMN );
+
+ LOG_2( _L("CAOSettings::UpdateHPLMNSetting >> New value: %d"),
+ iSupportedInHPLMN );
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::UpdateVPLMNSetting
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::UpdateVPLMNSetting()
+ {
+ LOG_2( _L("CAOSettings::UpdateVPLMNSetting >> Old value: %d"),
+ iSupportedInVPLMN );
+
+ UpdateSetting( KPDPContextManagerEnableWhenRoaming, iSupportedInVPLMN );
+
+ LOG_2( _L("CAOSettings::UpdateVPLMNSetting >> New value: %d"),
+ iSupportedInVPLMN );
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::UpdateLingerTimerSetting
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::UpdateLingerTimerSetting()
+ {
+ LOG_1( _L("CAOSettings::UpdateLingerTimerSetting"));
+
+ TInt count( 0 );
+ TInt err( KErrNone );
+ TLingerSetting ls;
+
+ iLingerSettings.Reset();
+
+ // Get number of entries (iapId&linger) in Centrep
+ err = iRepository->Get( KPdpContextManagerLingerArrayCount, count );
+
+ if ( err == KErrNone )
+ {
+ // read all entries from Centrep
+ for ( TInt row=1; row <= count; row++ )
+ {
+ err = iRepository->Get( ( KIapColumn | row ), ls.iIap );
+
+ if ( err == KErrNone )
+ {
+ err = iRepository->Get( ( KLingerColumn | row ), ls.iInterval );
+ }
+
+ if ( err == KErrNone )
+ {
+ iLingerSettings.Append( ls );
+ }
+ else
+ {
+ LOG_3( _L("CRepository::Get() failed >> err: %d, row: %d"),
+ err, row);
+
+ return;
+ }
+ }
+ }
+ else
+ {
+ LOG_2( _L("CRepository::Get( KPdpContextManagerLingerArrayCount) >> err: %d"),
+ err);
+ }
+
+ // Write to log
+ for ( TInt j=0; j < iLingerSettings.Count(); j++ )
+ {
+ LOG_3( _L("iLingerSettings >> iap: %d, interval: %d"),
+ iLingerSettings[ j ].iIap,
+ iLingerSettings[ j ].iInterval);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAOSettings::UpdateSetting
+// ---------------------------------------------------------------------------
+//
+void CAOSettings::UpdateSetting( TUint32 aId, TInt& aValue )
+ {
+ LOG_2( _L("CAOSettings::UpdateSetting: %d"), aId );
+
+ TInt value = 0;
+ TInt err = iRepository->Get( aId, value );
+ if ( err == KErrNone )
+ {
+ // New value got, store it
+ aValue = value;
+ }
+ }
+
+// End of file