sipplugins/sippsystemstatemonitor/src/sipsystemstatemonitorimpl.cpp
changeset 0 307788aac0a8
child 2 1e1cc61f56c3
--- /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;    
+    }