diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ProfileAgent/Server/Src/sipalrhandler.cpp --- /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); + }