epoc32/include/mw/siptransactionbase.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
/*
williamr@2
     2
* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     3
* All rights reserved.
williamr@2
     4
* This component and the accompanying materials are made available
williamr@4
     5
* under the terms of "Eclipse Public License v1.0"
williamr@2
     6
* which accompanies this distribution, and is available
williamr@4
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     8
*
williamr@2
     9
* Initial Contributors:
williamr@2
    10
* Nokia Corporation - initial contribution.
williamr@2
    11
*
williamr@2
    12
* Contributors:
williamr@2
    13
*
williamr@2
    14
* Description:
williamr@2
    15
* Name        : siptransactionbase.h
williamr@2
    16
* Part of     : SIP Client
williamr@2
    17
* Interface   : SDK API, SIP Client API
williamr@2
    18
* Version     : 1.0
williamr@2
    19
*
williamr@2
    20
*/
williamr@2
    21
williamr@2
    22
williamr@2
    23
williamr@2
    24
#ifndef CSIPTRANSACTIONBASE_H
williamr@2
    25
#define CSIPTRANSACTIONBASE_H
williamr@2
    26
williamr@2
    27
// INCLUDES
williamr@2
    28
#include <e32base.h>
williamr@2
    29
#include <stringpool.h>
williamr@2
    30
williamr@2
    31
// FORWARD DECLARATIONS
williamr@2
    32
class CSIPResponseElements;
williamr@2
    33
class MTransactionAssociation;
williamr@2
    34
williamr@2
    35
// CLASS DECLARATION
williamr@2
    36
williamr@2
    37
/**
williamr@2
    38
*  @publishedAll
williamr@2
    39
*  @released
williamr@2
    40
*
williamr@2
    41
*  Base class for managing SIP transactions.
williamr@2
    42
*  It provides services for querying transaction type and its state.
williamr@2
    43
*
williamr@2
    44
*  This class is an abstract class and cannot be instantiated.
williamr@2
    45
*  @lib sipclient
williamr@2
    46
*/
williamr@2
    47
