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 : sipdialog.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: williamr@2: #ifndef CSIPDIALOG_H williamr@2: #define CSIPDIALOG_H williamr@2: williamr@2: // INCLUDES williamr@2: #include williamr@2: #include williamr@2: #include "_sipcodecdefs.h" williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class CSIPConnection; williamr@2: class CSIPConnectionImplementation; williamr@2: class MSIPRegistrationContext; williamr@2: class CSIPDialogAssocBase; williamr@2: class CSIPFromHeader; williamr@2: class CSIPToHeader; williamr@2: class CSIPCallIDHeader; williamr@2: class CUri8; 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 dialogs. williamr@2: * It provides services querying dialog state, obtaining the dialog related williamr@2: * SIP headers and getting all dialog associations. williamr@2: * williamr@2: * The user of the class cannot instantiate this class. williamr@2: * @lib sipclient williamr@2: */ williamr@2: williamr@2: class CSIPDialog: public CBase williamr@2: { williamr@2: public: williamr@2: /** Dialog states */ williamr@2: enum TState williamr@2: { williamr@2: /** Initiliazed state */ williamr@2: EInit, williamr@2: /** Early state */ williamr@2: EEarly, williamr@2: /** Confirmed state */ williamr@2: EConfirmed, williamr@2: /** Terminated state */ williamr@2: ETerminated williamr@2: }; williamr@2: williamr@2: public: //New functions williamr@2: /** williamr@2: * Gets dialog state williamr@2: * @return dialog state williamr@2: */ williamr@2: IMPORT_C CSIPDialog::TState State() const; williamr@2: williamr@2: /** williamr@2: * Gets all dialog associations. williamr@2: * @return All dialog associations. Ownership of the array or the items williamr@2: * inside it, is not transferred. williamr@2: */ williamr@2: IMPORT_C const RPointerArray& williamr@2: SIPDialogAssociations() const; williamr@2: williamr@2: /** williamr@2: * Gets used registration context for this dialog williamr@2: * @return associated registration or 0-pointer otherwise. williamr@2: * Ownership is not transferred. williamr@2: */ williamr@2: IMPORT_C const MSIPRegistrationContext* RegistrationContext() const; williamr@2: williamr@2: /** williamr@2: * Checks if the dialog association belongs to this dialog williamr@2: * @param aDialogAssoc a dialog association williamr@2: * @return ETrue if belongs, EFalse otherwise williamr@2: */ williamr@2: IMPORT_C TBool williamr@2: IsAssociated(const CSIPDialogAssocBase& aDialogAssoc) const; williamr@2: williamr@2: /** williamr@2: * Gets the SIP connection used for this dialog williamr@2: * @return SIP connection used for the dialog, or 0-pointer if the williamr@2: * connection has been deleted. Ownership isn't transferred. williamr@2: */ williamr@2: IMPORT_C CSIPConnection* Connection(); williamr@2: williamr@2: /** williamr@2: * Gets the SIP connection used for this dialog. williamr@2: * @return SIP connection used for the dialog, or 0-pointer if the williamr@2: * connection has been deleted. Ownership isn't transferred. williamr@2: */ williamr@2: IMPORT_C const CSIPConnection* Connection() const; williamr@2: williamr@2: /** williamr@2: * Gets originator's address williamr@2: * @return originator's address (From-header) williamr@2: */ williamr@2: IMPORT_C const CSIPFromHeader& FromHeader() const; williamr@2: williamr@2: /** williamr@2: * Gets recipient's address williamr@2: * @return recipient's address (To-header) williamr@2: */ williamr@2: IMPORT_C const CSIPToHeader& ToHeader() const; williamr@2: williamr@2: /** williamr@2: * Gets remote-uri used during dialog creation williamr@2: * @return Remote target uri williamr@2: */ williamr@2: IMPORT_C const CUri8& RemoteURI() const; williamr@2: williamr@2: /** williamr@2: * Gets Call-ID of SIP dialog williamr@2: * @pre State()==CSIPDialog::EEarly || State()==CSIPDialog::EConfirmed williamr@2: * @return Call-ID of SIP dialog williamr@2: * @leave KErrSIPInvalidDialogState if dialog doesn't yet have a Call-ID williamr@2: */ williamr@2: IMPORT_C const CSIPCallIDHeader& CallIdL() const; williamr@2: williamr@2: /** williamr@2: * Compares this object to another object williamr@2: * @param aDialog CSIPDialog object to compare williamr@2: * @returns ETrue if the objects are equal, otherwise EFalse williamr@2: */ williamr@2: IMPORT_C TBool operator==(const CSIPDialog& aDialog) const; williamr@2: williamr@2: /** williamr@2: * Sets the dialog to state to CSIPDialog::EInit. williamr@2: * The local dialog identifier data williamr@2: * (Call-ID, CSeq and From-header's tag) will be reused. williamr@2: * After calling this function, the dialog that was already terminated williamr@2: * can be used for sending the dialog initiating request such as williamr@2: * INVITE or SUBSCRIBE reusing the stored Call-ID and From-header's tag williamr@2: * and the stored CSeq incremented by one. williamr@2: * @pre State()==CSIPDialog::ETerminated williamr@2: * @returns KErrNone if succesful and KErrNoMemory if the memory is low. williamr@2: */ williamr@2: IMPORT_C TInt ReuseInitialRequestData(); williamr@2: williamr@2: public: //Constructors and destructor, for internal use williamr@2: /** williamr@2: * Two-phased constructor. williamr@2: * This constructor should be used if the user has received williamr@2: * SIP request that creates a SIP dialog association. williamr@2: * williamr@2: * @param aConnImplementation Implementation of the used SIP connection williamr@2: * @return New object, ownership is transferred. williamr@2: */ williamr@2: static CSIPDialog* williamr@2: NewL(CSIPConnectionImplementation& aConnImplementation); williamr@2: williamr@2: /** williamr@2: * Two-phased constructor williamr@2: * This constructor should be used if the user has received williamr@2: * SIP request that creates a SIP dialog association. williamr@2: * williamr@2: * @param aConnImplementation Implementation of the used SIP connection williamr@2: * @return New object, ownership is transferred. williamr@2: */ williamr@2: static CSIPDialog* williamr@2: NewLC(CSIPConnectionImplementation& aConnImplementation); williamr@2: williamr@2: /** williamr@2: * Two-phased constructor williamr@2: * This constructor should be used if the user has received williamr@2: * SIP request that creates a SIP dialog association. williamr@2: * williamr@2: * @param aConnImplementation Implementation of the used SIP connection williamr@2: * @param aContext Registration context whose outbound proxy and other williamr@2: * parameters are to be used. williamr@2: * @return New object, ownership is transferred. williamr@2: */ williamr@2: static CSIPDialog* williamr@2: NewL(CSIPConnectionImplementation& aConnImplementation, williamr@2: const MSIPRegistrationContext& aContext); williamr@2: williamr@2: /** williamr@2: * Two-phased constructor williamr@2: * This constructor should be used if the user has received williamr@2: * SIP request that creates a SIP dialog association. williamr@2: * williamr@2: * @param aConnImplementation Implementation of the used SIP connection williamr@2: * @param aContext Registration context whose outbound proxy and other williamr@2: * parameters are to be used. williamr@2: * @return New object, ownership is transferred. williamr@2: */ williamr@2: static CSIPDialog* williamr@2: NewLC(CSIPConnectionImplementation& aConnImplementation, williamr@2: const MSIPRegistrationContext& aContext); williamr@2: williamr@2: /** williamr@2: * Destructor williamr@2: */ williamr@2: ~CSIPDialog(); williamr@2: williamr@2: public: // New functions, for internal use williamr@2: williamr@2: /** williamr@2: * Returns the CSIPDialogImplementation. williamr@2: * @return CSIPDialogImplementation williamr@2: */ williamr@2: CSIPDialogImplementation& Implementation(); williamr@2: williamr@2: private: // Constructors williamr@2: williamr@2: CSIPDialog(); williamr@2: williamr@2: void ConstructL(CSIPConnectionImplementation& aConnImplementation); williamr@2: williamr@2: void ConstructL(CSIPConnectionImplementation& aConnImplementation, williamr@2: const MSIPRegistrationContext& aContext); williamr@2: williamr@2: private: // Data williamr@2: williamr@2: //Implementation instance, CSIPDialog doesn't own it williamr@2: CSIPDialogImplementation* iImplementation; williamr@2: williamr@2: private: // For testing purposes williamr@2: williamr@2: UNIT_TEST(CSIP_Test) williamr@2: UNIT_TEST(CSIPInviteDialogAssoc_Test) williamr@2: UNIT_TEST(CSIPSubscribeDialogAssoc_Test) williamr@2: UNIT_TEST(CSIPReferDialogAssoc_Test) williamr@2: williamr@2: __DECLARE_TEST; williamr@2: }; williamr@2: williamr@2: #endif