diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ProfileAgent/IETF_Agent/inc/sipietfprofileagent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/ProfileAgent/IETF_Agent/inc/sipietfprofileagent.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,262 @@ +/* +* Copyright (c) 2003-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 : sipietfprofileagent.h +* Part of : sip ietf1 agent +* Interface : private +* Version : 1.0 +* +*/ + + + + +/** + @internalComponent +*/ + +#ifndef CSIPIETFPROFILEAGENT_H +#define CSIPIETFPROFILEAGENT_H + +// INCLUDES +#include +#include "sipprofileagent.h" +#include "sipprofileagentobserver.h" +#include "sipprofilefsmuser.h" +#include "sipobserver.h" +#include "siphttpdigestchallengeobserver2.h" +#include + + +//FORWARD DECLARATIONS +class CSIP; +class CSIPHttpDigest; +class TSIPProfileTypeInfo; +class CSIPIetfConnectionContext; +class CSIPPrflInitState; +class CSIPPrflResolvingProxiesState; +class CSIPPrflRegisterRequestedState; +class CSIPPrflRegistrationInProgressState; +class CSIPPrflRegisteredState; +class CSIPPrflDeregisterRequestedState; +class CSIPPrflDeregistrationInProgressState; +class CSIPPrflRegisterDelayRequestedState; +class CSIPIetfProfileContext; +class CSIPProfileQueueHandling; + +// CLASS DECLARATION +/** +* Registers profiles and maintains +* profile registrations as per RFC3261. +* +* @lib n/a +*/ +class CSIPIetfProfileAgent: + public CSIPProfileAgent, + public MSIPProfileAgentObserver, + public MSIPProfileFSMUser, + public MSIPObserver, + public MSIPHttpDigestChallengeObserver2 + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aInitParams parameters passed in the construction + */ + static CSIPIetfProfileAgent* NewL(TAny* aInitParams); + + /** + * Destructor. + */ + virtual ~CSIPIetfProfileAgent(); + + public: // From CSIPProfileAgent + + const TSIPProfileTypeInfo& Type() const; + + CSIPConcreteProfile* CreateL(); + + void RegisterL( + CSIPConcreteProfile& aSIPConcreteProfile); + + void UpdateL( + CSIPConcreteProfile& aNewProfile, + CSIPConcreteProfile& aOldProfile); + + void DeregisterL( + CSIPConcreteProfile& aSIPConcreteProfile); + + TInt GetProfileState( + CSIPConcreteProfile::TStatus& aState, + CSIPConcreteProfile& aProfile) const; + + TBool IsIdle(); + + TBool RegisterPending(CSIPConcreteProfile& aSIPProfile) const; + + TInt TerminateHandling(CSIPConcreteProfile& aProfile); + + TInt Extension(TInt aOperationCode, TAny* aParams); + + public: // From MSIPProfileAgentObserver + + void SIPProfileStatusEvent( + CSIPConcreteProfile& aProfile, + TUint32 aContextId); + + void SIPProfileErrorEvent( + CSIPConcreteProfile& aProfile, + TInt aError); + + TBool ProceedRegistration(CSIPConcreteProfile& aProfile, TInt aError); + + void GetFailedProfilesL( + const TSIPProfileTypeInfo& aType, + RPointerArray& aFailedProfiles) const; + + + public: // From MSIPProfileFSMUser + + void RegisterProfileL( + CSIPConcreteProfile& aSIPConcreteProfile); + + void DeregisterProfileL( + CSIPConcreteProfile& aSIPConcreteProfile); + + void RetryProfileRegistrationL( + CSIPConcreteProfile& aSIPProfile ); + + TBool AddProfileIntoQueue( + CSIPConcreteProfile& aSIPConcreteProfile ) const; + + void RegisterProfileAfterQueueL( + CSIPConcreteProfile& aSIPConcreteProfile ); + + void DeregisterProfileAfterQueueL( + CSIPConcreteProfile& aSIPConcreteProfile ); + + void RetryProfileRegistrationAfterQueueL( + CSIPConcreteProfile& aSIPConcreteProfile ); + + TBool IsInQueue( + CSIPConcreteProfile& aSIPProfile ) const; + + void SetInterimProfile( CSIPConcreteProfile* + aSIPConcreteProfile ); + + public: // From MSIPObserver + + void IncomingRequest( + TUint32 aIapId, + CSIPServerTransaction* aTransaction); + + void TimedOut(CSIPServerTransaction& aTransaction); + + public: // From MSIPHttpDigestChallengeObserver2 + + void ChallengeReceived(const CSIPClientTransaction& aTransaction); + + void ChallengeReceived(const CSIPRefresh& aRefresh); + + + private: // Constructors + + /** + * C++ default constructor. + */ + CSIPIetfProfileAgent(TSIPProfileAgentInitParams* aInitParams); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + + private: // New functions + + /** + * Provides profile context + * @param aProfile a profile + * @return a profile context + */ + CSIPIetfProfileContext& ProvideProfileContextL(CSIPConcreteProfile& aProfile); + + /** + * Finds profile context + * @param aSIPConcreteProfile a profile + * @return profile context, the ownership is not transferred + */ + CSIPIetfProfileContext* FindProfileContext(CSIPConcreteProfile& aSIPConcreteProfile) const; + + /** + * Finds profile context + * @param aProfileId identifier of the profile + * @return profile context, the ownership is not transferred + */ + CSIPIetfProfileContext* FindProfileContext(TUint32 aProfileId) const; + + /** + * Finds connection context + * @param aPriofile a profile + * @return a connection context + */ + CSIPIetfConnectionContext* FindConnectionContext(CSIPConcreteProfile& aProfile) const; + + /** + * Finds connection context + * @param aIapId a iap id + * @return a connection context + */ + CSIPIetfConnectionContext* FindConnectionContext( TUint32 aIapId ) const; + + /** + * Destroys idle connection contexts + */ + void CleanIdleConnectionContexts(); + + TBool DeregisterToWaitingQueueL( CSIPIetfProfileContext* aContext ); + + + void RegisterQueue( CSIPConcreteProfile& aProfile, TBool aReportError ); + + TBool AllowedTakeFromQueue( CSIPConcreteProfile& aSIPConcreteProfile ); + + + private: // Data + + CSIP* iSIP; + CSIPHttpDigest* iHttpDigest; + MSIPProfileAgentObserver& iSIPProfileAgentObserver; + CDeltaTimer& iDeltaTimer; + TSIPProfileTypeInfo iType; + CSIPPrflInitState* iInit; + CSIPPrflResolvingProxiesState* iResolvingProxies; + CSIPPrflRegisterRequestedState* iRegRequested; + CSIPPrflRegistrationInProgressState* iRegInProgress; + CSIPPrflRegisteredState* iRegistered; + CSIPPrflDeregisterRequestedState* iDeregRequested; + CSIPPrflDeregistrationInProgressState* iDeregInProgress; + CSIPPrflRegisterDelayRequestedState* iRegDelayRequested; + RPointerArray iConnectionCtxArray; + CSIPProfileQueueHandling* iProfileQueueHandling; + CSipProfileAgentConfigExtension* iConfigExtension;//not owned + + +#ifdef CPPUNIT_TEST + friend class CSIPIetfProfileAgentTest; +#endif + }; + +#endif CSIPIETFPROFILEAGENT_H