diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ProfileAgent/profile_fsm/inc/sipprofilequeuehandling.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/inc/sipprofilequeuehandling.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,246 @@ +/* +* Copyright (c) 2006-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 : sipprofilequeuehandling.h +* Part of : sip profile fsm +* Interface : Internal IF +* Version : 1.0 +* +*/ + + + + +/** + @internalComponent +*/ + +#ifndef CSIPPRROFILEQUEUEHANDLING_H +#define CSIPPRROFILEQUEUEHANDLING_H + +//INCLUDES +#include "sipprofilequeueitem.h" +#include + +// FORWARD DECLARATIONS +class MSIPProfileFSMUser; +class CSIPConcreteProfile; + +// CLASS DECLARATION +/** +* A class for maintaining the queue handling for profiles which +* are pending for registration or deregistration. +* Class stores the arrays of profiles. +* +* @lib sipprofilefsm.lib +*/ +class CSIPProfileQueueHandling : public CBase + { + public: + + /** + * Two-phased constructor. + * @param aUser user for the state machine + */ + IMPORT_C static CSIPProfileQueueHandling* NewL( + MSIPProfileFSMUser& aUser ); + + /** + * Two-phased constructor. + * @param aUser user for the state machine + */ + IMPORT_C static CSIPProfileQueueHandling* NewLC( + MSIPProfileFSMUser& aUser ); + + /** + * Destructor. + */ + IMPORT_C ~CSIPProfileQueueHandling(); + + + public: // New functions + + IMPORT_C TBool AddRegisterToQueueL( + CSIPConcreteProfile& aSIPConcreteProfile, + TBool aRetryRegistration ); + + IMPORT_C TBool AddDeregisterToQueueL( + CSIPConcreteProfile& aSIPConcreteProfile ); + + /** + * After final response is received, queue of profiles + * which are waiting deregistration is checked. + * If there is found profile with the same registrar as + * input profile aSIPConcreteprofile has, that profile is removed + * from queue and registration is continued with that profile. + */ + IMPORT_C void RegisterFromQueueL( + CSIPConcreteProfile& aSIPConcreteProfile ); + + /** + * Check if queue has profile which has + * SecurityNegotiationEnabled and does not has HttpDigestSettings + * configured. + * return ETrue in that case. + */ + IMPORT_C TBool FoundIPSecProfileCandidate(); + + /** + * Check if queue has profile which has + * SecurityNegotiationEnabled and does not has HttpDigestSettings + * configured.If profile found, it will be removed from queue + * and will be returned.Input value aRegistering get value EFalse if profile + * found from deregistering queue, otherwise value is ETrue; + * Return NULL and ETrue, if no profile found. + * return . + */ + IMPORT_C CSIPConcreteProfile* IPSecProfileCandidate(TBool& aRegistering); + + + /** + * Check if queue has profile which is waiting for allowed network. + * A profile may be configured so that it can be used only in home network + * or used in roaming state only if user has explicitly enabled it. + * @param aOnHomeNetwork ETrue if phone is currently on home nw, EFalse + * if phone is roaming + * @return profile to be registered or NULL + */ + IMPORT_C CSIPConcreteProfile* WaitingForAllowedNetworkProfile( + TBool aOnHomeNetwork ); + + IMPORT_C CSIPConcreteProfile* RemoveProfileFromRegQueueL( + CSIPConcreteProfile& aSIPConcreteProfile); + + /** + * Check if both (registration and deregistration) queues are empty. + * @return ETrue if both queues are empty + */ + IMPORT_C TBool IsEmpty() const; + + /* + * Cleanup of queue, profiles which have been changed from auto + * registration mode to when needed or which don't have any users + * are removed. + */ + IMPORT_C void Cleanup( CSIPConcreteProfile& aOldProfile, + CSIPConcreteProfile* aNewProfile ); + + /** + * Check if profile is in queue + * Return ETrue, if profile found. + */ + IMPORT_C TBool IsInQueue( + CSIPConcreteProfile& aSIPConcreteProfile); + + /** + * Checks whether registration is allowed in current network + * for the given profile + * @param aSIPConcreteProfile the profile to be checked + * @param aOnHomeNetwork ETrue if the phone is currently on home network, + * EFalse if the phone is roaming + * @return ETrue if registration is allowed + */ + IMPORT_C TBool IsRegistrationAllowed( + CSIPConcreteProfile& aSIPConcreteProfile, + TBool aOnHomeNetwork); + + public: // New functions + + /** + * Checks if registration/deregistration should be put + * in que to wait, because there is registration/deregistration + * with same registrar address pending. + * @return ETrue if should be put into que to wait. + */ + TBool AddIntoQueue( CSIPConcreteProfile& aSIPConcreteProfile ); + + /** + * aSIPConcreteProfile is added into queue , + * until there is no more registration/deregistration + * with same registration address pending final response. + * @return ETrue if profile was added + */ + TBool AddIntoDeregisterQueueL( + CSIPConcreteProfile& aSIPConcreteProfile ); + + /** + * aSIPConcreteProfile is added into queue , + * until there is no more registration/deregistration + * with same registration address pending final response. + * @return ETrue if profile was added + */ + TBool AddIntoRegisterQueueL( + CSIPConcreteProfile& aSIPConcreteProfile, + TBool aRetryRegistration ); + + /** + * After final response is received, queue of profiles + * which are waiting deregistration is checked. + * If there is found profile with the same registrar as + * input profile aSIPConcreteprofile has, that profile is removed + * from queue and deregistration is continued with that profile. + */ + TBool CheckDeregisterQueueL( + CSIPConcreteProfile& aSIPConcreteProfile ); + + /** + * After final response is received, queue of profiles + * which are waiting registration is checked. + * If there is found profile with the same registrar as + * input profile aSIPConcreteprofile has, that profile is removed + * from queue and registration is continued with that profile. + */ + TBool CheckRegisterQueueL( + CSIPConcreteProfile& aSIPConcreteProfile ); + + /** + * If from aProfileArray is found a profile with the same + * registrar as input profile aSIPConcreteprofile has, + * that profile is removed from queue and returned. + */ + TInt FindIndex( + CSIPConcreteProfile& aSIPConcreteProfile, + RArray& aProfileArray ); + + private: // New functions + + TBool AddToQueueNoDuplicatesL( + RArray& aProfileArray, + TSIPProfileQueueItem& aProfileItem ); + + void QueueCleanup( RArray& aProfileArray, + CSIPConcreteProfile& aOldProfile, + CSIPConcreteProfile* aNewProfile ); + + /** + * Constructor + */ + CSIPProfileQueueHandling( MSIPProfileFSMUser& aUser ); + + void ConstructL(); + + private: //data + + MSIPProfileFSMUser& iUser; + RArray iRegisteringQueue; + RArray iDeregisteringQueue; + + private: // For testing purposes + + #ifdef CPPUNIT_TEST + friend class CSIPProfileQueueHandlingTest; + #endif + }; + +#endif // CSIPPRROFILEQUEUEHANDLING_H