diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/sipapi/src/SipDialogAssocImplementation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SIP/sipapi/src/SipDialogAssocImplementation.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,216 @@ +/* +* Copyright (c) 2003-2009 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: +* Name : SipDialogAssocImplementation.h +* Part of : SIP Client +* Interface : SDK API, SIP Client API +* Version : 1.0 +* +*/ + + + + +/** + @internalComponent +*/ + +#ifndef CSIPDIALOGASSOCIMPLEMENTATION_H +#define CSIPDIALOGASSOCIMPLEMENTATION_H + +// INCLUDES +#include +#include "_sipcodecdefs.h" +#include "transactionassociation.h" +#include "siprefreshassociation.h" + +// FORWARD DECLARATIONS +class CSIPDialogAssocBase; +class CSIPClientTransaction; +class CSIPRefresh; +class CSIPDialog; +class CSIPMessageElements; +class CSIPServerTransaction; +class CSIPHeaderBase; +class TMessageHeaderCleanup; +class CSIPDialogImplementation; +class CSIPConnectionImplementation; + +// CLASS DECLARATION + +/** +* Implementation class of CSIPDialogAssocBase. +*/ +class CSIPDialogAssocImplementation : + public CBase, + public MTransactionAssociation, + public MSIPRefreshAssociation + { + public: // Constructors and destructor + + static CSIPDialogAssocImplementation* + NewL(RStringF aType, + CSIPDialogAssocBase& aAssoc, + CSIPDialog& aDialog); + + static CSIPDialogAssocImplementation* + NewL(RStringF aType, + CSIPDialogAssocBase& aAssoc, + CSIPDialog& aDialog, + CSIPServerTransaction& aTransaction); + + /** + * Destructor + */ + virtual ~CSIPDialogAssocImplementation(); + + public: //From MTransactionAssociation + + CSIPClientConnection& ClientConnectionL(); + + CSIPClientConnection* ClientConnection(); + + CSIPConnection& SIPConnectionL(); + + void AddTransactionL(CSIPTransactionBase& aTransaction); + + void RemoveTransaction(const CSIPTransactionBase& aTransaction); + + public: //From MSIPRefreshAssociation + + CSIPClientTransaction* + UpdateRefreshL(CSIPRefresh& aRefresh, + CSIPMessageElements* aElements, + TBool aTerminate); + + void DeletingRefresh(CSIPRefresh& aRefresh, TUint32 aRefreshId); + + MTransactionAssociation& TransactionAssociation(); + + TInt CheckIfStandAlone(); + + public: // New functions + + /** + * Gets the dialog this dialog association belongs to + * @return associated dialog + */ + const CSIPDialog& Dialog() const; + + /** + * Gets dialog this dialog association belongs to + * @return associated dialog + */ + CSIPDialog& Dialog(); + + /** + * Creates SIP request and sends it to the remote target. + * This function should be used for sending SIP extension + * requests within dialog assocation that do not cause + * sip dialog associations to be created. In SIP terms + * this request is non target refresh request. + * @pre SIPDialog().State() != CSIPDialog::EInit && + * SIPDialog().State() != CSIPDialog::ETerminated + * @pre Dialog().Connection().State() == EActive + * @pre aMethod != "REGISTER" |"INVITE" | "BYE" | "CANCEL" | "ACK" | + * "SUBSCRIBE" | "NOTIFY" | "UPDATE" | "PRACK" + * @param aElements contains optional SIP message headers and body. + * Ownership is transferred. + * @return SIP extension client transaction. Ownership is transferred. + * @leave KErrSIPInvalidDialogState If dialog's state is not correct + * @leave KErrArgument if invalid value has been set to aMethod + * @leave KErrSIPResourceNotAvailable if a required SIP Client API + * object has been deleted + */ + virtual CSIPClientTransaction* + SendNonTargetRefreshRequestL(RStringF aMethod, + CSIPMessageElements* aElements); + + /** + * Gets dialog association type. + * + * @return dialog association type e.g. "INVITE", "SUBSCRIBE" etc... + */ + RStringF Type() const; + + /** + * Searches for a transaction with the given aRequestId. + * + * @param aRequestId RequestId of a transaction + * @return Found transaction, or NULL if not found. Ownership is not + * transferred + */ + CSIPTransactionBase* FindTransaction(TUint32 aRequestId); + + /** + * Checks if this dialog association has a transaction of the given + * type. + * + * @param aType Transaction type + * @param aIsClientTransaction ETrue if searching for a client + * transaction, EFalse if searching for a server transaction + * @return ETrue if such a transaction exists, EFalse otherwise + */ + TBool HasTransaction(RStringF aType, TBool aIsClientTransaction); + + /** + * The connection used by dialog association has been lost. + * Those classes derived from CSIPDialogAssocImplementation, which can contain + * refreshes must implement this function for terminating the refresh. + */ + virtual void ConnectionLost(); + + /** + * Makes a copy of aHeader and adds it into aElements and also into + * headerCleanup. + * @param aHeader SIP header + * @param aElements Message elements + * @param aHeaderCleanup Information to detach and delete the copy of + * aHeader from aElements in case leave occurs. + */ + static void CopyHeaderL(const CSIPHeaderBase& aHeader, + CSIPMessageElements& aElements, + TMessageHeaderCleanup& aHeaderCleanup); + + protected: + + /* + * Constructor + */ + CSIPDialogAssocImplementation(CSIPDialogAssocBase& aAssoc, + CSIPDialog& aDialog); + void ConstructL(RStringF aType); + void ConstructL(RStringF aType, CSIPServerTransaction& aTransaction); + + private: // Data + + //Dialog association type + RStringF iType; + + CSIPDialogAssocBase& iAssoc; + + CSIPDialog& iDialog; + + //Existing transactions that are related to this dialog association. + //CSIPDialogAssocImplementation doesn't own them. + RPointerArray iTransactions; + + TBool iStringPoolOpened; + + private: // For testing purposes + + UNIT_TEST(CSIPInviteDialogAssoc_Test) + }; + +#endif