realtimenetprots/sipfw/ProfileAgent/Server/Src/sipalrhandler.cpp
changeset 0 307788aac0a8
child 18 f54bfd820e04
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/sipalrhandler.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,170 @@
+// 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          : sipalrhandler.cpp
+// Part of       : SIP / SIP Profile Server
+// Version       : SIP/6.0 
+//
+
+
+
+#include "sipalrhandler.h"
+#include "sipalrmonitor.h"
+#include "SipProfileCacheItem.h"
+#include "sipprofileerrorhandler.h"
+
+
+// -----------------------------------------------------------------------------
+// CSipAlrHandler::NewL
+// -----------------------------------------------------------------------------
+//
+CSipAlrHandler* CSipAlrHandler::NewL(
+    MSipProfileErrorHandler& aErrorHandler,
+    CSipSystemStateMonitor* aSystemStateMonitor)
+	{
+    return new(ELeave)CSipAlrHandler(aErrorHandler,aSystemStateMonitor);
+	}
+
+// -----------------------------------------------------------------------------
+// CSipAlrHandler::CSipAlrHandler
+// -----------------------------------------------------------------------------
+//
+CSipAlrHandler::CSipAlrHandler(
+    MSipProfileErrorHandler& aErrorHandler,
+    CSipSystemStateMonitor* aSystemStateMonitor) :
+    iErrorHandler(aErrorHandler),
+    iSystemStateMonitor(aSystemStateMonitor)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSipAlrHandler::~CSipAlrHandler
+// -----------------------------------------------------------------------------
+//
+CSipAlrHandler::~CSipAlrHandler()
+	{
+	delete iAlrMonitor;
+	}
+
+// -----------------------------------------------------------------------------
+// CSipAlrHandler::EnableProfileL
+// If SNAP is not configured, work in the old way.
+// -----------------------------------------------------------------------------
+//
+void CSipAlrHandler::EnableProfileL(CSIPProfileCacheItem& aProfile,
+    const MSIPExtendedConcreteProfileObserver& aObserver)
+    {
+    TInt err(KErrNone);
+    TUint32 snapId(0);
+	if (aProfile.IsSNAPConfigured(snapId))
+		{
+		TRAP(err, aProfile.EnableSnapInUseL(aObserver, snapId));
+		}
+	else
+		{
+		TRAP(err, aProfile.EnableL(aObserver));
+		}
+
+	if (err != KErrNone)
+		{
+    	HandleErrorL(aProfile, err, err);
+	    }
+    }
+
+// -----------------------------------------------------------------------------
+// CSipAlrHandler::DisableProfileL
+// -----------------------------------------------------------------------------
+//
+void CSipAlrHandler::DisableProfileL(CSIPProfileCacheItem& aProfile,
+    const MSIPExtendedConcreteProfileObserver& aObserver)
+    {
+	TRAPD(err, aProfile.DisableL(aObserver));
+    if (err != KErrNone)
+        {
+        HandleErrorL(aProfile, err, KErrNone);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSipAlrHandler::AllowMigrationL
+// -----------------------------------------------------------------------------
+//
+void CSipAlrHandler::AllowMigrationL(CSIPProfileCacheItem& aProfile,
+	TUint32 aIapId,
+	const MSIPExtendedConcreteProfileObserver& aObserver)
+    {
+    TRAPD(err, aProfile.ClientAllowsMigrationL(aIapId, aObserver));
+    if (err != KErrNone)
+	    {
+	    HandleErrorL(aProfile, err, err);
+	    }
+    }
+
+// -----------------------------------------------------------------------------
+// CSipAlrHandler::DisallowMigrationL
+// -----------------------------------------------------------------------------
+//
+void CSipAlrHandler::DisallowMigrationL(CSIPProfileCacheItem& aProfile,
+	TUint32 aIapId,
+	const MSIPExtendedConcreteProfileObserver& aObserver)
+    {
+    TRAPD(err, aProfile.ClientDisallowsMigrationL(aIapId, aObserver));
+    if (err != KErrNone)
+	    {
+	    HandleErrorL(aProfile, err, err);
+	    }
+    }
+
+// -----------------------------------------------------------------------------
+// CSipAlrHandler::RefreshIapAvailabilityL
+// -----------------------------------------------------------------------------
+//
+void CSipAlrHandler::RefreshIapAvailabilityL(CSIPProfileCacheItem& aProfile)
+    {
+    TUint32 snapId(0);
+    __ASSERT_ALWAYS(aProfile.IsSNAPConfigured(snapId),
+    				User::Leave(KErrArgument));
+
+    AlrMonitorL().RefreshIapAvailabilityL(snapId);
+    }
+
+// -----------------------------------------------------------------------------
+// CSipAlrHandler::AlrMonitorL
+// Create the monitor on demand. It must not be loaded on start-up if not needed
+// -----------------------------------------------------------------------------
+//
+CSipAlrMonitor& CSipAlrHandler::AlrMonitorL()
+    {
+    if (!iAlrMonitor)
+        {
+        __ASSERT_ALWAYS(iSystemStateMonitor, User::Leave(KErrNotSupported));
+		iAlrMonitor = CSipAlrMonitor::NewL(*iSystemStateMonitor);
+        }
+    return *iAlrMonitor;
+    }
+
+// -----------------------------------------------------------------------------
+// CSipAlrHandler::HandleErrorL
+// -----------------------------------------------------------------------------
+//
+void CSipAlrHandler::HandleErrorL(CSIPProfileCacheItem& aItem,
+    							  TInt aErr,
+    							  TInt aOwnError)
+    {
+    if (aItem.ReferenceCount() == 0 && 
+        !aItem.Profile().IsAutoRegistrationEnabled())
+        {
+        iErrorHandler.HandleProfileError(aItem, aOwnError);
+        }
+    User::Leave(aErr);
+    }