diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ProfileAgent/AlrMonitor/src/sipalrmonitor.cpp --- /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; + }