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