class CSIPTransactionBase: public CBase
williamr@2
    48
	{
williamr@2
    49
	public:
williamr@2
    50
		/** SIP transaction state */
williamr@2
    51
		enum TState
williamr@2
    52
			{
williamr@2
    53
			/** Trying state */
williamr@2
    54
			ETrying,
williamr@2
    55
			/** Calling state */
williamr@2
    56
			ECalling,
williamr@2
    57
			/** Proceeding state */
williamr@2
    58
			EProceeding,
williamr@2
    59
			/** Completed state */
williamr@2
    60
			ECompleted,
williamr@2
    61
			/** Confirmed state */
williamr@2
    62
			EConfirmed,
williamr@2
    63
			/** Terminated state */
williamr@2
    64
			ETerminated,
williamr@2
    65
			/** Object is being constructed and is not yet ready for use */
williamr@2
    66
			EConstructing
williamr@2
    67
			};
williamr@2
    68
williamr@2
    69
	public: // Destructor
williamr@2
    70
        /**
williamr@2
    71
        * Destructor
williamr@2
    72
        * @internalComponent       
williamr@2
    73
		*/
williamr@2
    74
		virtual ~CSIPTransactionBase();
williamr@2
    75
williamr@2
    76
	public: // New functions
williamr@2
    77
        /**
williamr@2
    78
        * Gets the SIP transaction type
williamr@2
    79
        * @return SIP transaction type
williamr@2
    80
        */
williamr@2
    81
		IMPORT_C RStringF Type() const;
williamr@2
    82
williamr@2
    83
		/**
williamr@2
    84
		* Gets SIP transaction state
williamr@2
    85
		* @return SIP transaction state
williamr@2
    86
		* @leave KErrSIPResourceNotAvailable if a required SIP Client API
williamr@2
    87
		*	object has been deleted
williamr@2
    88
		*/
williamr@2
    89
		IMPORT_C CSIPTransactionBase::TState StateL();
williamr@2
    90
williamr@2
    91
		/**
williamr@2
    92
		* Checks the if the actual object
williamr@2
    93
		* is of type CSIPClientTransaction.
williamr@2
    94
		* @return ETrue if object is of type CSIPClientTransaction and
williamr@2
    95
		*         EFalse otherwise
williamr@2
    96
		*/
williamr@2
    97
		IMPORT_C TBool IsSIPClientTransaction() const;
williamr@2
    98
williamr@2
    99
		/**
williamr@2
   100
		* Compares this object to another object also having
williamr@2
   101
		* CSIPTransactionBase base class
williamr@2
   102
		* The function has to be implemented in each of the sub-classes.
williamr@2
   103
		* @param aTransaction a CSIPTransactionBase object to compare
williamr@2
   104
		* @return ETrue if the objects are equal otherwise EFalse
williamr@2
   105
		*/
williamr@2
   106
        IMPORT_C TBool
williamr@2
   107
            operator==(const CSIPTransactionBase& aTransaction) const;
williamr@2
   108
williamr@2
   109
	public: // New functions, for internal use
williamr@2
   110
        /**
williamr@2
   111
		* Obtains the RequestId of the transaction.
williamr@2
   112
		*
williamr@2
   113
        * @return RequestId
williamr@2
   114
		*/
williamr@2
   115
        TUint32 RequestId() const;
williamr@2
   116
williamr@2
   117
        /**
williamr@2
   118
		* Clears the MTransactionAssociation. After this the object can't be
williamr@2
   119
        * used anymore and it is expected that user will delete it soon.
williamr@2
   120
        *
williamr@2
   121
        * @param aAssociation Object requesting the detach
williamr@2
   122
        * @internalComponent      
williamr@2
   123
		*/
williamr@2
   124
        virtual void Detach(const MTransactionAssociation& aAssociation);
williamr@2
   125
williamr@2
   126
        /**
williamr@2
   127
		* Changes the transaction state.
williamr@2
   128
        *
williamr@2
   129
        * @param aNextState State into which transaction moves
williamr@2
   130
		*/
williamr@2
   131
        void ChangeState(CSIPTransactionBase::TState aNextState);
williamr@2
   132
williamr@2
   133
        /**
williamr@2
   134
        * Determines whether this transaction has an effect on the associated
williamr@2
   135
        * dialog's state.
williamr@2
   136
        *
williamr@2
   137
		* @return ETrue if transaction has an effect on the dialog's state,
williamr@2
   138
        *   EFalse otherwise.
williamr@2
   139
		*/
williamr@2
   140
        TBool AffectsDialogState() const;
williamr@2
   141
williamr@2
   142
        /**
williamr@2
   143
		* Sets this transaction to affect the dialog state.
williamr@2
   144
		*/
williamr@2
   145
        void SetAffectsDialogState();
williamr@2
   146
williamr@2
   147
        /**
williamr@2
   148
		* Determines whether the transaction type is a target refresh request.
williamr@2
   149
        *
williamr@2
   150
        * @param aType Type of transaction
williamr@2
   151
        * @return ETrue If the transaction is a target refresh request, EFalse
williamr@2
   152
        *   otherwise.
williamr@2
   153
		*/
williamr@2
   154
        static TBool IsTargetRefresh(RStringF aType);
williamr@2
   155
williamr@2
   156
        /**
williamr@2
   157
		* Stores response elements. Depending on the status code, transaction
williamr@2
   158
        * may enter another state.
williamr@2
   159
        *
williamr@2
   160
        * @param aElements Response elements, ownership is transferred.
williamr@2
   161
		*/
williamr@2
   162
        void SetResponseElements(CSIPResponseElements* aElements);
williamr@2
   163
williamr@2
   164
    protected: // Constructors
williamr@2
   165
        CSIPTransactionBase(TBool aIsClientTransaction,
williamr@2
   166
                            TUint32 aRequestId,
williamr@2
   167
                            MTransactionAssociation& aAssociation);
williamr@2
   168
williamr@2
   169
        void ConstructL(RStringF aType);
williamr@2
   170
williamr@2
   171
	protected: // New functions, for internal use
williamr@2
   172
        /**
williamr@2
   173
		* Checks that iAssociation is available (not NULL). If iAssociation is
williamr@2
   174
        * NULL, it means user has deleted a resource needed by
williamr@2
   175
        * CSIPTransactionBase, and this function leaves.
williamr@2
   176
		*/
williamr@2
   177
        void CheckAssociationL() const;
williamr@2
   178
williamr@2
   179
        /**
williamr@2
   180
		* Gets response elements.
williamr@2
   181
        *
williamr@2
   182
		* @return Response elements. Ownership isn't transferred.
williamr@2
   183
		*/
williamr@2
   184
        const CSIPResponseElements* ResponseElements() const;
williamr@2
   185
williamr@2
   186
	protected: // Data
williamr@2
   187
	
williamr@2
   188
        /**
williamr@2
   189
        * RequestId received from SIP client
williamr@2
   190
        * @internalComponent
williamr@2
   191
        */       
williamr@2
   192
        TUint32 iRequestId;
williamr@2
   193
williamr@2
   194
        /**
williamr@2
   195
        * Every transaction is associated to exactly one other object:
williamr@2
   196
        * CSIP, CSIPConnection, CSIPRegistrationBinding or CSIPDialogAssocBase
williamr@2
   197
        * @internalComponent
williamr@2
   198
        */        
williamr@2
   199
        MTransactionAssociation* iAssociation;
williamr@2
   200
williamr@2
   201
    private: // Data
williamr@2
   202
		RStringF iType;
williamr@2
   203
williamr@2
   204
        //ETrue is the transaction is a client transaction, EFalse otherwise
williamr@2
   205
        TBool iIsClientTransaction;
williamr@2
   206
williamr@2
   207
        //Current transaction state
williamr@2
   208
        CSIPTransactionBase::TState iState;
williamr@2
   209
williamr@2
   210
        //ETrue if the transaction has an effect on the dialog state in case
williamr@2
   211
        //the transaction is associated with a dialog.
williamr@2
   212
        //EFalse otherwise.
williamr@2
   213
        TBool iAffectsDialogState;
williamr@2
   214
williamr@2
   215
        //SIP response elements
williamr@2
   216
        CSIPResponseElements* iResponseElements;
williamr@2
   217
williamr@2
   218
	private: // For testing purposes
williamr@4
   219
#ifdef CPPUNIT_TEST
williamr@4
   220
	    friend class CSIP_Test;
williamr@4
   221
        friend class CSIPServerTransaction_Test;
williamr@4
   222
        friend class CSIPSubscribeDialogAssoc_Test;
williamr@4
   223
        friend class CSIPInviteDialogAssoc_Test;
williamr@4
   224
        friend class CSIPNotifyDialogAssoc_Test;
williamr@4
   225
        friend class CSIPConnection_Test;
williamr@4
   226
#endif
williamr@4
   227
		void __DbgTestInvariant() const;
williamr@2
   228
williamr@2
   229
    };
williamr@2
   230
williamr@2
   231
#endif