realtimenetprots/sipfw/SIP/sipapi/api/sipdialog.h
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/sipapi/api/sipdialog.h	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,252 @@
+/*
+* 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 "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        : sipdialog.h
+* Part of     : SIP Client
+* Interface   : SDK API, SIP Client API
+* Version     : 1.0
+*
+*/
+
+
+
+
+#ifndef CSIPDIALOG_H
+#define CSIPDIALOG_H
+
+// INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+
+// FORWARD DECLARATIONS
+class CSIPConnection;
+class CSIPConnectionImplementation;
+class MSIPRegistrationContext;
+class CSIPDialogAssocBase;
+class CSIPFromHeader;
+class CSIPToHeader;
+class CSIPCallIDHeader;
+class CUri8;
+class CSIPDialogImplementation;
+
+// CLASS DECLARATION
+
+/**
+*  @publishedAll
+*  @released
+*
+*  Class for managing SIP dialogs.
+*  It provides services querying dialog state, obtaining the dialog related
+*  SIP headers and getting all dialog associations.
+*
+*  The user of the class cannot instantiate this class.
+*  @lib sipclient
+*/
+
+class CSIPDialog: public CBase
+	{
+	public:
+		/** Dialog states */
+		enum TState
+			{
+			/** Initiliazed state */
+			EInit,
+			/** Early state */
+			EEarly,
+			/** Confirmed state */
+			EConfirmed,
+			/** Terminated state */
+			ETerminated
+			};
+
+	public: //New functions
+		/**
+		* Gets dialog state		
+		* @return dialog state
+		*/
+        IMPORT_C CSIPDialog::TState State() const;
+
+		/**
+		* Gets all dialog associations. 		
+		* @return All dialog associations. Ownership of the array or the items
+        *   inside it, is not transferred.
+		*/
+		IMPORT_C const RPointerArray<CSIPDialogAssocBase>&
+					   SIPDialogAssociations() const;
+
+        /**
+        * Gets used registration context for this dialog
+        * @return associated registration or 0-pointer otherwise.
+        *   Ownership is not transferred.
+        */
+        IMPORT_C const MSIPRegistrationContext* RegistrationContext() const;
+	
+        /**
+		* Checks if the dialog association belongs to this dialog
+		* @param aDialogAssoc a dialog association
+		* @return ETrue if belongs, EFalse otherwise
+		*/
+		IMPORT_C TBool
+            IsAssociated(const CSIPDialogAssocBase& aDialogAssoc) const;
+
+        /**
+		* Gets the SIP connection used for this dialog
+		* @return SIP connection used for the dialog, or 0-pointer if the
+        *   connection has been deleted. Ownership isn't transferred.
+		*/
+        IMPORT_C CSIPConnection* Connection();
+
+        /**
+		* Gets the SIP connection used for this dialog.
+		* @return SIP connection used for the dialog, or 0-pointer if the
+        *   connection has been deleted. Ownership isn't transferred.
+		*/
+        IMPORT_C const CSIPConnection* Connection() const;
+
+        /**
+		* Gets originator's address
+		* @return originator's address (From-header)
+		*/
+		IMPORT_C const CSIPFromHeader& FromHeader() const;
+
+		/**
+		* Gets recipient's address
+		* @return recipient's address (To-header)
+		*/
+		IMPORT_C const CSIPToHeader& ToHeader() const;
+
+		/**
+		* Gets remote-uri used during dialog creation
+		* @return Remote target uri
+		*/
+		IMPORT_C const CUri8& RemoteURI() const;
+
+		/**
+		* Gets Call-ID of SIP dialog
+		* @pre State()==CSIPDialog::EEarly || State()==CSIPDialog::EConfirmed
+		* @return Call-ID of SIP dialog
+		* @leave KErrSIPInvalidDialogState if dialog doesn't yet have a Call-ID
+		*/
+		IMPORT_C const CSIPCallIDHeader& CallIdL() const;
+
+        /**
+		* Compares this object to another object
+		* @param aDialog CSIPDialog object to compare
+		* @returns ETrue if the objects are equal, otherwise EFalse
+		*/
+        IMPORT_C TBool operator==(const CSIPDialog& aDialog) const;
+        
+        /**
+        * Sets the dialog to state to CSIPDialog::EInit.
+        * The local dialog identifier data 
+        * (Call-ID, CSeq and From-header's tag) will be reused. 
+        * After calling this function, the dialog that was already terminated 
+        * can be used for sending the dialog initiating request such as 
+        * INVITE or SUBSCRIBE reusing the stored Call-ID and From-header's tag
+        * and the stored CSeq incremented by one.
+        * @pre State()==CSIPDialog::ETerminated
+        * @returns KErrNone if succesful and KErrNoMemory if the memory is low.
+        */
+        IMPORT_C TInt ReuseInitialRequestData();
+
+	public: //Constructors and destructor, for internal use
+		/**
+		* Two-phased constructor. 
+		* This constructor should be used if the user has received
+		* SIP request that creates a SIP dialog association.
+        *
+        * @param aConnImplementation Implementation of the used SIP connection
+        * @return New object, ownership is transferred.
+        */
+		static CSIPDialog*
+			NewL(CSIPConnectionImplementation& aConnImplementation);
+
+		/**
+		* Two-phased constructor
+		* This constructor should be used if the user has received
+		* SIP request that creates a SIP dialog association.
+        *
+		* @param aConnImplementation Implementation of the used SIP connection
+        * @return New object, ownership is transferred.
+       	*/
+		static CSIPDialog*
+			NewLC(CSIPConnectionImplementation& aConnImplementation);
+
+		/**
+		* Two-phased constructor
+		* This constructor should be used if the user has received
+		* SIP request that creates a SIP dialog association.
+        *
+        * @param aConnImplementation Implementation of the used SIP connection
+		* @param aContext Registration context whose outbound proxy and other
+		*        parameters are to be used.
+        * @return New object, ownership is transferred.
+       	*/
+		static CSIPDialog*
+			NewL(CSIPConnectionImplementation& aConnImplementation,
+                 const MSIPRegistrationContext& aContext);
+
+		/**
+		* Two-phased constructor
+		* This constructor should be used if the user has received
+		* SIP request that creates a SIP dialog association.
+        *
+        * @param aConnImplementation Implementation of the used SIP connection
+		* @param aContext Registration context whose outbound proxy and other
+		*        parameters are to be used.
+        * @return New object, ownership is transferred.
+        */
+		static CSIPDialog*
+			NewLC(CSIPConnectionImplementation& aConnImplementation,
+                  const MSIPRegistrationContext& aContext);
+
+		/**
+		* Destructor
+		*/
+		~CSIPDialog();
+
+	public: // New functions, for internal use
+
+		/**
+		* Returns the CSIPDialogImplementation.
+ 		* @return CSIPDialogImplementation
+ 		*/
+		CSIPDialogImplementation& Implementation();
+
+    private: // Constructors
+
+        CSIPDialog();        
+
+        void ConstructL(CSIPConnectionImplementation& aConnImplementation);
+        
+        void ConstructL(CSIPConnectionImplementation& aConnImplementation,
+                   		const MSIPRegistrationContext& aContext);
+
+private: // Data
+
+		//Implementation instance, CSIPDialog doesn't own it
+		CSIPDialogImplementation* iImplementation;
+
+private: // For testing purposes
+#ifdef CPPUNIT_TEST
+	    friend class CSIP_Test;
+        friend class CSIPInviteDialogAssoc_Test;
+        friend class CSIPSubscribeDialogAssoc_Test;
+        friend class CSIPReferDialogAssoc_Test;
+#endif
+	void __DbgTestInvariant() const;
+
+	};
+
+#endif