diff -r 2fe1408b6811 -r e1b950c65cb4 epoc32/include/mw/sipregistrationbinding.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/epoc32/include/mw/sipregistrationbinding.h Wed Mar 31 12:27:01 2010 +0100 @@ -0,0 +1,336 @@ +/* +* Copyright (c) 2006-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 : sipregistrationbinding.h +* Part of : SIP Client +* Interface : SDK API, SIP Client API +* Version : 1.0 +* +*/ + + + +#ifndef CSIPREGISTRATIONBINDING_H +#define CSIPREGISTRATIONBINDING_H + +// INCLUDES +#include "sipregistrationcontext.h" +#include "_sipcodecdefs.h" + +// FORWARD DECLARATIONS +class CUri8; +class CSIPToHeader; +class CSIPFromHeader; +class CSIPContactHeader; +class CSIPRouteHeader; +class CSIPMessageElements; +class CSIPConnection; +class CSIPRefresh; +class CSIPClientTransaction; +class CRegBindingImplementation; + +// CLASS DECLARATION + +/** +* @publishedAll +* @released +* +* Class for managing SIP registration binding. +* Class provides functions for creating and updating SIP registration bindings. +* +* @lib sipclient.lib +*/ +class CSIPRegistrationBinding : + public CBase, + public MSIPRegistrationContext + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @pre aAor != 0 && + * aContact != 0 + * @pre "Expires" parameter in aContact must be >= KSIPMinExpirationValue + * @param aConnection a SIP connection to be used + * @param aAor contains user's address-of-record to register; + * the ownership is transfered + * @param aContact contact(s) to be registered. The "expires" parameter + * indicates how long the client would like the binding to be + * valid. + * "expires" parameter value must be >= KSIPMinExpirationValue; + * the ownership is transfered + * @param aRefresh if set, created binding will be refreshed; + * the ownership is transfered + * @param aOutboundProxy an outbound proxy address; + * the ownership is transfered + * @param aRemoteUri if set, will be used in request-uri construction; + * the ownership is transfered + * @param aFrom From header, the ownership is transferred + * @return New object, ownership is transferred. + * @leave KErrArgument if aAor == 0, aContact == 0 or if "Expires" + * parameter in aContact is less than KSIPMinExpirationValue + */ + IMPORT_C static CSIPRegistrationBinding* + NewL(CSIPConnection& aConnection, + CSIPToHeader* aAor, + CSIPContactHeader* aContact, + CSIPRefresh* aRefresh=0, + CSIPRouteHeader* aOutboundProxy=0, + CUri8* aRemoteUri=0, + CSIPFromHeader* aFrom=0); + + /** + * Two-phased constructor. + * @pre aAor != 0 && + * aContact != 0 + * @pre "Expires" parameter in aContact must be >= KSIPMinExpirationValue + * @param aConnection a SIP connection to be used + * @param aAor contains user's address-of-record to register; + * the ownership is transfered + * @param aContact contact to be registered; The "expires" parameter + * indicates how long the client would like the binding to be + * valid. + * "expires" parameter value must be >= KSIPMinExpirationValue; + * the ownership is transfered + * @param aRefresh if set, created binding will be refreshed; + * the ownership is transfered + * @param aOutboundProxy an outbound proxy address; + * the ownership is transfered + * @param aRemoteUri if set, will be used in request-uri construction; + * the ownership is transfered + * @param aFrom From header, the ownership is transferred + * @return New object, ownership is transferred. + * @leave KErrArgument if aAor == 0, aContact == 0 or if "Expires" + * parameter in aContact is less than KSIPMinExpirationValue + */ + IMPORT_C static CSIPRegistrationBinding* + NewLC(CSIPConnection& aConnection, + CSIPToHeader* aAor, + CSIPContactHeader* aContact, + CSIPRefresh* aRefresh=0, + CSIPRouteHeader* aOutboundProxy=0, + CUri8* aRemoteUri=0, + CSIPFromHeader* aFrom=0); + + /** + * Destructor + */ + IMPORT_C ~CSIPRegistrationBinding(); + + public: //From MSIPRegistrationContext: + + /** + * Checks if the registration context can be + * used for creating SIP messages/dialogs + * @return ETrue if the registration binding exists; EFalse + * otherwise + */ + IMPORT_C TBool IsContextActive() const; + + /** + * Gets the context id + * @return context id + * For internal use only + */ + IMPORT_C TUint32 ContextId() const; + + public: // New functions + /** + * Creates SIP REGISTER request, sends it to the given destination. + * Received 2xx response will create at least one registration + * binding. + * @pre Connection().State()==EActive + * @param aElements contains user SIP headers and content; the ownership + * is taken + * @return SIP REGISTER transaction; the ownership is transfered + * @leave KErrSIPMalformedMessage if aElements contains contact or + * expires headers + * @leave KErrSIPInvalidRegistrationState if already registered or + * registering is in progress or deregistering is in progress. + * @capability NetworkServices + */ + IMPORT_C CSIPClientTransaction* + RegisterL(CSIPMessageElements* aElements=0); + + /** + * Creates SIP (de)REGISTER request, sends it to the given destination. + * This function will remove registration binding. + * Any SIP response (2xx - 6xx) to this request removes the binding. + * Note that deregistration can be done then the 2xx is received to the + * initial REGISTER transaction and there is no on-going registration + * updates. + * @pre Connection().State()==EActive + * @pre IsContextActive()==ETrue + * @param aElements contains user SIP headers and content; the ownership + * is transfered. If set, user SIP headers must not contain any + * Contact-header nor Expires-header + * @return SIP REGISTER transaction; the ownership is transfered + * @leave KErrSIPInvalidRegistrationState if IsContextActive()==EFalse + * @capability NetworkServices + */ + IMPORT_C CSIPClientTransaction* + DeregisterL(CSIPMessageElements* aElements=0); + + /** + * Updates the registration binding. Note that update can be done + * then the 2xx is received to the REGISTER transaction that relates + * to the initial registration or to update. + * @pre aElements!=0 + * @pre Connection().State()==EActive + * @pre IsContextActive()==ETrue + * @param aElements contains user SIP header and content, must not + * contain any Contact-header nor Expires-header; + * the ownership is transferred. + * @return SIP REGISTER transaction; the ownership is transfered + * @leave KErrArgument if aElements == NULL + * @leave KErrSIPInvalidRegistrationState if IsContextActive()==EFalse + * @capability NetworkServices + */ + IMPORT_C CSIPClientTransaction* UpdateL(CSIPMessageElements* aElements); + + /** + * Updates the regisration binding. Note that update can be done + * then the 2xx is received to the REGISTER transaction that relates + * to the initial registration or to update. + * @pre aExpirationValue >= KSIPMinExpirationValue + * @pre Connection().State()==EActive + * @pre IsContextActive()==ETrue + * @param aExpirationValue a new expiration value in seconds + * @param aElements contains user SIP headers and content; must not + * contain any Contact-header nor Expires-header; + * the ownership is transferred. + * @return SIP REGISTER transaction; the ownership is transfered + * @leave KErrSIPInvalidRegistrationState if IsContextActive()==EFalse + * @capability NetworkServices + */ + IMPORT_C CSIPClientTransaction* + UpdateL(TUint aExpirationValue, CSIPMessageElements* aElements=0); + + /** + * Gets the SIP connection used for the registration. + * @return SIP connection used for the registration, or 0-pointer if the + * connection has been deleted. Ownership is not transferred. + */ + IMPORT_C CSIPConnection* Connection(); + + /** + * Gets the SIP connection used for the registration. + * @return SIP connection used for the registration, or 0-pointer if the + * connection has been deleted. Ownership is not transferred. + */ + IMPORT_C const CSIPConnection* Connection() const; + + /** + * Sets/resets outbound proxy. + * If a 0-pointer is given the outbound proxy will be reset. + * @param aOutboundProxy an outbound proxy. Ownership is transferred. + * @leave KErrSIPResourceNotAvailable if a required SIP Client API + * object has been deleted + */ + IMPORT_C void SetOutboundProxyL(CSIPRouteHeader* aOutboundProxy); + + /** + * Gets the address-of-record (AOR) used for creating binding + * @return address-of-record (AOR) + */ + IMPORT_C const CSIPToHeader& Aor() const; + + /** + * Gets Contact header associated with the registration binding + * @return Contact header + */ + IMPORT_C const CSIPContactHeader& ContactHeader() const; + + /** + * Gets Contact header associated with the registration binding + * @return Contact header + */ + IMPORT_C CSIPContactHeader& ContactHeader(); + + /** + * Gets used outbound proxy + * @return outbound proxy or a 0-pointer if not set. Ownership is not + * transferred. + */ + IMPORT_C const CSIPRouteHeader* OutboundProxy() const; + + /** + * Gets associated refresh in case the user has requested the refresh of + * the registration. Note that client cannot use update or terminate + * functions defined in the CSIPRefresh class. + * @return Associated refresh or a 0-pointer if the user has not + * requested a refresh of registration binding. Ownership is not + * transferred. + */ + IMPORT_C const CSIPRefresh* SIPRefresh() const; + + /** + * Gets associated refresh in case the user has requested the refresh of + * the registration. Note that client cannot use update or terminate + * functions defined in the CSIPRefresh class. + * @return Associated refresh or a 0-pointer if the user has not + * requested a refresh of registration binding. Ownership is not + * transferred. + */ + IMPORT_C CSIPRefresh* SIPRefresh(); + + /** + * Compares this object to another object + * @param aRegistration CSIPRegistrationBinding object to compare + * @return ETrue if the objects are equal, otherwise EFalse + */ + IMPORT_C TBool + operator==(const CSIPRegistrationBinding& aRegistration) const; + + /** + * Gets the registered Contact-header received in the 200 OK response. + * @return Contact header, or NULL if IsContextActive() is EFalse. + * Ownership is not transferred. + */ + IMPORT_C const CSIPContactHeader* RegisteredContact() const; + + public: // New functions, for internal use + /** + * Returns the implementation instance. + * + * @return CRegBindingImplementation + */ + CRegBindingImplementation& Implementation(); + + private: // Constructors + CSIPRegistrationBinding(); + + void ConstructL(CSIPConnection& aConnection, + CSIPToHeader* aAor, + CSIPContactHeader* aContacts, + CSIPRefresh* aRefresh, + CSIPRouteHeader* aOutboundProxy, + CUri8* aRemoteUri, + CSIPFromHeader* aFrom); + + private: // Data + CRegBindingImplementation* iImplementation; + + private: // For testing purposes + + UNIT_TEST(CSIP_Test) + UNIT_TEST(CSIPRegistrationBinding_Test) + UNIT_TEST(CSIPInviteDialogAssoc_Test) + UNIT_TEST(CSIPSubscribeDialogAssoc_Test) + UNIT_TEST(CSIPReferDialogAssoc_Test) + + __DECLARE_TEST; + }; + +#endif