realtimenetprots/sipfw/ProfileAgent/AlrMonitor/src/sipalrmonitor.cpp
changeset 0 307788aac0a8
child 37 0295359a7673
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/ProfileAgent/AlrMonitor/src/sipalrmonitor.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,217 @@
+// Copyright (c) 2007-2009 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:
+// Name          : sipalrmonitor.cpp
+// Part of       : SIP / SIP ALR Monitor
+// Version       : SIP/6.0 
+//
+
+
+
+#include "sipalrobserver.h"
+#include "sipalrmonitor.h"
+#include "../../Profile/Inc/SipProfileLog.h"
+
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::NewL
+// -----------------------------------------------------------------------------
+//
+CSipAlrMonitor* CSipAlrMonitor::NewL(
+    CSipSystemStateMonitor& aSystemStateMonitor)
+	{
+    CSipAlrMonitor* self =  new(ELeave)CSipAlrMonitor(aSystemStateMonitor);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::CSipAlrMonitor
+// -----------------------------------------------------------------------------
+//
+CSipAlrMonitor::CSipAlrMonitor(CSipSystemStateMonitor& aSystemStateMonitor) :
+    iSystemStateMonitor(aSystemStateMonitor)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSipAlrMonitor::ConstructL()
+    {
+    User::LeaveIfError ( iSocketServer.Connect() );
+	PROFILE_DEBUG1("CSipAlrMonitor::ConstructL")
+    }
+
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::~CSipAlrMonitor
+// -----------------------------------------------------------------------------
+//
+CSipAlrMonitor::~CSipAlrMonitor()
+	{
+	iSocketServer.Close();
+	iSnapMonitors.ResetAndDestroy();
+	
+	PROFILE_DEBUG1("CSipAlrMonitor::~CSipAlrMonitor")	
+	}
+
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::RefreshIapAvailabilityL
+// -----------------------------------------------------------------------------
+//	
+void CSipAlrMonitor::RefreshIapAvailabilityL ( TUint32 aSnapId )
+	{
+    PROFILE_DEBUG3( "CSipAlrMonitorImplementation::RefreshIapAvailabilityL",
+	                 aSnapId )
+    
+    CSipAlrSnapMonitor* monitor = FindSnapMonitor( aSnapId );
+    if ( monitor )
+        {
+		monitor->RefreshL();
+		}
+	}
+	    
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::AllowMigration
+// -----------------------------------------------------------------------------
+//
+TInt CSipAlrMonitor::AllowMigration( TUint32 aSnapId )
+    {
+    PROFILE_DEBUG3("CSipAlrMonitor::AllowMigration, SnapId",aSnapId)
+    
+    CSipAlrSnapMonitor* monitor = FindSnapMonitor( aSnapId );
+    if ( monitor )
+        {
+        monitor->AllowMigration();     
+        return KErrNone;
+		}
+	return KErrNotFound;
+    }
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::DisallowMigration
+// -----------------------------------------------------------------------------
+//
+TInt CSipAlrMonitor::DisallowMigration( TUint32 aSnapId )
+    {
+    PROFILE_DEBUG3("CSipAlrMonitor::DisallowMigration, SnapId",aSnapId)
+    
+    CSipAlrSnapMonitor* monitor = FindSnapMonitor( aSnapId );
+    if ( monitor )
+        {
+        monitor->DisallowMigration();     
+        return KErrNone;
+		}
+	return KErrNotFound;     
+    }
+    
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::NewIapAccepted
+// -----------------------------------------------------------------------------
+//    
+TInt CSipAlrMonitor::NewIapAccepted( TUint32 aSnapId )  
+    {
+    PROFILE_DEBUG3("CSipAlrMonitor::NewIapAccepted, SnapId",aSnapId)
+    
+    CSipAlrSnapMonitor* monitor = FindSnapMonitor( aSnapId );
+    if ( monitor )
+        {
+        monitor->NewIapAccepted();     
+        return KErrNone;
+		}
+	return KErrNotFound;       
+    }
+    
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::NewIapRejected
+// -----------------------------------------------------------------------------
+//  
+TInt CSipAlrMonitor::NewIapRejected( TUint32 aSnapId )
+    {
+    PROFILE_DEBUG3( "CSipAlrMonitor::NewIapRejected, SnapId",aSnapId )
+    
+    CSipAlrSnapMonitor* monitor = FindSnapMonitor( aSnapId );
+    if ( monitor )
+        {
+        monitor->NewIapRejected();
+        return KErrNone;
+        }
+	return KErrNotFound;      
+    }
+    
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::MonitorSnapL
+// -----------------------------------------------------------------------------
+//
+void CSipAlrMonitor::MonitorSnapL( 
+    TUint32 aSnapId,
+    MSipAlrObserver& aObserver )
+    {
+    PROFILE_DEBUG4( "CSipAlrMonitor::MonitorSnapL",
+                    aSnapId, reinterpret_cast< TUint >( &aObserver ) )    
+    
+    CSipAlrSnapMonitor* monitor = FindSnapMonitor( aSnapId );
+    if ( monitor )
+        {
+        // Monitor exists, add observer and get current IAP availability
+        monitor->AddObserverL(aObserver);
+        monitor->RefreshL();
+        
+        PROFILE_DEBUG1("CSipAlrMonitor::MonitorSnapL: observer added" )
+        }
+    else
+        {
+    	monitor = CSipAlrSnapMonitor::NewLC( 
+    	    aSnapId, aObserver, iSocketServer, iSystemStateMonitor );
+    	iSnapMonitors.AppendL( monitor );
+    	CleanupStack::Pop( monitor );
+    	
+    	PROFILE_DEBUG1("CSipAlrMonitor::MonitorSnapL: new monitor created" )
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::FreeResources
+// -----------------------------------------------------------------------------
+//
+void CSipAlrMonitor::FreeResources ( MSipAlrObserver& aObserver )
+    {
+	for ( TInt i = iSnapMonitors.Count()-1; i >= 0; i-- )
+		{
+		TBool last = iSnapMonitors[i]->DetachObserver ( aObserver );
+		if ( last ) 
+			{
+			delete iSnapMonitors[i];
+			iSnapMonitors.Remove ( i );
+			PROFILE_DEBUG1( "CSipAlrMonitor::FreeResources monitor deleted" )
+			}
+		}
+    }
+
+// -----------------------------------------------------------------------------
+// CSipAlrMonitor::FindSnapMonitor
+// -----------------------------------------------------------------------------
+//
+CSipAlrSnapMonitor* CSipAlrMonitor::FindSnapMonitor( TUint32 aSnapId )
+    {
+    CSipAlrSnapMonitor* monitor = NULL;
+	for ( TInt i = 0; i < iSnapMonitors.Count() && !monitor; i++ )
+		{
+		if ( iSnapMonitors[i]->SnapId() == aSnapId )
+			{    
+			monitor = iSnapMonitors[i];
+			}
+        }
+    return monitor;
+    }