mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/sipconnection.h
branchRCL_3
changeset 33 bc78a40cd63c
parent 32 73a1feb507fb
child 35 6c57ef9392d2
--- a/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/sipconnection.h	Tue Aug 31 15:12:07 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,573 +0,0 @@
-/*
-* Copyright (c) 2003 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:  
-*
-*/
-
-
-#ifndef CSIPCONNECTION_H
-#define CSIPCONNECTION_H
-
-//  INCLUDES
-#include <e32base.h>
-#include <in_sock.h>
-
-// FORWARD DECLARATIONS
-class CSIP;
-class MSIPConnectionObserver;
-class CSIPTransactionBase;
-class CSIPClientTransaction;
-class CSIPServerTransaction;
-class MSIPRegistrationContext;
-class CSIPRegistrationBinding;
-class CRegistrationState;
-class CSIPDialog;
-class CDialogState;
-class CSIPRefresh;
-class CSIPMessageElements;
-class CSIPRequestElements;
-class CSIPResponseElements;
-class CSIPClientConnectionObserver;
-class CConnectionCallback;
-class CSIPClientConnection;
-
-
-//CONSTANTS
-/** SIP minimum value for the expiration in seconds*/
-//const TUint KSIPMinExpirationValue=60;
-
-
-// CLASS DECLARATION
-
-/**
-*  Class for monitoring connection's state and sending SIP requests outside
-*  the dialog associations.Class must not be used
-*  -for sending requests to which received non-failure response creates a dialog
-*  -for sending requests that must be sent within SIP dialog
-* Note that the user can have only one instance of the class per same IAP-id
-*/
-class CSIPConnection :
-    public CBase
-	{
-    public:
-    
-        /** Connection states */
-        enum TState 
-            {
-            /** Connection initializing */
-			EInit=1,
-			/** Connection active */
-			EActive,
-			/** Connection suspended */
-			ESuspended,
-			/** Connection is inactive */
-			EInactive,
-			/** Connection is permanently unavailable */
-			EUnavailable
-            };
-
-    public:  // Constructors and destructor
-
-	    /**
-        * Two-phased constructor.
-		* @param aSip a handle to the SIP server
-		* @param aIapId IAP-id
-		* @param aObserver a observer for receiving asynchonous events on this
-        *   connection
-        * @return New object, ownership is transferred
-        */
-
-		IMPORT_C static CSIPConnection*
-            NewL(CSIP& aSIP,
-				 TUint32 aIapId,
-				 MSIPConnectionObserver& aObserver);
-
-
-	    /**
-        * Two-phased constructor.
-		* Constructs an object and adds the pointer to the cleanup stack;
-		* @param aSip a handle to the SIP server
-		* @param aIapId IAP-id
-		* @param aObserver a observer for receiving asynchonous events on this
-        *   connection
-        * @return New object, ownership is transferred
-        */
-
-		IMPORT_C static CSIPConnection*
-            NewLC(CSIP& aSIP,
-				  TUint32 aIapId,
-				  MSIPConnectionObserver& aObserver);
-
-
-		/**
-		* Destructor
-		*/
-
-		IMPORT_C ~CSIPConnection();
-
-    public: // New functions
-
-        /**
-		* Gets current state of the connection        
-        * @return current state of the connection
-        */
-
-		IMPORT_C TState State() const;
-
-        /**
-		* Creates SIP request and sends it to the given destination.
-		* The function must not be used with SIP requests that creates
-		* SIP dialog associations or must be sent within SIP dialog
-		* association.
-		* This provokes the Non-invite state machine.
-		* This function must be used if the user has created the
-		* registration binding.
-		* @pre State() == EActive.
-		* @pre aContext.IsContextActive()==ETrue
-		* @param aElements contains local and remote addresses,
-		*		 optional SIP message headers and body.
-		*        The ownership is transferred.
-		* @param aContext defines outbound proxy to be used. If the user
-		*        does not provide from-address it will be constucted using
-		*        user's AOR used during the registration.
-        * @return SIP client transaction, ownership is transferred
-        */
-
-		IMPORT_C CSIPClientTransaction*
-            SendRequestL(CSIPRequestElements* aElements,
-                         const MSIPRegistrationContext& aContext);
-
-
-        /**
-		* Creates SIP request and sends it to the given destination.
-		* The function must not be used with SIP request that creates
-		* SIP dialog associations or must be sent within SIP diallog
-		* association.
-		* This provokes the Non-invite state machine.
-		* This function must be used if the user has created the
-		* registration binding.
-		* @pre State() == EActive.
-		* @pre aContext.IsContextActive()==ETrue
-		* @param aElements contains local and remote addresses,
-		*		 optional SIP message headers and body.
-		*        The ownership is transferred.
-		* @param aContext defines outbound proxy to be used. If the user
-		*        does not provide from-address it will 
-		*        be constucted using user's AOR used during the registration.
-		* @param aRefresh defines the refresh interval for this transaction.
-        * @return SIP client transaction, ownership is transferred
-        */
-
-		IMPORT_C CSIPClientTransaction*
-            SendRequestL(CSIPRequestElements* aElements,                                        
-                         const MSIPRegistrationContext& aContext,
-						 CSIPRefresh& aRefresh); 
-
-
-        /**
-		* Creates SIP request and sends it to the given destination.
-		* The function must not be used with SIP request that creates SIP
-		* diallog associations or must be sent within SIP dialog association.
-		* This invokes the Non-invite state machine.
-		* @pre State() == EActive.
-		* @pre aElements.FromHeader() != 0
-		* @param aElements contains local and remote addresses,
-		*		 optional SIP message headers and body.
-		*        The ownership is transferred.
-        * @return SIP client transaction, ownership is transferred
-        */
-
-		IMPORT_C CSIPClientTransaction*
-            SendRequestL(CSIPRequestElements* aElements);
-        
-
-        /**
-		* Creates SIP request and sends it to the given destination.
-		* The function must not be used with SIP request that creates SIP
-		* dialog associations or must be sent within SIP dialog association.
-		* This invokes the Non-invite state machine.
-		* @pre State() == EActive.
-		* @pre aElements.FromHeader() != 0
-		* @param aElements contains local and remote addresses,
-		*		 optional SIP message headers and body.
-		*        The ownership is transferred.
-		* @param aRefresh indicates that transaction will be refreshed
-        * @return SIP client transaction, ownership is transferred
-        */
-
-		IMPORT_C CSIPClientTransaction*
-            SendRequestL(CSIPRequestElements* aElements,
-						 CSIPRefresh& aRefresh);
-
-
-        /**
-		* Creates SIP REGISTER request and sends it to the given destination.
-		* User must no define any Contact or Expires-headers
-		* in the provided elements.
-		* @pre State() == EActive
-        * @pre aElements != 0
-		* @pre aElements->Method().DesC().Length()==0
-		* @param aElements contains local and remote addresses, optional SIP
-        *        message headers and body. User must not set any expires values
-        *        to aElements. The ownership is transferred.
-        * @return SIP REGISTER client transaction, ownership is transferred
-        */
-
-		IMPORT_C CSIPClientTransaction*
-            FetchRegistrationsL(CSIPRequestElements* aElements);
-            
-        // Not in real SIP API:
-        IMPORT_C void SetState(TState aState);    
-
-		//TODO:SHOULD THIS NEW FUNCTION BE INCLUDED INTO STUB???
-		/**
-		* Gets Iap-id used for this connection
-		* @return Iap-id
-		*/
-		
-		IMPORT_C TUint32 IapId() const;
-		
-		
-		/**
-        * Gets SIP server handle
-        * @return handle to SIP server, or 0-pointer if SIP server does not
-        *	exist any more
-        */
-        IMPORT_C CSIP* SIP();
-  
-		/**
-        * Gets SIP server handle
-        * @return handle to SIP server, or 0-pointer if SIP server does not
-        *	exist any more
-        */
-        
-        IMPORT_C const CSIP* SIP() const;
-		//TODO:ENDS
-		
-        /**
-		* Incoming request outside dialog has been received.
-		*
-		* @param aTransaction Server transaction. Ownership is transferred.        
-        */
-
-        void IncomingRequestL(CSIPServerTransaction* aTransaction) const;
-
-        /**
-        * Gets the local IP address of this CSIPConnection 
-        * that is used by the SIP implementation.
-        * The user should re-new the call whenever the connection state changes
-        * to the CSIPConnection::EActive in order to verify the correctness of
-        * the previously retrieved local IP address. The local IP address might
-        * be different as a result of the connection state change.
-        * @pre State() == CSIPConnection::EActive
-        * @param aAddr on return filled with local IP address
-        * @leave a system-wide error code
-        */ 	                         
-	    IMPORT_C void GetLocalAddrL(TInetAddr& aAddr) const;
-
-        
-        /**
-		* Incoming request within dialog has been received.
-		*
-		* @param aTransaction Server transaction. Ownership is transferred.
-        * @param aDialogId Identifies the dialog to which the transaction
-        *   belongs to.
-        */
-
-        void IncomingDialogRequestL(CSIPServerTransaction* aTransaction,
-                              		TUint32 aDialogId);
-
-        void IncomingResponseL(CSIPResponseElements* aElements,
-                               TUint32 aRequestId) const;
-    
-        void IncomingRegistrationResponseL(CSIPResponseElements* aElements,
-		                       			   TUint32 aRequestId,
-					           			   TUint32 aRegistrationId) const;
-
-        void IncomingRefreshResponseL(CSIPResponseElements* aElements,
-		                       		  TUint32 aRequestId,
-							   		  TUint32 aRefreshId);
-
-
-        void ErrorOccured(TInt aError, TUint32 aRequestId) const;
-
-        void RefreshErrorOccured(TInt aError, TUint32 aRefreshId) const;
-
-	    void RegistrationErrorOccured(TInt aError,
-                          			  TUint32 aRegistrationId,
-                          			  TUint32 aRequestId) const;
-
-		void DialogErrorOccured(TInt aError,
-                          		TUint32 aDialogId,
-                          		TUint32 aRequestId) const;
-
-        void DialogErrorOccured(TInt aError,
-                          		TUint32 aDialogId,
-                          		TUint32 aRefreshId,
-                          		TUint32 aRequestId) const;
-
-        void ConnectionStateChanged(CSIPConnection::TState aState);
-
-        void InviteCompleted(TUint32 aRequestId) const;
-
-
-		/**
-        * Searches for a transaction with the matching aRequestId.
-		* @param aRequestId RequestId associated with the transaction
-		* @return Found transaction or NULL if not found. Ownership is not
-        *   transferred.
-        */
-        
-        CSIPTransactionBase* FindTransaction(TUint32 aRequestId) const;
-   
-   
-        TInt AddRegistration(CSIPRegistrationBinding* aRegistration);
-        void RemoveRegistration(const CSIPRegistrationBinding* aRegistration);
-        
-
-      /**
-        * Searches for a registration binding, using aRegistrationId and
-        * aRequestId as keys. Registration might not yet have received
-        * RegistrationId from SIP client, so the aRequestId may be needed to
-        * locate the registration binding.
-        * @param aRegistrationId RegistrationId of the registration binding
-		* @param aRequestId RequestId of a transaction associated with the
-        *   registration
-		* @return Found registration binding or NULL if not found.
-		*	Ownership is not transferred.
-        */
-        
-        CSIPRegistrationBinding* FindRegistration(TUint32 aRegistrationId,
-                             			   		  TUint32 aRequestId) const;
-
-
-        TInt AddDialog(CSIPDialog* aDialog);
-        void RemoveDialog(const CSIPDialog* aDialog);
-
-
-        /**
-        * Searches for a dialog, using aRequestId as a key.
-        * @param aRequestId RequestId of a transaction associated with the
-        *   dialog
-		* @return Found dialog or NULL if not found. Ownership is not
-        *   transferred.
-        */
-
-        CSIPDialog* FindDialogByRequestId(TUint32 aRequestId) const;
-
-
-        /**
-		* Informs CSIPConnection that the associated CSIP instance has been
-        * deleted. After this the CSIPConnection object can't be used anymore.
-		*/
-
-        void CSIPDeleted();
-
-
-        /**
-		* Obtains the initial state for registration state machine.
-        *
-        * @return Initial registration state, ownership is not transferred
-		*/
-
-        CRegistrationState* InitialRegisterStateL() const;
-
-
-        /**
-		* Obtains the initial state for dialog state machine.
-        *
-        * @return Initial dialog state, ownership is not transferred
-		*/
-
-        CDialogState* InitialDialogStateL() const;
-
-
-        /**
-        * Response related to a dialog has been received.
-		*
-        * @param aElements SIP response elements. Ownership is transferred.
-        * @param aRequestId Identifies the transaction
-        * @param aDialogId DialogId
-        * @param aRefreshId NULL if the response is not related to a refresh,
-        *   otherwise the RefreshId. Ownership is not transferred.
-		*/
-
-        void IncomingResponseToDialogL(CSIPResponseElements* aElements,
-		                               TUint32 aRequestId,
-                                       TUint32 aDialogId,
-                                       TUint32* aRefreshId);
-
-    private:
-        CSIPConnection(CSIP& aSIP,
-                       TUint32 aIapId,
-                       MSIPConnectionObserver& aObserver);
-
-        void ConstructL();
-
-
-        /**
-        * Send a SIP request.
-        *
-		* @param aElements SIP headers. Ownership is transferred.
-        * @param aRegistrationId If non-NULL, request will use the outbound
-        *   proxy and some SIP headers from the registration identified by
-        *   aRegistrationId. Ownership is not transferred.
-        * @param aRefresh If non-NULL, the request will be refreshed. Otherwise
-        *   NULL. Ownership is not transferred.
-		* @return New transaction. Ownership is transferred.
-        */
-
-        CSIPClientTransaction*
-            SendRequestL(CSIPRequestElements* aElements,
-                         TUint32* aRegistrationId,
-						 CSIPRefresh* aRefresh);
-
-
-        /**
-        * Searches for a refresh and transaction, using aRequestId and
-        * aRefreshId as keys.        
-		* @param aRequestId RequestId associated with the refreshed transaction
-        * @param aRefreshId RefreshId associated with the refresh instance
-        * @param aRefresh OUT: if refresh was found, this pointer is set to the
-        *   refresh instance. Ownership is not transferred.
-        * @param aTransaction OUT: if transaction was found, this pointer is
-        *   set to the refreshed client transaction. Ownership is not
-        *   transferred.
-		* @return ETrue if found, EFalse otherwise
-        */
-
-        TBool FindRefresh(TUint32 aRequestId,
-                          TUint32 aRefreshId,
-                          CSIPRefresh** aRefresh,
-                          CSIPClientTransaction** aTransaction) const;
-
-        /**
-        * Searches for a registration binding, using aRequestId as a key.
-		* @param aRequestId RequestId of a transaction associated with the
-        *   registration binding
-		* @return Found registration binding or NULL if not found.
-		*	Ownership is not transferred.
-        */
-
-        CSIPRegistrationBinding* FindRegistration(TUint32 aRequestId) const;
-
-        
-        /**
-        * Searches for a dialog, using aDialogId as a key.        
-        * @param aDialogId DialogId of the dialog.
-		* @return Found dialog or NULL if not found. Ownership is not
-        *   transferred.
-        */
-
-        CSIPDialog* FindDialog(TUint32 aDialogId) const;
-
-
-        /**
-        * A request has been received with a dialogId, but no matching dialog
-        * exists.
-		* If the request is NOTIFY, it is stored until a response with the same
-        * dialogId is received. Then the response is passed to dialog and after
-        * that all the stored NOTIFY are passed to the same dialog.
-        * This is needed since NOTIFY can be received before a sent SUBSCRIBE
-        * receives a response with dialogId.
-		*
-        * @param aTransaction Server transaction, ownership is transferred
-        * @param aDialogId DialogId
-		*/
-
-        void IncomingRequestBeforeDialogExistsL(
-                                    CSIPServerTransaction* aTransaction,
-                                    TUint32 aDialogId);
-
-
-        /**
-		* Extracts the oldest stored transaction for the dialog identified by
-        * aDialogId.
-        * @param aDialogId DialogId
-        * @return Server transaction or NULL if no transaction is stored for
-        *   the dialog. Ownership is transferred.
-		*/
-
-        CSIPServerTransaction* GetStoredTransaction(TUint32 aDialogId);
-
-
-        /**
-		* Checks that CSIP is available for use (not NULL). If iSIP is NULL,
-        * it means user has deleted a resource needed by CSIPConnection, and
-        * this function leaves.
-		*/
-
-        void CheckCSipL() const;       
-
-
-        /**
-		* Connection is no longer available. All registrations, dialogs,
-        * transactions and refreshes using this connection are terminated, but
-        * not deleted.
-		*/
-
-        void ConnectionLost();
-
-
-        //The used CSIP instance. CSIPConnection doesn't own the CSIP.
-        //If this pointer is NULL; it means application has deleted the
-        //CSIP instance before deleting the CSIPConnection, and this
-        //CSIPConnection is now useless.
-        CSIP* iSIP;
-
-        //IAP-id of this connection
-        TUint32 iIapId;
-
-        //Callback to upper layer
-        MSIPConnectionObserver& iObserver;
-
-        //Callback receiving events from client
-        CSIPClientConnectionObserver* iClientConnectionObserver;        
-
-        //Connection used by this CSIPConnection instance
-        CSIPClientConnection* iClientConnection;
-
-        //CSIPConnection doesn't own CSIPRegistrationBindings
-        RPointerArray<CSIPRegistrationBinding> iRegistrations;
-
-        //CSIPConnection doesn't delete the CSIPDialog objects. CSIPDialog
-        //deletes itself when its last dialog association is deleted.
-        //NOTE: When CSIPDialog has just been created and has no dialog
-        //associations yet, it must be stored in CleanupStack, otherwise it
-        //won't be freed if leave occurs!
-        RPointerArray<CSIPDialog> iDialogs;
-
-        //CSIPConnection has to know which transactions are attached to it, but
-        //it doesn't own the transactions. Transaction's ownership is passed
-        //to application.
-        RPointerArray<CSIPTransactionBase> iTransactions;
-
-        //Standalone refreshes, application owns these
-        RPointerArray<CSIPRefresh> iRefreshes;
-
-        //To avoid using callbacks to MSIPConnectionObserver from within
-        //CSIPRegistrationBinding and CSIPDialog, CConnectionCallback is passed to
-        //the methods which would need to use MSIPConnectionObserver calls.
-        //CSIPRegistrationBinding and CSIPDialog will fill CConnectionCallback with
-        //the selected callback method and its parameters, and by returning
-        //ETrue they tell to CSIPConnection that a callback has to be done.
-        CConnectionCallback* iCallbackInfo;
-        
-        
-        // Not in real SIP API
-        TState iState;
-	};
-
-#endif
-