sipplugins/sippsystemstatemonitor/src/sipsystemstatemonitorimpl.cpp
changeset 15 8248b03a2669
parent 0 307788aac0a8
--- a/sipplugins/sippsystemstatemonitor/src/sipsystemstatemonitorimpl.cpp	Tue Feb 02 01:03:15 2010 +0200
+++ b/sipplugins/sippsystemstatemonitor/src/sipsystemstatemonitorimpl.cpp	Fri Apr 16 15:18:54 2010 +0300
@@ -18,9 +18,10 @@
 
 //  INCLUDE FILES
 #include "sipsystemstatemonitorimpl.h"
-#include "CSystemStateConnUsagePermissionMonitor.h"
 #include "sipdevicestateaware.h"
 #include "siprfsmonitorao.h"
+#include "sipvpnmonitorao.h"
+#include <featmgr.h>          // for Feature Manager
 
 // -----------------------------------------------------------------------------
 // CSipSystemStateMonitorImpl::NewL
@@ -43,8 +44,6 @@
 void CSipSystemStateMonitorImpl::ConstructL()
     {
     iMonitorAo = CSipSystemStateMonitorAo::NewL();
-    iUsagePermissionMonitor = 
-        CSystemStateConnUsagePermissionMonitor::NewL();
     iSipDeviceAwareObject = CSipDeviceStateAware::NewL();
     }
 
@@ -62,9 +61,15 @@
 //
 CSipSystemStateMonitorImpl::~CSipSystemStateMonitorImpl()
     {
+    // iVpnMonitor is created in StartMonitoringL().
+    if ( FeatureManager::FeatureSupported( KFeatureIdFfImsDeregistrationInVpn ) )
+        {
+        delete iVpnMonitor;
+        iVpnMonitor = NULL;
+        }
+		
     delete iMonitorAo;
     iSnapMonitors.ResetAndDestroy();
-    delete iUsagePermissionMonitor;
     delete iRfsMonitor;
 	delete iSipDeviceAwareObject;
     }
@@ -97,12 +102,8 @@
         CSipSnapAvailabilityMonitor* monitor = FindSnapMonitorById( aObjectId );
         if ( !monitor )
             {
-            TInt permissionToUseNetwork = 
-                iUsagePermissionMonitor->CurrentUsagePermission();
-            User::LeaveIfError( permissionToUseNetwork ); 
             monitor = CSipSnapAvailabilityMonitor::NewLC( 
-                aObjectId, permissionToUseNetwork, aObserver );
-            iUsagePermissionMonitor->AddObserverL( *monitor );
+                aObjectId, aObserver );
             iSnapMonitors.AppendL( monitor );
             CleanupStack::Pop( monitor );
             }
@@ -116,6 +117,16 @@
         iRfsMonitor = iRfsMonitor?iRfsMonitor:CSipRfsMonitorAo::NewL();
         iRfsMonitor->AddObserverL( aObserver );
         }
+    // CSipVpnMonitorAo is created for P&S key change monitoring.
+    else if ( FeatureManager::FeatureSupported( KFeatureIdFfImsDeregistrationInVpn )
+         && ( aVariable == EVpnState ) )
+        {
+        if ( !iVpnMonitor )
+            {
+            iVpnMonitor = CSipVpnMonitorAo::NewL();
+            }
+        iVpnMonitor->AddObserverL( aObserver );
+        }
     else
         {
         User::Leave( KErrNotSupported );
@@ -140,8 +151,7 @@
         {
         CSipSnapAvailabilityMonitor* monitor = FindSnapMonitorById( aObjectId );
         if ( monitor )
-            {
-            iUsagePermissionMonitor->RemoveObserver( *monitor );
+            {            
             monitor->RemoveObserver( aObserver );
             if ( !monitor->HasObservers() )
                 {
@@ -155,6 +165,15 @@
         if(iRfsMonitor)
             iRfsMonitor->RemoveObserver( aObserver );
         }
+    // Remove the client as an observer when stops VPN P&S key monitoring.
+    else if ( FeatureManager::FeatureSupported( KFeatureIdFfImsDeregistrationInVpn )
+         && ( aVariable == EVpnState ) )
+        {
+        if ( iVpnMonitor )
+            {
+            iVpnMonitor->RemoveObserver( aObserver );
+            }
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -172,22 +191,23 @@
     else if ( aVariable == ESnapAvailability )
         {
         CSipSnapAvailabilityMonitor* monitor = FindSnapMonitorById( aObjectId );
-        if ( monitor )
-            {
-            TInt permissionToUseNetwork = 
-                iUsagePermissionMonitor->CurrentUsagePermission();
-            if ( permissionToUseNetwork < 0 )
-                {
-                return permissionToUseNetwork;
-                }        
-            return permissionToUseNetwork && monitor->SnapAvailability();
-            }
+        if ( monitor )        
+            return monitor->SnapAvailability();
         }
     else if ( aVariable == ERfsState )
         {
         if(iRfsMonitor)
             iRfsMonitor->State();
         }
+    else if ( FeatureManager::FeatureSupported( KFeatureIdFfImsDeregistrationInVpn )
+         && ( aVariable == EVpnState ) )
+        {
+        if( iVpnMonitor )
+            {
+            return iVpnMonitor->State();
+            }
+        }
+		
     return KErrNotFound;
     }
 
@@ -208,6 +228,13 @@
         {
         iSipDeviceAwareObject->EventProcessingCompleted(aObserver);
         }
+    // SIP deregistration for VPN session has been completed. 
+    else if ( FeatureManager::FeatureSupported( KFeatureIdFfImsDeregistrationInVpn )
+         && ( aVariable == EVpnState ) 
+         && iVpnMonitor )
+        {
+        iVpnMonitor->EventProcessingCompleted(aObserver);
+        }
     }
 
 // -----------------------------------------------------------------------------