realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileState.h
changeset 0 307788aac0a8
child 2 1e1cc61f56c3
--- /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 <e32base.h>
+
+// 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