--- 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);
+ }
}
// -----------------------------------------------------------------------------