realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileCacheItem.h
changeset 0 307788aac0a8
child 9 1e1cc61f56c3
equal deleted inserted replaced
-1:000000000000 0:307788aac0a8
       
     1 /*
       
     2 * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 * Name        : sipprofilecacheitem.h
       
    16 * Part of     : SIP Profile Server
       
    17 * Interface   : private
       
    18 * The class used for caching and reference counting of profiles 
       
    19 * Version     : 1.0
       
    20 *
       
    21 */
       
    22 
       
    23 
       
    24 
       
    25 
       
    26 /**
       
    27  @internalComponent
       
    28 */
       
    29 
       
    30 
       
    31 #ifndef CSIPPROFILECACHEITEM_H
       
    32 #define CSIPPROFILECACHEITEM_H
       
    33 
       
    34 // INCLUDES
       
    35 #include "sipalrmigrationobserver.h"
       
    36 #include "sipconcreteprofile.h"
       
    37 #include <e32base.h>
       
    38 
       
    39 // FORWARD DECLARATIONS
       
    40 
       
    41 class MSIPExtendedConcreteProfileObserver;
       
    42 class CSIPProfileState;
       
    43 class CSIPProfileServerCore;
       
    44 class CSipAlrMigrationController;
       
    45 
       
    46 // CLASS DECLARATION
       
    47 
       
    48 /**
       
    49  * The class used for caching and reference counting of profiles.
       
    50  */
       
    51 class CSIPProfileCacheItem : public CBase, public MSipAlrMigrationObserver
       
    52 	{
       
    53 	public: // Enumerations
       
    54 
       
    55 		enum TState 
       
    56 			{
       
    57 			// Normal profile state
       
    58 			ENormal,
       
    59 			// Profile to be removed, cannot be used
       
    60 			EToBeRemoved
       
    61 			};
       
    62 			
       
    63     public: // Constructors and destructor
       
    64 
       
    65 	    /**
       
    66         * Two-phased constructor.
       
    67 		* @return new instance
       
    68         */
       
    69 		static CSIPProfileCacheItem* NewL(CSIPProfileServerCore& aCore,
       
    70 										  CSIPProfileState* aUnregistered);
       
    71 
       
    72 	    /**
       
    73         * Two-phased constructor.
       
    74 		* @return new instance
       
    75         */
       
    76 		static CSIPProfileCacheItem* NewLC(CSIPProfileServerCore& aCore,
       
    77 										   CSIPProfileState* aUnregistered);
       
    78 	    /**
       
    79         * Destructor
       
    80         */
       
    81 		~CSIPProfileCacheItem();
       
    82 
       
    83 	public: // From MSipAlrMigrationObserver
       
    84 
       
    85 		void IapAvailable(TUint32 aSnapId, TUint32 aNewIapId);
       
    86 
       
    87 		void MigrationIsAllowedL(TUint32 aIapId);
       
    88 
       
    89         void MigrationIsDisallowedL(TUint32 aIapId);
       
    90 
       
    91         void ErrorOccurred(TInt aError);
       
    92 
       
    93         void NoNewIapAvailable();
       
    94 
       
    95 		void RefreshIAPsFailed();
       
    96 
       
    97 		void OfferedIapRejected();
       
    98 
       
    99 
       
   100 	public: // New functions
       
   101 
       
   102 	    /**
       
   103         * Sets concrete profile to be cached, ownership is
       
   104 		* transferred
       
   105 		* @param aProfile profile to be cached
       
   106         */
       
   107 		void SetProfile(CSIPConcreteProfile* aProfile);
       
   108 
       
   109 	    /**
       
   110         * Sets profile id of cached profile
       
   111 		* @param aProfileId profile id
       
   112         */
       
   113 		void SetProfileId(TUint aProfileId);
       
   114 
       
   115 	    /**
       
   116         * Gets profile id of cached profile
       
   117 		* @return profile id
       
   118         */
       
   119 		TUint ProfileId() const;
       
   120 
       
   121 	    /**
       
   122         * Add observer for profile
       
   123 		* Client is considered observer when it instantiates profile
       
   124 		* @param aObserver observer to send events
       
   125         */
       
   126 		void AddObserverL(const MSIPExtendedConcreteProfileObserver& aObserver);
       
   127 
       
   128 	    /**
       
   129         * Gets observers of the profile
       
   130 		* @return array of observers
       
   131         */
       
   132 		const RPointerArray<MSIPExtendedConcreteProfileObserver>&
       
   133 			Observers() const;
       
   134 
       
   135 	    /**
       
   136         * Checks if client is profile's observer or user.
       
   137 		* Client is observer if it has instance of the disabled profile
       
   138 		* @param aObserver checked observer
       
   139 		* @return ETrue If client is observer or user
       
   140         */
       
   141 		TBool IsObserverOrUser(
       
   142 			const MSIPExtendedConcreteProfileObserver& aObserver) const;
       
   143 
       
   144 	    /**
       
   145         * Checks if client is user
       
   146 		* Client is user if it has instance of the enabled profile
       
   147 		* @param aObserver checked observer
       
   148 		* @return ETrue if user
       
   149         */
       
   150 		TBool IsUser(
       
   151 			const MSIPExtendedConcreteProfileObserver& aObserver) const;
       
   152 
       
   153 	    /**
       
   154         * movies client from observer to user
       
   155 		* Client is moved to user when it enables the profile
       
   156 		* @param aObserver observer to be moved
       
   157         */
       
   158 		void MoveToUserL(const MSIPExtendedConcreteProfileObserver& aObserver);
       
   159 
       
   160 	    /**
       
   161         * Remove user for profile
       
   162 		* Client is deleted enabled profile
       
   163 		* @param aObserver observer to be removed
       
   164         */
       
   165 		void RemoveUser(const MSIPExtendedConcreteProfileObserver& aObserver);
       
   166 
       
   167 	    /**
       
   168         * Remove observer for profile
       
   169 		* Client is no longer observer when it deletes profile
       
   170 		* @param aObserver observer to be removed
       
   171         */
       
   172 		void RemoveObserver(
       
   173 			const MSIPExtendedConcreteProfileObserver& aObserver);
       
   174 
       
   175 	    /**
       
   176         * Gets the number of users of the profile
       
   177 		* @return number of users
       
   178         */
       
   179 		TUint ReferenceCount() const;
       
   180 
       
   181 	    /**
       
   182         * Gets the cached profile
       
   183 		* @return Cached profile
       
   184         */
       
   185 		CSIPConcreteProfile& Profile();
       
   186 		
       
   187 		/**
       
   188         * Gets the cached profile
       
   189 		* @return Cached profile
       
   190         */
       
   191 		const CSIPConcreteProfile& Profile() const;
       
   192 
       
   193 		/**
       
   194         * Gets the cached profile, including the most recent updates.
       
   195 		* @return Cached profile
       
   196         */
       
   197 		CSIPConcreteProfile& LatestProfile();
       
   198 
       
   199 	    /**
       
   200         * Caches old profile that cannot be deleted yet.
       
   201 		* Old profile is stored if there is not yet old profile stored.
       
   202 		* @param aNewProfile New profile.
       
   203 		* @param aObserver Profile observer
       
   204 		* @return ETrue If profile can be updated immediately
       
   205 		*		  EFalse Update is queued and starts later
       
   206         */
       
   207 		TBool CacheOldProfile(CSIPConcreteProfile* aNewProfile,
       
   208 			const MSIPExtendedConcreteProfileObserver& aObserver);
       
   209 
       
   210 	    /**
       
   211         * Clears the cached old profile. It can be done
       
   212 		* when no one has reference to old profile anymore
       
   213         */
       
   214 		void ClearOldProfile();
       
   215 
       
   216 	    /**
       
   217         * Checks if a profile is being updated.
       
   218 		* @return ETrue if exists
       
   219 		*/
       
   220 		TBool HasProfileUpdate() const;
       
   221 
       
   222 	    /**
       
   223         * Gets the profile instance currently used
       
   224 		* @return old profile if exists, otherwise new
       
   225         */
       
   226 		CSIPConcreteProfile& UsedProfile();
       
   227 
       
   228 	    /**
       
   229         * Gets the state of the cached profile.
       
   230 		* @return ETrue if normal
       
   231 		*		  EFalse if cache removed and can no longer be used
       
   232         */
       
   233 		TBool IsActiveState() const;
       
   234 
       
   235 	    /**
       
   236         * Checks if profile has certain AOR
       
   237 		* @param aAOR AOR to be checked
       
   238 		* @return ETrue if found
       
   239         */
       
   240 		TBool HasAorL(const TDesC8& aAOR) const;
       
   241 
       
   242 		/**
       
   243         * Start registering the profile. If profile has SNAP configured, then
       
   244         * depending on the value of aGetIap, it must first obtain an IAP.
       
   245         * @param aWaitForIAP Wait for IAP state
       
   246         * @param aRegInProg Registration in progress state
       
   247         * @param aGetIap If ETrue, then a profile that has SNAP, must obtain an
       
   248         *		         IAP before it can register.
       
   249         *				 If EFalse, profile can use the current IAP
       
   250         */
       
   251 		void StartRegisterL(CSIPProfileState& aWaitForIAP,
       
   252 							CSIPProfileState& aRegInProg,
       
   253 							TBool aGetIap);
       
   254 
       
   255 		/**
       
   256         * Enables profile
       
   257         * @param aObserver client enabling the profile
       
   258         */
       
   259 		void EnableL(const MSIPExtendedConcreteProfileObserver& aObserver);
       
   260 
       
   261 		/**
       
   262         * Enables profile
       
   263         * @param aObserver client enabling the profile
       
   264         * @param aSnapId SNAP id
       
   265         */
       
   266 		void EnableSnapInUseL(
       
   267 			const MSIPExtendedConcreteProfileObserver& aObserver,
       
   268 			TUint32 aSnapId);
       
   269 
       
   270         /**
       
   271         * Disables profile
       
   272         * @param aObserver client disabling the profile
       
   273         */
       
   274 		void DisableL(const MSIPExtendedConcreteProfileObserver& aObserver); 
       
   275 
       
   276         /**
       
   277         * Removes profile
       
   278         */
       
   279 		void RemoveL(); 
       
   280 
       
   281 		/**
       
   282         * System is about to be shut down.
       
   283         */
       
   284 		void ShutdownInitiated();
       
   285 
       
   286 		/**
       
   287         * Tells if system is about to be shut down.
       
   288         * @return ETrue if system shutdown has been initiated
       
   289         *		  EFalse otherwise
       
   290         */
       
   291 		TBool IsShutdownInitiated() const;
       
   292 		
       
   293 		/**
       
   294         * System is about to be shut down.
       
   295         */
       
   296         void RfsInprogress(TBool aStatus);
       
   297 
       
   298         /**
       
   299         * Tells if system is about to be shut down.
       
   300 		* @return ETrue if system shutdown has been initiated
       
   301 		*         EFalse otherwise
       
   302 		*/
       
   303 		TBool IsRfsInprogress() const;
       
   304 
       
   305         /**
       
   306         * Checks if profile can be permanently removed
       
   307 		* @return ETrue if not used and can be removed
       
   308         */
       
   309 		TBool CanBePermanentlyRemoved() const; 
       
   310 
       
   311         /**
       
   312         * Updates profile's registration if needed
       
   313         * @param aObserver client updating the profile
       
   314         */
       
   315 		void UpdateRegistrationL(
       
   316 			const MSIPExtendedConcreteProfileObserver& aObserver);
       
   317 
       
   318         /**
       
   319         * Updates registration status
       
   320         * @param aStatus new registration status
       
   321         * @param aStatusId internal id related to registration
       
   322         */
       
   323  		void RegistrationStatusEventL(
       
   324 			CSIPConcreteProfile::TStatus aStatus,
       
   325 			TUint32 aStatusId);
       
   326 
       
   327         /**
       
   328         * Updates current state of profile, ownership is not transferred
       
   329         * @param aNewState new state of profile
       
   330         */
       
   331  		void ChangeStateL(CSIPProfileState* aNewState);
       
   332 
       
   333         /**
       
   334         * Sends event to all observers of the profile 
       
   335         */
       
   336 		void SendUnregisteredStatusEventL();
       
   337 
       
   338         /**
       
   339         * Pass error to current state, and in most cases this leads to
       
   340         * unregistered state.
       
   341         * @param aError Error code
       
   342         * @return ETrue Work normally
       
   343         *         EFalse Don't send error or registration state events to client
       
   344         */
       
   345  		TBool HandleError(TInt aError);
       
   346 
       
   347 	    /**
       
   348         * Compares two items based on profile id.
       
   349 		* @param aSearched Search condition
       
   350 		* @param aArrayItem An item of the array, that is compared
       
   351 		* @return ETrue if items match
       
   352         */
       
   353 		static TBool Compare(const CSIPProfileCacheItem& aSearched,
       
   354 							 const CSIPProfileCacheItem& aItem2);
       
   355 
       
   356 		/**
       
   357         * Client allows migration to new IAP.
       
   358 		* @param aIapId IAP id
       
   359 		* @param aObserver Observer
       
   360         */
       
   361 		void ClientAllowsMigrationL(TUint32 aIapId,
       
   362 			const MSIPExtendedConcreteProfileObserver& aObserver);
       
   363 
       
   364 		/**
       
   365         * Client does not allow migration to new IAP.
       
   366 		* @param aIapId IAP id
       
   367 		* @param aObserver Observer
       
   368         */
       
   369 		void ClientDisallowsMigrationL(TUint32 aIapId,
       
   370 			const MSIPExtendedConcreteProfileObserver& aObserver);
       
   371 
       
   372 		/**
       
   373         * A client has (dis)allowed migration to a new IAP.
       
   374 		* @param aIapId IAP id
       
   375 		* @param aObserver Observer (client) who (dis)allows migration.
       
   376 		*		 If NULL, then CSIPProfileCacheItem itself decides to (dis)
       
   377 		*		 allow migration. Ownership is not transferred.
       
   378 		* @param aAllowMigration ETrue if client allows migration
       
   379 		*						 EFalse otherwise
       
   380         */
       
   381 		void SetClientPermission(TUint32 aIapId,
       
   382 			const MSIPExtendedConcreteProfileObserver* aObserver,
       
   383 			TBool aAllowMigration);		
       
   384 
       
   385 	    /**
       
   386         * Checks if the profile has a SNAP configured.
       
   387 		* @param aSnapId OUT: SNAP id, if the profile has it
       
   388 		* @return ETrue If SNAP id is configured, EFalse otherwise
       
   389         */
       
   390 		TBool IsSNAPConfigured(TUint32& aSnapId) const;
       
   391 
       
   392 		/**
       
   393         * Checks if aNewProfile has a different SNAP id than the current
       
   394         * profile.
       
   395 		* @param aNewProfile Updated profile
       
   396 		* @return ETrue aNewProfile Has a different SNAP id than current profile
       
   397         */
       
   398 		TBool IsSnapIdUpdated(CSIPConcreteProfile& aNewProfile) const;
       
   399 
       
   400 		/**
       
   401         * Sends "migration started" event to clients.
       
   402 		* @param aSnapId SNAP id
       
   403 		* @param aIapId IAP id
       
   404         */
       
   405 		void PassMigrationStartedToClientL(TUint32 aSnapId, TUint32 aIapId);
       
   406 
       
   407 		/**
       
   408         * Notifies the client about an ALR related error.
       
   409 		* @param aError Error code
       
   410 		* @param aIapId IAP id
       
   411 		* @return system wide error code on failure
       
   412         */
       
   413 		TInt PassAlrErrorToClient(TInt aError, TUint32 aIapId);
       
   414 
       
   415 		/**
       
   416         * Process "IAP available" event.        
       
   417 		* @param aSnapId SNAP id
       
   418 		* @param aIapId Id of the new IAP
       
   419 		* @param aRegistrationExists ETrue if profile has an existing
       
   420 		*		 registration
       
   421 		* @param aWaitForPermission Wait for permission state
       
   422         */
       
   423 		void HandleNewIapL(TUint32 aSnapId,
       
   424 						   TUint32 aIapId,
       
   425 						   TBool aRegistrationExists,
       
   426 						   CSIPProfileState& aWaitForPermission);						   
       
   427 
       
   428 		/**
       
   429         * Profile starts to monitor the SNAP.
       
   430 		* @param aSnapId SNAP id
       
   431 		* @param aWaitForIAP Wait for IAP state
       
   432 		* @param aRegInProg Registration in progress state
       
   433         */
       
   434 		void MonitorSnapL(TUint32 aSnapId,
       
   435 						  CSIPProfileState& aWaitForIAP,
       
   436 						  CSIPProfileState& aRegInProg);
       
   437 
       
   438 		/**
       
   439         * Profile has been registered.
       
   440         * @param aMigrating ETrue if now migrating to an IAP,
       
   441         *					EFalse otherwise
       
   442         */
       
   443 		void ProfileRegisteredL(TBool aMigrating);
       
   444 
       
   445 		/**
       
   446         * An existing registration has ended because the IAP dropped.
       
   447         */
       
   448 		void RegistrationEnded();
       
   449 
       
   450 		TBool IsReferred() const;
       
   451 
       
   452 		/**
       
   453         * If "update profile" has been issued, continue it.
       
   454         * @param aUnregInProg Unregister in progress state
       
   455         */
       
   456 		void ProceedUpdatingProfileL(CSIPProfileState& aUnregInProg);
       
   457 
       
   458 		/**
       
   459         * Profile no longer monitors SNAP.
       
   460         */
       
   461 		void StopSnapMonitoring();
       
   462 
       
   463 		CSIPConcreteProfile& CloneProfileL(TUint aIapId);
       
   464 
       
   465 		void ClearMigrationProfiles();
       
   466 		
       
   467 		CSIPConcreteProfile& UseProfileWithNewIAP();
       
   468 
       
   469 		/**
       
   470         * Checks if migration to a new IAP is happening. Includes the period
       
   471         * when registering with the new IAP and de-registering with the old IAP.
       
   472         */
       
   473 		TBool IAPMigrationInProgress() const;
       
   474 
       
   475 		/**
       
   476         * Check if there are pending activities that were queued and could now
       
   477         * be resumed.
       
   478         * If there is a queued profile update, it is continued. Otherwise IAPs
       
   479         * are refreshed.
       
   480         */
       
   481 		void ResumeL();
       
   482 
       
   483 		/**
       
   484 		* Set the iMustRefreshIAPs flag to remind that IAPs must be refreshed
       
   485 		* when the profile enters a suitable state.
       
   486         * @post iMustRefreshIAPs == ETrue
       
   487         */
       
   488 		void SetIAPRefreshReminder();
       
   489 
       
   490 		/**
       
   491 		* Starts timer to inform ALR monitor that the new IAP 
       
   492 		* does not work successfully.
       
   493         */
       
   494 		void NewIAPFailed();
       
   495 		
       
   496 		/**
       
   497         * Sets SNAP retry counter value
       
   498         * @param aCounter Counter value
       
   499         */
       
   500 		void SetSnapRetryCounter( TInt aCounter );
       
   501 		
       
   502 		/**
       
   503         * Returns SNAP retry counter value
       
   504 		* @return retry counter
       
   505         */
       
   506 		TInt SnapRetryCounter() const;
       
   507 		
       
   508 		TBool SnapRetryCountReached() const;
       
   509 
       
   510 		/**
       
   511         * Switches state machine to unregistered state
       
   512         */
       
   513 		void SwitchToUnregisteredState(); 	
       
   514 		
       
   515 		/**
       
   516 		* Handles Errors caused by faulty profiles
       
   517 		* @param aError Error code
       
   518 		* @param aStatus Status of the profile
       
   519 		*/
       
   520 		void HandleProfileError(TInt aError, 
       
   521 			CSIPConcreteProfile& aProfile);
       
   522 		/**
       
   523 		 * Function resets the boolean variable iIsShutdownInitiated
       
   524 		 */
       
   525 		void ResetShutdownvariable();
       
   526 
       
   527 	private:
       
   528 
       
   529 	    /**
       
   530         * Removes all users for profile
       
   531 		* @param aObserver observer to be removed
       
   532         */
       
   533 		void RemoveAllUsers();
       
   534 		
       
   535 		/**
       
   536         * Updates enabled state of the associated concrete profile. 
       
   537         */
       
   538 		void CheckProfileEnabledState();
       
   539 
       
   540 	    /**
       
   541         * Default constructor
       
   542         */
       
   543 		CSIPProfileCacheItem(CSIPProfileServerCore& aCore, 
       
   544 							 CSIPProfileState* aUnregistered);		
       
   545 
       
   546 		void ConstructL(); 
       
   547 
       
   548 		const CSIPConcreteProfile& UsedProfile() const;
       
   549 
       
   550 		void StoreProfileToUpdate(CSIPConcreteProfile* aNewProfile);
       
   551 
       
   552 		void ResumeQueuedUpdateL();		
       
   553 
       
   554 		void RemoveFromPendingObservers(
       
   555 			const MSIPExtendedConcreteProfileObserver& aObserver);
       
   556 
       
   557 		/**
       
   558 		* Inform ALR monitor that the new IAP does not work successfully.
       
   559         */
       
   560 		static TInt DoNewIapFailed(TAny* aPtr);
       
   561 		void DefaultSNAPL(TUint32& aSnapId) const;
       
   562 	
       
   563 	private:
       
   564 
       
   565 		// Profile id. This is used when communicating with profile client.
       
   566 		TUint						iProfileId;
       
   567 
       
   568 
       
   569 		// iProfile, iOldProfile, iProfileWithNewIAP, iProfileWithOldIAP and
       
   570 		// iQueuedProfile all have same storage id.
       
   571 
       
   572 		// Concrete profile. Owned.
       
   573 		CSIPConcreteProfile*		iProfile;
       
   574 		// When profile is updated, the existing profile is put here. Owned.
       
   575 		CSIPConcreteProfile*		iOldProfile;
       
   576 
       
   577 		// When migrating to a new IAP, the cloned profile is stored here.
       
   578 		// Owned.
       
   579 		CSIPConcreteProfile*		iProfileWithNewIAP;
       
   580 		
       
   581 		// After migration to a new IAP, the profile with old IAP is stored
       
   582 		// here. Owned.
       
   583 		CSIPConcreteProfile*		iProfileWithOldIAP;
       
   584 
       
   585 		// If "update profile" is issued during IAP migration, the updated
       
   586 		// profile and observer are stored here. Only the profile and observer
       
   587 		// of the most recent update are stored.
       
   588 		// Queued profile is owned.
       
   589 		CSIPConcreteProfile*		iQueuedProfile;
       
   590 		// Queued observer is not owned
       
   591 		const MSIPExtendedConcreteProfileObserver* iQueuedObserver;
       
   592 
       
   593 
       
   594 		TState						iCacheState;
       
   595 		CSIPProfileState*			iCurrentState;
       
   596 		CSIPProfileServerCore&		iServerCore;
       
   597 
       
   598 		RPointerArray<MSIPExtendedConcreteProfileObserver> iObservers;
       
   599 		RPointerArray<MSIPExtendedConcreteProfileObserver> iUsers;
       
   600 
       
   601 		// After passing "IAP available" to observers, the observers that have
       
   602 		// not yet (dis)allowed the migration, are kept here. When an observer
       
   603 		// tells it (dis)allows migration or if the observer itself is removed
       
   604 		// with RemoveObserverL(), it is removed from this array.
       
   605 		// When this array is empty, the it is determined whether the migration
       
   606 		// is allowed or disallowed. Array items are not owned.
       
   607 		RPointerArray<MSIPExtendedConcreteProfileObserver>
       
   608 									iObserversWaitedForPermission;
       
   609 
       
   610 		
       
   611 		// ETrue if system shutdown has been initiated
       
   612 		TBool 						iIsShutdownInitiated;
       
   613 		
       
   614 		// ETrue if Rfs has been initiated
       
   615 		TBool                       iIsRfsInprogress;
       
   616 		
       
   617 		// Tells if at least one client disallowed migration to a new IAP
       
   618 		TBool 						iMigrationDisallowed;
       
   619 
       
   620 		// ETrue if a new IAP came available, but it was disallowed by the
       
   621 		// profile, because new IAP couldn't be handled.
       
   622 		TBool						iMustRefreshIAPs;
       
   623 
       
   624 		// Not owned. NULL if SNAP is not configured.
       
   625 		CSipAlrMigrationController* iMigrationController;
       
   626 
       
   627 		CDeltaTimer* iDeltaTimer;
       
   628 		TCallBack iDeltaTimerCallBack;
       
   629 		TDeltaTimerEntry iDeltaTimerEntry;
       
   630 		TInt iSnapRetryCounter; 
       
   631 
       
   632 	private: // For testing purposes
       
   633 #ifdef CPPUNIT_TEST
       
   634 		friend class CSIPProfileStateTest;
       
   635 		friend class CSIPProfileServerCoreTest;
       
   636 		friend class CSIPProfileStateRegInProgTest;
       
   637 		friend class CSIPProfileStateRegisteredTest;
       
   638 		friend class CSIPProfileStateUnregInProgTest;
       
   639 		friend class CSIPProfileStateUnregisteredTest;
       
   640 		friend class CSIPProfileStateWaitForIAPTest;
       
   641 		friend class CSIPProfileStateWaitForPermissionTest;
       
   642 		friend class CSIPProfileStateMigratingToNewIAPTest;
       
   643 		friend class CSIPProfileStateUnregisteringOldIAPTest;
       
   644 		friend class CSipAlrHandlerTest;
       
   645 		friend class CSIPProfileAlrTest;
       
   646 		friend class CSIPProfileCacheItemTest;
       
   647 #endif
       
   648 	};
       
   649 
       
   650 #endif