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