williamr@2: /* williamr@2: * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * 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: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: williamr@2: * Name : sipservertransaction.h williamr@2: * Part of : SIP Client williamr@2: * Interface : SDK API, SIP API williamr@2: * Version : 1.0 williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: #ifndef CSIPSERVERTRANSACTION_H williamr@2: #define CSIPSERVERTRANSACTION_H williamr@2: williamr@2: // INCLUDES williamr@2: #include "siptransactionbase.h" williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class CSIPRequestElements; williamr@2: class MSIPResponseSender; williamr@2: class CSIPConnection; williamr@2: class CSIPDialogImplementation; williamr@2: williamr@2: // CLASS DECLARATION williamr@2: williamr@2: /** williamr@2: * @publishedAll williamr@2: * @released williamr@2: * williamr@2: * Class for managing SIP server transactions. williamr@2: * It provides services for creating, ending williamr@2: * and getting SIP transaction parameters. williamr@2: * Client cannot instantiate this class. williamr@2: * williamr@2: * @lib sipclient williamr@2: */ williamr@2: class CSIPServerTransaction: public CSIPTransactionBase williamr@2: { williamr@2: public: // Destructor williamr@2: williamr@2: /** williamr@2: * Destructor williamr@2: */ williamr@2: IMPORT_C ~CSIPServerTransaction(); williamr@2: williamr@2: public: // New functions williamr@2: williamr@2: /** williamr@2: * Sends response and ends the transaction; williamr@2: * The user must not send 100 Trying response. Leaves on failure. williamr@2: * @pre aElements!=0 williamr@2: * @pre State()==ETrying || State()==EProceeding williamr@2: * @pre CSIPConnection::State()==EActive williamr@2: * @pre ResponseAllowed()==ETrue williamr@2: * @param aElements contains Status Code, optional Reason Phrase and williamr@2: * optional SIP message headers and body. Ownership is transferred. williamr@2: * @leave KErrArgument if aElements == NULL williamr@2: * @leave KErrGeneral if ResponseAllowed() == EFalse williamr@2: * @leave KErrSIPInvalidTransactionState if State()!=ETrying and williamr@2: * State()!=EProceeding williamr@2: * @leave KErrSIPInvalidDialogState if sending response to a request williamr@2: * within dialog, and the dialog is in terminated state. williamr@2: * @leave KErrSIPResourceNotAvailable if a required SIP Client API williamr@2: * object has been deleted williamr@2: * @capability NetworkServices williamr@2: */ williamr@2: IMPORT_C void SendResponseL(CSIPResponseElements *aElements); williamr@2: williamr@2: /** williamr@2: * Gets the request elements williamr@2: * @return Request elements. Ownership is not transferred. williamr@2: */ williamr@2: IMPORT_C const CSIPRequestElements* RequestElements() const; williamr@2: williamr@2: /** williamr@2: * Checks if the response sending is allowed for this server williamr@2: * transaction. For instance response is not allowed in ACK transaction. williamr@2: * @return ETrue if response sending is allowed, EFalse otherwise williamr@2: */ williamr@2: IMPORT_C TBool ResponseAllowed() const; williamr@2: williamr@2: public: // New functions, for internal use williamr@2: williamr@2: /** williamr@2: * Sets a new respose sender, replacing the current sender. williamr@2: * williamr@2: * @param aSender Response sender to be used from now on. Ownership is williamr@2: * transferred. williamr@2: */ williamr@2: void SetResponseSender(MSIPResponseSender* aSender); williamr@2: williamr@2: /** williamr@2: * If the request was received inside a dialog, returns the dialog. williamr@2: * williamr@2: * @return CSIPDialogImplementation* The dialog inside which the request williamr@2: * was received, or NULL. Ownership is not transferred. williamr@2: */ williamr@2: CSIPDialogImplementation* Dialog() const; williamr@2: williamr@2: /** williamr@2: * Obtains the associated CSIPConnection instance. If connection can't williamr@2: * be accessed anymore, this function leaves. williamr@2: * williamr@2: * @return CSIPConnection williamr@2: */ williamr@2: CSIPConnection& SIPConnectionL(); williamr@2: williamr@2: /** williamr@2: * Update the MTransactionAssociation to point to aAssociation. williamr@2: * williamr@2: * @param aAssociation Associated object williamr@2: */ williamr@2: void ReAssociateL(MTransactionAssociation& aAssociation); williamr@2: williamr@2: /** williamr@2: * Removes, but does not delete, request elements from williamr@2: * aServerTransaction. williamr@2: * williamr@2: * @param aServerTransaction Server transaction from which response williamr@2: * elements are removed. Ownership is not transferred. williamr@2: */ williamr@2: static void DetachRequestElements(TAny* aServerTransaction); williamr@2: williamr@2: public: // Constructors, for internal use williamr@2: /** williamr@2: * Creates a server transaction. williamr@2: * williamr@2: * @param aRequestId RequestId for the transaction to use williamr@2: * @param aAssociation Object with which the transaction is associated williamr@2: * @param aElements Request elements. Ownership is transferred. williamr@2: * @return New object. Ownership is transferred. williamr@2: */ williamr@2: static CSIPServerTransaction* williamr@2: NewL(TUint32 aRequestId, williamr@2: MTransactionAssociation& aAssociation, williamr@2: CSIPRequestElements* aElements); williamr@2: williamr@2: /** williamr@2: * Creates a server transaction and pushes it to cleanup stack. williamr@2: * williamr@2: * @param aRequestId RequestId for the transaction to use williamr@2: * @param aAssociation Object with which the transaction is associated williamr@2: * @param aElements Request elements. Ownership is transferred. williamr@2: * @return New object. Ownership is transferred. williamr@2: */ williamr@2: static CSIPServerTransaction* williamr@2: NewLC(TUint32 aRequestId, williamr@2: MTransactionAssociation& aAssociation, williamr@2: CSIPRequestElements* aElements); williamr@2: williamr@2: private: // Constructors williamr@2: CSIPServerTransaction(TUint32 aRequestId, williamr@2: MTransactionAssociation& aAssociation); williamr@2: williamr@2: /** williamr@2: * Second phase constructor. williamr@2: * williamr@2: * @pre aElements!=0 williamr@2: * @param aElements Request elements. Ownership is transferred. williamr@2: */ williamr@2: void ConstructL(CSIPRequestElements* aElements); williamr@2: williamr@2: private: // Data williamr@2: CSIPRequestElements* iRequestElements; williamr@2: williamr@2: //This interface is used for sending the response. williamr@2: //CSIPServerTransaction owns iResponseSender. williamr@2: MSIPResponseSender* iResponseSender; williamr@2: williamr@2: private: // For testing purposes williamr@2: williamr@2: UNIT_TEST(CSIPServerTransaction_Test) williamr@2: UNIT_TEST(CSIP_Test) williamr@2: williamr@2: __DECLARE_TEST; williamr@2: }; williamr@2: williamr@2: #endif