diff -r 000000000000 -r 307788aac0a8 sipplugins/sippsystemstatemonitor/src/sipsystemstatemonitorimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sipplugins/sippsystemstatemonitor/src/sipsystemstatemonitorimpl.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,230 @@ +/* +* Copyright (c) 2007 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: +* +*/ + + +// INCLUDE FILES +#include "sipsystemstatemonitorimpl.h" +#include "CSystemStateConnUsagePermissionMonitor.h" +#include "sipdevicestateaware.h" +#include "siprfsmonitorao.h" + +// ----------------------------------------------------------------------------- +// CSipSystemStateMonitorImpl::NewL +// ----------------------------------------------------------------------------- +// +CSipSystemStateMonitorImpl* CSipSystemStateMonitorImpl::NewL() + { + CSipSystemStateMonitorImpl* self = + new( ELeave )CSipSystemStateMonitorImpl(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CSipSystemStateMonitorImpl::ConstructL +// ----------------------------------------------------------------------------- +// +void CSipSystemStateMonitorImpl::ConstructL() + { + iMonitorAo = CSipSystemStateMonitorAo::NewL(); + iUsagePermissionMonitor = + CSystemStateConnUsagePermissionMonitor::NewL(); + iSipDeviceAwareObject = CSipDeviceStateAware::NewL(); + } + +// ----------------------------------------------------------------------------- +// CSipSystemStateMonitorImpl::CSipSystemStateMonitorImpl +// ----------------------------------------------------------------------------- +// +CSipSystemStateMonitorImpl::CSipSystemStateMonitorImpl() + { + } + +// ----------------------------------------------------------------------------- +// CSipSystemStateMonitorImpl::~CSipSystemStateMonitorImpl +// ----------------------------------------------------------------------------- +// +CSipSystemStateMonitorImpl::~CSipSystemStateMonitorImpl() + { + delete iMonitorAo; + iSnapMonitors.ResetAndDestroy(); + delete iUsagePermissionMonitor; + delete iRfsMonitor; + delete iSipDeviceAwareObject; + } + +// ----------------------------------------------------------------------------- +// CSipSystemStateMonitorImpl::State +// ----------------------------------------------------------------------------- +// +CSipSystemStateMonitor::TSystemState CSipSystemStateMonitorImpl::State() const + { + return iMonitorAo->State(); + } + +// ----------------------------------------------------------------------------- +// CSipSystemStateMonitorImpl::StartMonitoringL +// ----------------------------------------------------------------------------- +// +void CSipSystemStateMonitorImpl::StartMonitoringL( + TSystemVariable aVariable, + TInt aObjectId, + MSipSystemStateObserver& aObserver ) + { + if ( aVariable == ESystemState ) + { + iMonitorAo->AddObserverL( aObserver ); + iSipDeviceAwareObject->AddObserverL( aObserver ); + } + else if ( aVariable == ESnapAvailability ) + { + CSipSnapAvailabilityMonitor* monitor = FindSnapMonitorById( aObjectId ); + if ( !monitor ) + { + TInt permissionToUseNetwork = + iUsagePermissionMonitor->CurrentUsagePermission(); + User::LeaveIfError( permissionToUseNetwork ); + monitor = CSipSnapAvailabilityMonitor::NewLC( + aObjectId, permissionToUseNetwork, aObserver ); + iUsagePermissionMonitor->AddObserverL( *monitor ); + iSnapMonitors.AppendL( monitor ); + CleanupStack::Pop( monitor ); + } + else + { + monitor->AddObserverL( aObserver ); + } + } + else if ( aVariable == ERfsState ) + { + iRfsMonitor = iRfsMonitor?iRfsMonitor:CSipRfsMonitorAo::NewL(); + iRfsMonitor->AddObserverL( aObserver ); + } + else + { + User::Leave( KErrNotSupported ); + } + } + +// ----------------------------------------------------------------------------- +// CSipSystemStateMonitorImpl::StopMonitoring +// ----------------------------------------------------------------------------- +// +void CSipSystemStateMonitorImpl::StopMonitoring( + TSystemVariable aVariable, + TInt aObjectId, + MSipSystemStateObserver& aObserver ) + { + if ( aVariable == ESystemState ) + { + iMonitorAo->RemoveObserver( aObserver ); + iSipDeviceAwareObject->RemoveObserver ( aObserver ); + } + else if ( aVariable == ESnapAvailability ) + { + CSipSnapAvailabilityMonitor* monitor = FindSnapMonitorById( aObjectId ); + if ( monitor ) + { + iUsagePermissionMonitor->RemoveObserver( *monitor ); + monitor->RemoveObserver( aObserver ); + if ( !monitor->HasObservers() ) + { + iSnapMonitors.Remove( iSnapMonitors.Find( monitor ) ); + delete monitor; + } + } + } + else if ( aVariable == ERfsState ) + { + if(iRfsMonitor) + iRfsMonitor->RemoveObserver( aObserver ); + } + } + +// ----------------------------------------------------------------------------- +// CSipSystemStateMonitorImpl::CurrentValue +// ----------------------------------------------------------------------------- +// +TInt CSipSystemStateMonitorImpl::CurrentValue( + TSystemVariable aVariable, + TInt aObjectId ) const + { + if ( aVariable == ESystemState ) + { + return iMonitorAo->State(); + } + else if ( aVariable == ESnapAvailability ) + { + CSipSnapAvailabilityMonitor* monitor = FindSnapMonitorById( aObjectId ); + if ( monitor ) + { + TInt permissionToUseNetwork = + iUsagePermissionMonitor->CurrentUsagePermission(); + if ( permissionToUseNetwork < 0 ) + { + return permissionToUseNetwork; + } + return permissionToUseNetwork && monitor->SnapAvailability(); + } + } + else if ( aVariable == ERfsState ) + { + if(iRfsMonitor) + iRfsMonitor->State(); + } + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CSipSystemStateMonitorImpl::EventProcessingCompleted +// ----------------------------------------------------------------------------- +// +void CSipSystemStateMonitorImpl::EventProcessingCompleted( + TSystemVariable aVariable, + TInt /*aObjectId*/, + MSipSystemStateObserver& aObserver) + { + if ( iRfsMonitor && aVariable == ERfsState ) + { + iRfsMonitor->EventProcessingCompleted(aObserver); + } + else if ( iSipDeviceAwareObject && aVariable == ESystemState ) + { + iSipDeviceAwareObject->EventProcessingCompleted(aObserver); + } + } + +// ----------------------------------------------------------------------------- +// CSipSystemStateMonitorImpl::FindSnapMonitorById +// ----------------------------------------------------------------------------- +// +CSipSnapAvailabilityMonitor* CSipSystemStateMonitorImpl::FindSnapMonitorById( + TInt aSnapId ) const + { + CSipSnapAvailabilityMonitor* monitor = NULL; + for ( TInt i=0; i < iSnapMonitors.Count() && !monitor; i++ ) + { + CSipSnapAvailabilityMonitor* tmp = iSnapMonitors[i]; + if ( tmp->SnapId() == aSnapId ) + { + monitor = tmp; + } + } + return monitor; + }