epoc32/include/mw/siptransactionbase.h
branchSymbian2
changeset 3 e1b950c65cb4
parent 2 2fe1408b6811
child 4 837f303aceeb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/epoc32/include/mw/siptransactionbase.h	Wed Mar 31 12:27:01 2010 +0100
@@ -0,0 +1,230 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Name        : siptransactionbase.h
+* Part of     : SIP Client
+* Interface   : SDK API, SIP Client API
+* Version     : 1.0
+*
+*/
+
+
+
+#ifndef CSIPTRANSACTIONBASE_H
+#define CSIPTRANSACTIONBASE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include "_sipcodecdefs.h"
+
+// FORWARD DECLARATIONS
+class CSIPResponseElements;
+class MTransactionAssociation;
+
+// CLASS DECLARATION
+
+/**
+*  @publishedAll
+*  @released
+*
+*  Base class for managing SIP transactions.
+*  It provides services for querying transaction type and its state.
+*
+*  This class is an abstract class and cannot be instantiated.
+*  @lib sipclient
+*/
+class CSIPTransactionBase: public CBase
+	{
+	public:
+		/** SIP transaction state */
+		enum TState
+			{
+			/** Trying state */
+			ETrying,
+			/** Calling state */
+			ECalling,
+			/** Proceeding state */
+			EProceeding,
+			/** Completed state */
+			ECompleted,
+			/** Confirmed state */
+			EConfirmed,
+			/** Terminated state */
+			ETerminated,
+			/** Object is being constructed and is not yet ready for use */
+			EConstructing
+			};
+
+	public: // Destructor
+        /**
+        * Destructor
+        * @internalComponent       
+		*/
+		virtual ~CSIPTransactionBase();
+
+	public: // New functions
+        /**
+        * Gets the SIP transaction type
+        * @return SIP transaction type
+        */
+		IMPORT_C RStringF Type() const;
+
+		/**
+		* Gets SIP transaction state
+		* @return SIP transaction state
+		* @leave KErrSIPResourceNotAvailable if a required SIP Client API
+		*	object has been deleted
+		*/
+		IMPORT_C CSIPTransactionBase::TState StateL();
+
+		/**
+		* Checks the if the actual object
+		* is of type CSIPClientTransaction.
+		* @return ETrue if object is of type CSIPClientTransaction and
+		*         EFalse otherwise
+		*/
+		IMPORT_C TBool IsSIPClientTransaction() const;
+
+		/**
+		* Compares this object to another object also having
+		* CSIPTransactionBase base class
+		* The function has to be implemented in each of the sub-classes.
+		* @param aTransaction a CSIPTransactionBase object to compare
+		* @return ETrue if the objects are equal otherwise EFalse
+		*/
+        IMPORT_C TBool
+            operator==(const CSIPTransactionBase& aTransaction) const;
+
+	public: // New functions, for internal use
+        /**
+		* Obtains the RequestId of the transaction.
+		*
+        * @return RequestId
+		*/
+        TUint32 RequestId() const;
+
+        /**
+		* Clears the MTransactionAssociation. After this the object can't be
+        * used anymore and it is expected that user will delete it soon.
+        *
+        * @param aAssociation Object requesting the detach
+        * @internalComponent      
+		*/
+        virtual void Detach(const MTransactionAssociation& aAssociation);
+
+        /**
+		* Changes the transaction state.
+        *
+        * @param aNextState State into which transaction moves
+		*/
+        void ChangeState(CSIPTransactionBase::TState aNextState);
+
+        /**
+        * Determines whether this transaction has an effect on the associated
+        * dialog's state.
+        *
+		* @return ETrue if transaction has an effect on the dialog's state,
+        *   EFalse otherwise.
+		*/
+        TBool AffectsDialogState() const;
+
+        /**
+		* Sets this transaction to affect the dialog state.
+		*/
+        void SetAffectsDialogState();
+
+        /**
+		* Determines whether the transaction type is a target refresh request.
+        *
+        * @param aType Type of transaction
+        * @return ETrue If the transaction is a target refresh request, EFalse
+        *   otherwise.
+		*/
+        static TBool IsTargetRefresh(RStringF aType);
+
+        /**
+		* Stores response elements. Depending on the status code, transaction
+        * may enter another state.
+        *
+        * @param aElements Response elements, ownership is transferred.
+		*/
+        void SetResponseElements(CSIPResponseElements* aElements);
+
+    protected: // Constructors
+        CSIPTransactionBase(TBool aIsClientTransaction,
+                            TUint32 aRequestId,
+                            MTransactionAssociation& aAssociation);
+
+        void ConstructL(RStringF aType);
+
+	protected: // New functions, for internal use
+        /**
+		* Checks that iAssociation is available (not NULL). If iAssociation is
+        * NULL, it means user has deleted a resource needed by
+        * CSIPTransactionBase, and this function leaves.
+		*/
+        void CheckAssociationL() const;
+
+        /**
+		* Gets response elements.
+        *
+		* @return Response elements. Ownership isn't transferred.
+		*/
+        const CSIPResponseElements* ResponseElements() const;
+
+	protected: // Data
+	
+        /**
+        * RequestId received from SIP client
+        * @internalComponent
+        */       
+        TUint32 iRequestId;
+
+        /**
+        * Every transaction is associated to exactly one other object:
+        * CSIP, CSIPConnection, CSIPRegistrationBinding or CSIPDialogAssocBase
+        * @internalComponent
+        */        
+        MTransactionAssociation* iAssociation;
+
+    private: // Data
+		RStringF iType;
+
+        //ETrue is the transaction is a client transaction, EFalse otherwise
+        TBool iIsClientTransaction;
+
+        //Current transaction state
+        CSIPTransactionBase::TState iState;
+
+        //ETrue if the transaction has an effect on the dialog state in case
+        //the transaction is associated with a dialog.
+        //EFalse otherwise.
+        TBool iAffectsDialogState;
+
+        //SIP response elements
+        CSIPResponseElements* iResponseElements;
+
+	private: // For testing purposes
+	    UNIT_TEST(CSIP_Test)
+        UNIT_TEST(CSIPServerTransaction_Test)
+        UNIT_TEST(CSIPSubscribeDialogAssoc_Test)
+        UNIT_TEST(CSIPInviteDialogAssoc_Test)
+        UNIT_TEST(CSIPNotifyDialogAssoc_Test)
+        UNIT_TEST(CSIPConnection_Test)
+
+        __DECLARE_TEST;
+    };
+
+#endif