diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileState.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileState.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,346 @@ +/* +* Copyright (c) 2008-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 : sipprofilestate.h +* Part of : Sip Profile Server +* Interface : private +* Base class for profile states +* Version : 1.0 +* +*/ + + + + +/** + @internalComponent +*/ + +#ifndef CSIPPROFILESTATE_H +#define CSIPPROFILESTATE_H + +// INCLUDES +#include "sipconcreteprofile.h" +#include + +// FORWARD DECLARATIONS +class CSIPProfileCacheItem; +class CSIPPluginDirector; +class MSIPExtendedConcreteProfileObserver; +class CSIPProfileServerCore; + +// CLASS DECLARATION + +/** +* Base class for profile state classes +* @lib +*/ +class CSIPProfileState: public CBase + { + public: // Enums + + // State ids used for logging. + // The actual values of these enums must be different from the values + // of CSIPConcreteProfile::TStatus. + enum TStatus + { + /** Wait for IAP */ + EWaitForIAP = 10, + /** Wait for IAP migration permission */ + EWaitForPermission, + /** Migrating to new IAP */ + EMigratingToNewIAP, + /** Unregistering old IAP */ + EUnregisteringOldIAP + }; + + public: // Constructors and destructor + + /** + * Destructor. + */ + virtual ~CSIPProfileState(); + + public: // New functions + + /** + * Gets CSIPConcreteProfile status of the state + * @return CSIPConcreteProfile status of the state + */ + virtual CSIPConcreteProfile::TStatus Name() const = 0; + + /** + * Called when entering a new state. + * @param aItem Profile cache item + * @param aMaySendRegStatusEvent ETrue if registration status event can + * be sent to client. EFalse if it must not be sent. + * @param aServerCore Server core where status event is sent to + */ + virtual void EnterL(CSIPProfileCacheItem& aItem, + TBool aMaySendRegStatusEvent, + CSIPProfileServerCore& aServerCore); + + /** + * Registers profile, leaves because not allowed + * @param aItem profile cache item + */ + virtual void RegisterL(CSIPProfileCacheItem& aItem); + + /** + * Updates profile registration + * @param aItem profile cache item + * @param aObserver client updating the profile + */ + virtual void UpdateRegistrationL( + CSIPProfileCacheItem& aItem, + const MSIPExtendedConcreteProfileObserver& aObserver); + + /** + * Enables profile + * @param aItem profile cache item + * @param aObserver client enabling the profile + */ + virtual void EnableL( + CSIPProfileCacheItem& aItem, + const MSIPExtendedConcreteProfileObserver& aObserver) = 0; + + /** + * Enables profile + * @param aItem profile cache item + * @param aObserver client enabling the profile + * @param aSnapId SNAP id + */ + virtual void EnableSnapInUseL( + CSIPProfileCacheItem& aItem, + const MSIPExtendedConcreteProfileObserver& aObserver, + TUint32 aSnapId) = 0; + + /** + * Disables profile. + * @param aItem profile cache item + * @param aObserver client disabling the profile + */ + virtual void DisableL( + CSIPProfileCacheItem& aItem, + const MSIPExtendedConcreteProfileObserver& aObserver) = 0; + + /** + * Profile Removed, proper actions done in order. + * to unregister if not unregistered + * @param aItem profile cache item + */ + virtual void RemoveL(CSIPProfileCacheItem& aItem); + + /** + * Checks if profile can be permanently removed + * @param aItem profile cache item + * @return ETrue, if unregistered and can be removed + */ + virtual TBool CanBePermanentlyRemoved( + const CSIPProfileCacheItem& aItem) const; + + /** + * Updates registration status. + * @param aItem profile cache item + * @param aStatus new registration status + */ + virtual void RegistrationStatusEventL( + CSIPProfileCacheItem& aItem, + CSIPConcreteProfile::TStatus aStatus); + + /** + * Resets registration status to unregistered befause of an error. + * @param aItem profile cache item + * @param aError occurred error code + * @return ETrue Work normally + * EFalse Don't send error or registration state events to client + */ + virtual TBool ErrorOccurred(CSIPProfileCacheItem& aItem, + TInt aError) = 0; + + /** + * A new IAP became available. + * This event is only received by a profile that has a SNAP configured. + * @param aItem Profile cache item + * @param aSnapId a SNAP id. + * @param aNewIapId an IAP id. + */ + virtual void IapAvailableL(CSIPProfileCacheItem& aItem, + TUint32 aSnapId, + TUint32 aNewIapId); + + /** + * Migration to new IAP is allowed by a client. + * @param aItem Profile cache item + * @param aIapId IAP id + * @param aObserver Observer + */ + virtual void ClientAllowsMigrationL(CSIPProfileCacheItem& aItem, + TUint32 aIapId, + const MSIPExtendedConcreteProfileObserver& aObserver); + + /** + * Migration to new IAP is not allowed by a client. + * @param aItem Profile cache item + * @param aIapId IAP id + * @param aObserver Observer + */ + virtual void ClientDisallowsMigrationL(CSIPProfileCacheItem& aItem, + TUint32 aIapId, + const MSIPExtendedConcreteProfileObserver& aObserver); + + /** + * Overall result of all clients of all profiles using the same SNAP, is + * that migration is allowed. + * @param aItem Profile cache item + * @param aIapId IAP id + */ + virtual void MigrationIsAllowedL(CSIPProfileCacheItem& aItem, + TUint32 aIapId); + + /** + * Overall result of all clients of all profiles using the same SNAP, is + * that migration is not allowed. + * @param aItem Profile cache item + * @param aIapId IAP id + */ + virtual void MigrationIsDisallowedL(CSIPProfileCacheItem& aItem, + TUint32 aIapId); + + virtual TBool ShouldRefreshIAPs(CSIPProfileCacheItem& aItem) const; + + /** + * Determines if the state is an ALR-related state, or not. + * @return ETrue If the state is one of the ALR-related ones + * EFalse Otherwise + */ + virtual TBool IsAlrState() const; + + /** + * System is about to be shut down. + * @param aItem Profile cache item + */ + virtual void ShutdownInitiated(CSIPProfileCacheItem& aItem); + + /** + * No unused IAP available in SNAP + * @param aItem Profile cache item + */ + virtual void NoNewIapAvailable(CSIPProfileCacheItem& aItem); + + /** + * Determines if profile can be updated in current state, or if it must + * be queued and updated later. + * @param aItem Profile cache item + * @return ETrue Can update now + * EFalse Must queue + */ + TBool CanProfileBeUpdated(CSIPProfileCacheItem& aItem) const; + + /** + * Checks if an initial registration has been done. + * @param aItem Profile cache item + * @return ETrue Initial registration has been done + * EFalse Otherwise + */ + TBool IsInitialRegisterDone(CSIPProfileCacheItem& aItem) const; + + /** + * Register profile using the IAP id. + * @param aItem Profile cache item + * @param aIapId IAP id to register with + * @param aRegInProg "Register in progress" state + */ + void RegisterWithIapL(CSIPProfileCacheItem& aItem, + TUint32 aIapId, + CSIPProfileState& aRegInProg) const; + + /** + * De-register the used profile + * @param aItem profile cache item + * @param aUnregInProg "Unregister in progress" state + */ + void StartDeregisterL(CSIPProfileCacheItem& aItem, + CSIPProfileState& aUnregInProg) const; + + /** + * Update profile. + * @param aProfile Profile with updated data + * @param aOldProfile Existing profile + * @return ETrue if de-register started for the existing profile + * EFalse if the update is so minor that e.g. sending an UPDATE + * is enough, and there is no need for de-register + */ + TBool DoUpdateL(CSIPConcreteProfile& aProfile, + CSIPConcreteProfile& aOldProfile) const; + + /** + * Refreshing IAPs has failed. Terminate the handling of this profile. + * @param aItem profile cache item + */ + void RefreshIAPsFailed(CSIPProfileCacheItem& aItem) const; + + protected: + + /** + * Constructor. + * @param aPluginDirector plugin mgr + */ + CSIPProfileState(CSIPPluginDirector& aPluginDirector); + + /** + * Enables profile, leaves because not allowed + * @param aItem profile cache item + * @param aObserver client enabling the profile + */ + void DoCommonEnableL( + CSIPProfileCacheItem& aItem, + const MSIPExtendedConcreteProfileObserver& aObserver) const; + + /** + * Disables profile + * @param aCore server core + * @param aItem profile cache item + */ + void DoCommonDisable( + CSIPProfileCacheItem& aItem, + const MSIPExtendedConcreteProfileObserver& aObserver) const; + + /** + * Resets registartion status of underlying layers + * to unregistred befause of error + * @param aItem profile cache item + */ + void DoCommonErrorOccurred(CSIPProfileCacheItem& aItem) const; + + void DisableWhileWaitingIAPL(CSIPProfileCacheItem& aItem, + const MSIPExtendedConcreteProfileObserver& aObserver, + CSIPProfileState& aUnregInProg, + CSIPProfileState& aUnregistered) const; + + void DisableWhileInProgressL(CSIPProfileCacheItem& aItem, + CSIPProfileState& aUnregInProg, + CSIPProfileState& aUnregistered) const; + + protected: // Data + + CSIPPluginDirector& iPluginDirector; + + private: // For testing purposes +#ifdef CPPUNIT_TEST + friend class CSIPProfileStateTest; +#endif + }; + +#endif