diff -r 666f914201fb -r 2fe1408b6811 epoc32/include/sipnotifydialogassoc.h --- a/epoc32/include/sipnotifydialogassoc.h Tue Nov 24 13:55:44 2009 +0000 +++ b/epoc32/include/sipnotifydialogassoc.h Tue Mar 16 16:12:26 2010 +0000 @@ -1,1 +1,232 @@ -sipnotifydialogassoc.h +/* +* 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 : sipnotifydialogassoc.h +* Part of : SIP Client +* Interface : SDK API, SIP Client API +* Version : 1.0 +* +*/ + + + + +#ifndef CSIPNOTIFYDIALOGASSOC_H +#define CSIPNOTIFYDIALOGASSOC_H + +// INCLUDES +#include +#include "sipdialogassocbase.h" + +// CONSTANTS + +// FORWARD DECLARATIONS +class CSIPEventHeader; +class CSIPSubscriptionStateHeader; +class MSIPRegistrationContext; + +// CLASS DECLARATION + +/** +* @publishedAll +* @released +* +* Class for managing SIP NOTIFY dialog associations. +* It provides services for creating, using and +* terminating SIP NOTIFY dialog associations. The user can have multiple +* NOTIFY dialog associations per same SIP dialog. +* Implementation handles SUBSCRIBE on the dialog level defined by Call-Id, +* local and remote tags; user is responsible for "Event" and +* "Subscription-State" header semantics. +* @lib sipclient.lib +*/ +class CSIPNotifyDialogAssoc: public CSIPDialogAssocBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * The response to the received SIP request will create a SIP NOTIFY + * dialog association that will be correlated with the SIP dialog in + * which SIP server transaction was received. If the server transaction + * was not received within a SIP dialog, a new SIP dialog is created. + * The server transaction must be either SUBSCRIBE or REFER transaction. + * @pre aTransaction.State()==ETrying || EProceeding + * @pre aTransaction.Type() == + * SipStrConsts::ESubscribe || SipStrConsts::ERefer + * @pre aEvent != 0 && aState != 0 + * @param aTransaction a SIP server transaction + * @param aEvent an event to send a notification about; the ownership + * is transferred. + * @param aState a subscription state; the ownership is transferred. + * @return New object; the ownership is transferred + * @leave KErrArgument if aTransaction is not a SUBSCRIBE or REFER + * transaction, or aEvent == 0 or aState == 0. + * @leave KErrSIPInvalidTransactionState if aTransaction is in a wrong + * state + */ + IMPORT_C static CSIPNotifyDialogAssoc* + NewL(CSIPServerTransaction& aTransaction, + CSIPEventHeader* aEvent, + CSIPSubscriptionStateHeader* aState); + + /** + * Two-phased constructor. + * The response to the received SIP request will create a SIP NOTIFY + * dialog association that will be correlated with the SIP dialog in + * which SIP server transaction was received. If the server transaction + * was not received within a SIP dialog, a new SIP dialog is created. + * The server transaction must be either SUBSCRIBE or REFER transaction. + * @pre aTransaction.State()==ETrying || EProceeding + * @pre aTransaction.Type() == + * SipStrConsts::ESubscribe || SipStrConsts::ERefer + * @pre aEvent != 0 && aState != 0 + * @param aTransaction a SIP server transaction + * @param aEvent an event to send a notification about; the ownership + * is transferred. + * @param aState a subscription state; the ownership is transferred. + * @return New object; the ownership is transferred + * @leave KErrArgument if aTransaction is not a SUBSCRIBE or REFER + * transaction, or aEvent == 0 or aState == 0. + * @leave KErrSIPInvalidTransactionState if aTransaction is in a wrong + * state + */ + IMPORT_C static CSIPNotifyDialogAssoc* + NewLC(CSIPServerTransaction& aTransaction, + CSIPEventHeader* aEvent, + CSIPSubscriptionStateHeader* aState); + + /** + * Two-phased constructor. + * The response to the received SIP request will create a SIP NOTIFY + * dialog association that will be correlated with the SIP dialog in + * which SIP server transaction was received. If the server transaction + * was not received within a SIP dialog, a new SIP dialog is created. + * The server transaction must be either SUBSCRIBE or REFER transaction. + * @pre aTransaction.State()==ETrying || EProceeding + * @pre aTransaction.Type() == + * SipStrConsts::ESubscribe || SipStrConsts::ERefer + * @pre aContext.IsContextActive() == ETrue + * @pre aEvent != 0 && aState != 0 + * @param aTransaction a SIP server transaction + * @param aContext that will be used for populating + * the Contact-header of the response to aTransaction + * @param aEvent an event to send a notification about; the ownership + * is transferred. + * @param aState a subscription state; the ownership is transferred. + * @return New object; the ownership is transferred + * @leave KErrArgument if aTransaction is not a SUBSCRIBE or REFER + * transaction, or aEvent == 0 or aState == 0. + * @leave KErrSIPInvalidTransactionState if aTransaction is in a wrong + * state + */ + IMPORT_C static CSIPNotifyDialogAssoc* + NewL(CSIPServerTransaction& aTransaction, + const MSIPRegistrationContext& aContext, + CSIPEventHeader* aEvent, + CSIPSubscriptionStateHeader* aState); + + /** + * Two-phased constructor. + * The response to the received SIP request will create a SIP NOTIFY + * dialog association that will be correlated with the SIP dialog in + * which SIP server transaction was received. If the server transaction + * was not received within a SIP dialog, a new SIP dialog is created. + * The server transaction must be either SUBSCRIBE or REFER transaction. + * @pre aTransaction.State()==ETrying || EProceeding + * @pre aTransaction.Type() == + * SipStrConsts::ESubscribe || SipStrConsts::ERefer + * @pre aContext.IsContextActive() == ETrue + * @pre aEvent != 0 && aState != 0 + * @param aTransaction a SIP server transaction + * @param aContext that will be used for populating + * the Contact-header of the response to aTransaction + * @param aEvent an event to send a notification about; the ownership + * is transferred. + * @param aState a subscription state; the ownership is transferred. + * @return New object; the ownership is transferred + * @leave KErrArgument if aTransaction is not a SUBSCRIBE or REFER + * transaction, or aEvent == 0 or aState == 0. + * @leave KErrSIPInvalidTransactionState if aTransaction is in a wrong + * state + */ + IMPORT_C static CSIPNotifyDialogAssoc* + NewLC(CSIPServerTransaction& aTransaction, + const MSIPRegistrationContext& aContext, + CSIPEventHeader* aEvent, + CSIPSubscriptionStateHeader* aState); + + /** + * Destructor + */ + IMPORT_C ~CSIPNotifyDialogAssoc(); + + public: // New functions + + /** + * Creates NOTIFY and sends it to the remote target. + * If client provides optional SIP headers they must + * not contain Event and Subscription-State headers. + * @pre Dialog().Connection().State()==EActive + * @pre Dialog().State()==CSIPDialog::TState::EConfirmed + * @param aElements optional SIP message headers and body. + * Ownership is transferred. + * @return NOTIFY SIP UAC transaction + * @leave KErrSIPInvalidDialogState if dialog's state is incorrect + * @leave KErrSIPResourceNotAvailable if a required SIP Client API + * object has been deleted. + * @capability NetworkServices + */ + IMPORT_C CSIPClientTransaction* + SendNotifyL(CSIPMessageElements* aElements=0); + + /** + * Gets an event about which the notification is done + * @return an event + */ + IMPORT_C const CSIPEventHeader& Event() const; + + /** + * Gets subscription state + * @return subscription state + */ + IMPORT_C CSIPSubscriptionStateHeader& SubscriptionState(); + + /** + * Gets subscription state + * @return subscription state + */ + IMPORT_C const CSIPSubscriptionStateHeader& SubscriptionState() const; + + public: // New functions, for internal use + + CSIPClientTransaction* + DoSendNotifyWithinDialogL(CSIPMessageElements* aElements); + + private: // Constructors + + CSIPNotifyDialogAssoc(); + + void ConstructL(CSIPServerTransaction& aTransaction, + const MSIPRegistrationContext* aContext, + CSIPEventHeader* aEvent, + CSIPSubscriptionStateHeader* aState); + + private: // Data + + CSIPEventHeader* iEvent; + CSIPSubscriptionStateHeader* iSubscriptionState; + }; + +#endif