multimediacommsengine/tsrc/testdriver/siptester/src/CTcSIPContext.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/tsrc/testdriver/siptester/src/CTcSIPContext.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,265 @@
+/*
+* Copyright (c) 2004 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:  See class definition below.
+*
+*/
+
+#ifndef __CTCSIPCONTEXT_H__
+#define __CTCSIPCONTEXT_H__
+
+// INCLUDES
+#include <e32base.h>
+#include <centralrepository.h>
+#include "CTcContextBase.h"
+#include "CTcIAPManager.h"
+#include <sipobserver.h>
+#include <sipprofileregistryobserver.h>
+#include "TTcProfileReceived.h"
+#include "sipclientsimulatorcli.h"
+
+// FORWARD DECLARATIONS
+class CSIP;
+class CTcSIPConnectionContainer;
+class CTcSIPProfileContainer;
+class CTcSIPHttpDigestContainer;
+class CTcSIPClientDiscoveryContainer;
+class CTcFreezer;
+class CTcFileHandler;
+class CTcSIPIMSAuthenticator;
+class CTcSIPIMSAuthenticationParams;
+
+// CLASS DEFINITION
+/**
+ * CTcSIPContext implements the test context (MTcTestContext) for SIP testing.
+ */
+class CTcSIPContext
+	: public CTcContextBase,
+	  public MSIPObserver
+	{
+	public:	// Constructors and destructor
+
+		/**
+		 * Static constructor. Leaves pointer to cleanup stack.
+		 *
+		 * @param aCodec Reference to CTRL codec object,
+		 *				 initialized to a valid request.
+		 * @param aIAPId IAPId as selected by user from TC settings.
+         * @param aIsMandatory  used for determining if the SIP stack 
+         *        is automatically started. If default value (ETrue) is used, 
+         *        then SIP stack is started automatically.
+		 * @return An initialized instance of this class.
+		 */
+		static CTcSIPContext* NewLC( CTcCTRLCodec& aCodec,
+									 TInt aIAPId,
+                                     TBool aIsMandatory );
+
+		/// Destructor
+		~CTcSIPContext();
+
+	private:
+
+		/**
+		 * Constructor.
+		 *
+		 * @param aCodec Reference to CTRL codec object,
+		 *				 initialized to a valid request.
+		 */
+		CTcSIPContext( CTcCTRLCodec& aCodec );
+
+		/// Default constructor. Not implemented.
+		CTcSIPContext();
+
+		/**
+		 * 2nd phase constructor
+		 *
+		 * @param aIAPId IAPId as selected by user from TC settings.
+         * @param aIsMandatory  used for determining if the SIP stack 
+         *        is automatically started. If default value (ETrue) is used, 
+         *        then SIP stack is started automatically.
+		 */
+		void ConstructL( TInt aIAPId, TBool aIsMandatory  );
+
+	protected: // From CTcContextBase
+
+		TTcCommandBase* CreateCommandL( TTcIdentifier& aId,
+										MTcTestContext& aContext );
+
+	public: // From MSIPObserver
+
+		void IncomingRequest( TUint32 aIapId,
+							  CSIPServerTransaction* aTransaction );
+		void TimedOut( CSIPServerTransaction& aSIPServerTransaction );
+    
+	public: // New methods
+
+		/// @return Reference to the default SIP connection.
+		inline CTcSIPConnectionContainer& Connection()
+				{ return *iSipConnection; }
+
+        /// @return Reference to the default SIP profile.
+        inline CTcSIPProfileContainer& Profile()
+                { return *iSipProfile; }
+                
+        /// @return Reference to the FileHandler
+        inline CTcFileHandler& FileHandler()
+                { return *iFileHandler; }     
+
+		/// @return Reference to the SIP stack.
+		inline CSIP& SIP()
+				{ return *iSip; }
+
+		/// @return Reference to the Internet Access Point name array
+		inline const MDesC8Array& IAPNames() const
+				{ return *iIapManager; }
+
+		/**
+		 * Lookup the CommDb IAP Id matching the provided IAP name.
+		 *
+		 * @param aName IAP name
+		 * @return IAP id
+		 */
+		inline TUint32 IAPIdL( const TDesC8& aName ) const
+				{ return iIapManager->IdForNameL( aName ); };
+
+		/**
+		 * Lookup the IAP Name matching the provided CommDb IAP Id.
+		 *
+		 * @param aIapId IAP id
+		 * @return IAP name reference
+		 */
+		inline const TDesC8& IAPNameL( TInt aIapId ) const
+				{ return iIapManager->NameForIdL( aIapId ); };
+
+		/**
+		 * Get reference to GetMandatoryValue
+		 * This is used only if SIP stack is created manually
+		 * @return boolean value indicating the 
+         *         SIP stack state (ETrue==created)
+		 */
+		TBool GetMandatoryValue( void ) const;
+
+		/**
+		 * Create SIP stack
+         * Create CSIP, CSIPConnection, CTcSIPConnectionContainer
+         * and CTcSIPProfileContainer
+		 * This is used only if SIP stack is created manually
+		 */
+        void CreateSipStack( void );
+		CTcSIPConnectionContainer* CreateSipStack( const TDesC8& aName ); //16.9.
+
+        /**
+         * Gives reference to the default SIP Http Digest container or 
+         * leaves with KErrNotFound if container doesn't exist
+         *
+         */
+        CTcSIPHttpDigestContainer& DigestContainerL();
+        
+        /**
+		 * Remove HttpDigest container 
+		 *
+		 */
+		void RemoveDigestContainer();
+		
+		/**
+		* Creates SIP ClientDiscovery container
+		* leaves with KErrAlreadyExists if container exists already
+		*/
+		void CreateClientDiscoveryL( TUid aUid );
+		
+		/**
+		* Removes SIP ClientDiscovery container
+		*/
+		void RemoveClientDiscovery();
+		
+		 /**
+         * Gives reference to the SIP ClientDiscovery container or 
+         * leaves with KErrNotFound if container doesn't exist
+         *
+         */
+		CTcSIPClientDiscoveryContainer& ClientDiscoveryL();
+		
+		/**
+		 * Freeze Tester thread asynchronously
+		 *
+		 */
+		void IssueFreezeL( TInt aFreezeTimeSeconds );
+		
+		/**
+		 * Freeze tester timer callback
+		 *
+		 */
+		static TInt Freeze( TAny* aAny );
+		
+		
+		/**
+		 * Authenticate
+		 */
+		CTcSIPIMSAuthenticationParams& AuthenticateL( const TDesC8& aNonce );
+		
+		/**
+		 * Map a CSIP error code to a verbose description
+		 *
+		 * @param aError One of CSIP::TError codes
+		 * @return Error message for the code
+		 */
+		const TDesC8& SIPErrorToText( TInt aError );
+
+        RSipClientSimulator& SipClientSimulator();
+        
+        CRepository& Repository();
+
+	private: // data
+
+        /// Boolean value indicating the SIP stack creation. Owned.
+        TBool iIsMandatory;
+
+		/// Internet Access Point name/id list. Owned.
+		CTcIAPManager* iIapManager;
+    
+        /// IAP id. Owned.
+        TInt iIAPId;
+
+		/// SIP stack. Owned.
+		CSIP* iSip;
+
+		/// Default SIP connection. Owned.
+		CTcSIPConnectionContainer* iSipConnection;
+
+		/// Default SIP profile. Owned.
+		CTcSIPProfileContainer* iSipProfile;
+		
+		/// Defaul SIP Http Digest. Owned.
+		CTcSIPHttpDigestContainer* iSipHttpDigest;
+		
+		/// Defaul SIP ClientDiscover. Owned.
+		CTcSIPClientDiscoveryContainer* iSipClientDiscovery;
+		
+		/// For Tester thread freezing
+		CDeltaTimer* iFreezer;
+		
+		TInt iFreezeTimeSeconds;
+		
+		TDeltaTimerEntry iTimerEntry;
+		
+		/// For file creation and deletion. Owned.
+		CTcFileHandler* iFileHandler;
+		
+		/// For IMS authentication. Owned.
+		CTcSIPIMSAuthenticator* iIMSAuthenticator;
+		
+		RSipClientSimulator iSipClientSimulator;
+		CRepository* iCenRep;
+	};
+
+#endif // __CTCSIPCONTEXT_H__