diff -r 2fe1408b6811 -r e1b950c65cb4 epoc32/include/mw/siptransactionbase.h --- /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 +#include +#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