diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ProfileAgent/Server/Src/sipalrmigrationcontroller.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/sipalrmigrationcontroller.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,176 @@ +/* +* 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 : sipalrmigrationcontroller.h +* Part of : SIP / SIP Profile Server +* Version : SIP/6.0 +* +*/ + + + + +/** + @internalComponent +*/ + +#ifndef CSIPALRMIGRATIONCONTROLLER_H +#define CSIPALRMIGRATIONCONTROLLER_H + +// INCLUDES +#include "sipalrobserver.h" +#include + +// FORWARD DECLARATIONS +class CSipAlrMonitor; +class MSipAlrMigrationObserver; +class TSipAlrMigrationObserverInfo; + + +// CLASS DECLARATION +/** +* Combines the migration permissions of all profiles using the same SNAP id. +* +* @lib sipsrofilesrv.exe +*/ +class CSipAlrMigrationController : + public CBase, + public MSipAlrObserver + { + public: // Enumerations + + enum TIapId + { + // The most recent IAP id offered to MSipAlrMigrationObserver + EMostRecentIap = 0 + }; + + public: + static CSipAlrMigrationController* NewLC(CSipAlrMonitor& aAlrMonitor, + TUint32 aSnapId); + + ~CSipAlrMigrationController(); + + public: // From MSipAlrObserver + + void AlrEvent(MSipAlrObserver::TEvent aEvent, + TUint32 aSnapId, + TUint32 aIapId); + + public: // New functions + + TUint32 SnapId() const; + + /** + * Check if any profile is using this instance. + * @return ETrue At least one profile is using this migration controller + * EFalse otherwise + */ + TBool IsUsed() const; + + /** + * A profile starts to listen for IAP notifications of the SNAP. + * @param aObserver Observer to attach + * @return Initial IAP id to use, or zero of no IAP is available yet + */ + TUint32 AttachProfileL(MSipAlrMigrationObserver& aObserver); + + /** + * A profile quits listening IAP notifications of the SNAP. + * @param aObserver Observer to detach + */ + void DetachProfile(MSipAlrMigrationObserver& aObserver); + + /** + * A new IAP became available. + * @param aSnapId SNAP id + * @param aNewIap IAP id + */ + void IapAvailable(TUint32 aSnapId, TUint32 aNewIapId); + + /** + * Profile cache item has formed its decision regarding the migration. + * @param aObserver Observer who is now giving its answer + * @param aAllow ETrue if this observer allows migration, + * EFalse otherwise + * @param aIapId IAP id + */ + void SetMigrationPermission(MSipAlrMigrationObserver& aObserver, + TBool aAllow, + TUint32 aIapId = EMostRecentIap); + + void RefreshIapAvailabilityL(TUint32 aSnapId); + + TInt SetIapAcceptance(MSipAlrMigrationObserver& aObserver, + TBool aIapWorks); + + void ResetFlags(); + + private: // Constructors + + CSipAlrMigrationController(CSipAlrMonitor& aAlrMonitor, + TUint32 aSnapId); + + private: // New functions + + void SendMigrationResult(TUint32 aIapId, TBool aAllowed); + + TInt FindIndex(MSipAlrMigrationObserver& aObserver) const; + + TBool ObserversWaitingPermission() const; + + TBool ObserversWaitingAcceptance() const; + + void NoNewIapAvailable() const; + + void OfferedIapRejected() const; + + private: // Data + + // Not owned + CSipAlrMonitor& iAlrMonitor; + + RArray iObservers; + + // SNAP id that is monitored. Does not change. + const TUint32 iSnapId; + + // The IAP id, that was most recently offered to observers with + // MSipAlrMigrationObserver::IapAvailableL. + TUint32 iOfferedIapId; + + // Most recent IAP id, where the migration was allowed. + TUint32 iAllowedIapId; + + // Is the migration to iOfferedIapId disallowed. + TBool iMigrationDisallowed; + + // Used to prevent refreshing the IAP availability when it has already + // been done. + // ETrue if CSipAlrMonitor has been requested to refresh the IAP + // availability. + // Will be set to EFalse, when ALR monitor notifies about IAP, using + // MSipAlrObserver::IapAvailable. + TBool iRefreshIssued; + + private: // For testing purposes +#ifdef CPPUNIT_TEST + friend class CSipAlrMigrationControllerTest; + friend class CSIPProfileAlrTest; + friend class CSIPProfileStateWaitForPermissionTest; + friend class CSIPProfileCacheItemTest; +#endif + }; + +#endif // CSIPALRMIGRATIONCONTROLLER_H