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 : sipdialogassocbase.h williamr@2: * Part of : SIP Client williamr@2: * Interface : SDK API, SIP Client API williamr@2: * Version : 1.0 williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: #ifndef CSIPDIALOGASSOCBASE_H williamr@2: #define CSIPDIALOGASSOCBASE_H williamr@2: williamr@2: // INCLUDES williamr@2: #include williamr@2: #include "_sipcodecdefs.h" williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class CSIPMessageElements; williamr@2: class CSIPClientTransaction; williamr@2: class CSIPDialog; williamr@2: class CSIPRefresh; williamr@2: class CSIPServerTransaction; williamr@2: class CSIPDialogAssocImplementation; williamr@2: williamr@2: // CLASS DECLARATION williamr@2: williamr@2: /** williamr@2: * @publishedAll williamr@2: * @released williamr@2: * williamr@2: * Base class for SIP dialog associations. It provides services for getting williamr@2: * associated SIP dialog, actual dialog association type and for sending non williamr@2: * target refresh requests within the dialog association. williamr@2: * @lib sipclient williamr@2: */ williamr@2: class CSIPDialogAssocBase : public CBase williamr@2: { williamr@2: public: // Destructor williamr@2: williamr@2: /** williamr@2: * Destructor williamr@2: * @internalComponent williamr@2: */ williamr@2: virtual ~CSIPDialogAssocBase(); williamr@2: williamr@2: public: // New functions williamr@2: williamr@2: /** williamr@2: * Gets the dialog this dialog association belongs to williamr@2: * @return associated dialog williamr@2: */ williamr@2: IMPORT_C const CSIPDialog& Dialog() const; williamr@2: williamr@2: /** williamr@2: * Gets dialog this dialog association belongs to williamr@2: * @return associated dialog williamr@2: */ williamr@2: IMPORT_C CSIPDialog& Dialog(); williamr@2: williamr@2: /** williamr@2: * Creates SIP request and sends it to the remote target. williamr@2: * This function should be used for sending SIP extension williamr@2: * requests within dialog assocation that do not cause williamr@2: * sip dialog associations to be created. In SIP terms williamr@2: * this request is non target refresh request. williamr@2: * @pre SIPDialog().State() != CSIPDialog::EInit && williamr@2: * SIPDialog().State() != CSIPDialog::ETerminated williamr@2: * @pre Dialog().Connection().State() == EActive williamr@2: * @pre aMethod != "REGISTER" |"INVITE" | "BYE" | "CANCEL" | "ACK" | williamr@2: * "SUBSCRIBE" | "NOTIFY" | "UPDATE" | "PRACK" | "REFER" williamr@2: * @param aElements contains optional SIP message headers and body. williamr@2: * Ownership is transferred. williamr@2: * @return SIP extension client transaction. Ownership is transferred. williamr@2: * @leave KErrSIPInvalidDialogState If dialog's state is not correct williamr@2: * @leave KErrArgument if invalid value has been set to aMethod 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 virtual CSIPClientTransaction* williamr@2: SendNonTargetRefreshRequestL(RStringF aMethod, williamr@2: CSIPMessageElements* aElements); williamr@2: williamr@2: /** williamr@2: * Gets dialog association type. williamr@2: * williamr@2: * @return dialog association type e.g. "INVITE", "SUBSCRIBE" etc... williamr@2: */ williamr@2: IMPORT_C RStringF Type() const; williamr@2: williamr@2: /** williamr@2: * Tests if the request is a non target refresh request williamr@2: * @param aMethod a method to test williamr@2: * @return ETrue if is non target refresh request; EFalse otherwise williamr@2: */ williamr@2: IMPORT_C TBool IsNonTargetRefreshRequest(RStringF aMethod) const; williamr@2: williamr@2: public: // New functions, for internal use williamr@2: williamr@2: /** williamr@2: * Returns the implementation instance. williamr@2: * @return CSIPDialogAssocImplementation williamr@2: */ williamr@2: CSIPDialogAssocImplementation& Implementation(); williamr@2: williamr@2: /** williamr@2: * Searches for a refresh with the matching id. Default implementation williamr@2: * returns NULL. Those classes derived from CSIPDialogAssocBase, which williamr@2: * can contain refreshes must implement this function for searching the williamr@2: * correct refresh. williamr@2: * williamr@2: * @return CSIPRefresh if found, NULL otherwise. williamr@2: * The ownership is not transferred. williamr@2: * @internalComponent williamr@2: */ williamr@2: virtual CSIPRefresh* FindRefresh(TUint32 aRefreshId); williamr@2: williamr@2: /** williamr@2: * @internalComponent williamr@2: */ williamr@2: virtual void DeletingRefresh(CSIPRefresh& aRefresh, TUint32 aRefreshId); williamr@2: williamr@2: protected: // Constructors, for internal use williamr@2: williamr@2: /* williamr@2: * Constructor williamr@2: */ williamr@2: CSIPDialogAssocBase(); williamr@2: williamr@2: void ConstructL(RStringF aType, CSIPDialog& aDialog); williamr@2: void ConstructL(RStringF aType, williamr@2: CSIPDialog& aDialog, williamr@2: CSIPServerTransaction& aTransaction); williamr@2: williamr@2: protected: // Data williamr@2: williamr@2: /** williamr@2: * Implementation instance, CSIPDialogAssocBase owns it williamr@2: * @internalComponent williamr@2: */ williamr@2: CSIPDialogAssocImplementation* iImplementation; williamr@2: williamr@2: private: // For testing purposes williamr@2: williamr@2: UNIT_TEST(CSIPInviteDialogAssoc_Test) williamr@2: williamr@2: __DECLARE_TEST; williamr@2: }; williamr@2: williamr@2: #endif