1.1 --- a/epoc32/include/siprefresh.h Tue Mar 16 16:12:26 2010 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,250 +0,0 @@
1.4 -/*
1.5 -* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
1.6 -* All rights reserved.
1.7 -* This component and the accompanying materials are made available
1.8 -* 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
1.9 -* which accompanies this distribution, and is available
1.10 -* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
1.11 -*
1.12 -* Initial Contributors:
1.13 -* Nokia Corporation - initial contribution.
1.14 -*
1.15 -* Contributors:
1.16 -*
1.17 -* Description:
1.18 -* Name : siprefresh.h
1.19 -* Part of : SIP Client
1.20 -* Interface : SDK API, SIP Client API
1.21 -* Version : 1.0
1.22 -*
1.23 -*/
1.24 -
1.25 -
1.26 -
1.27 -
1.28 -#ifndef CSIPREFRESH_H
1.29 -#define CSIPREFRESH_H
1.30 -
1.31 -// INCLUDES
1.32 -#include <e32base.h>
1.33 -#include <stringpool.h>
1.34 -#include "_sipcodecdefs.h"
1.35 -
1.36 -// FORWARD DECLARATIONS
1.37 -class CSIPClientTransaction;
1.38 -class CSIPMessageElements;
1.39 -class MSIPRefreshAssociation;
1.40 -
1.41 -// CLASS DECLARATION
1.42 -
1.43 -/**
1.44 -* @publishedAll
1.45 -* @released
1.46 -*
1.47 -* Class for managing SIP refresh.
1.48 -* It provides functions for getting associated sip transaction
1.49 -* and state. Class also provides functions for updating and terminating
1.50 -* stand-alone refreshes.
1.51 -*
1.52 -* Note that only stand-alone refreshes (i.e. refreshes that are not associated
1.53 -* with registration binding or dialog associations) can be terminated or
1.54 -* updated using functions defined in this class.
1.55 -*
1.56 -* @lib sipclient.lib
1.57 -*/
1.58 -class CSIPRefresh: public CBase
1.59 - {
1.60 - public:
1.61 -
1.62 - /** SIP refresh states */
1.63 - enum TState
1.64 - {
1.65 - /** SIP refresh is inactive */
1.66 - EInactive,
1.67 - /** SIP refresh active */
1.68 - EActive,
1.69 - /** SIP refresh is terminated */
1.70 - ETerminated,
1.71 - /** Object is being constructed and is not yet ready for use */
1.72 - EConstructing
1.73 - };
1.74 -
1.75 - public: // Constructors and destructor
1.76 -
1.77 - /**
1.78 - * Two-phased constructor
1.79 - * @return New object. Ownership is transferred.
1.80 - */
1.81 - IMPORT_C static CSIPRefresh* NewL();
1.82 -
1.83 - /**
1.84 - * Two-phased constructor
1.85 - * @return New object. Ownership is transferred.
1.86 - */
1.87 - IMPORT_C static CSIPRefresh* NewLC();
1.88 -
1.89 - /**
1.90 - * Destructor
1.91 - */
1.92 - IMPORT_C ~CSIPRefresh();
1.93 -
1.94 - public: // New functions
1.95 -
1.96 - /**
1.97 - * Gets the state of the refresh
1.98 - * @return refresh state
1.99 - */
1.100 - IMPORT_C CSIPRefresh::TState State() const;
1.101 -
1.102 - /**
1.103 - * Tests if the refresh is a stand-alone refresh
1.104 - * @return ETrue if refresh is a stand-alone; EFalse otherwise
1.105 - */
1.106 - IMPORT_C TBool IsStandAlone() const;
1.107 -
1.108 - /**
1.109 - * Gets the associated SIP transaction with this refresh.
1.110 - *
1.111 - * @return Associated SIP transaction or 0-pointer. Ownership is not
1.112 - * transferred.
1.113 - */
1.114 - IMPORT_C const CSIPClientTransaction* SIPTransaction() const;
1.115 -
1.116 - /**
1.117 - * Terminates the refresh by sending SIP request to the remote
1.118 - * destination. The new client transactation will be of the same type
1.119 - * as the first transaction associated with this request.
1.120 - * @pre State()==EActive
1.121 - * @pre IsStandAlone()==ETrue
1.122 - * @param aElements contains optional SIP message headers and body.
1.123 - * Ownership is transferred.
1.124 - * @return SIP client transaction. Ownership is transferred.
1.125 - * @leave KErrSIPInvalidTransactionState if State() is not EActive
1.126 - * KErrNotFound if the CSIPRefresh is no longer associated to
1.127 - * anything
1.128 - * KSIPErrInvalidRegistrationState if trying to terminate a
1.129 - * REGISTER refresh.
1.130 - * KErrSIPInvalidDialogState if trying to terminate a dialog
1.131 - * association being refreshed.
1.132 - * @capability NetworkServices
1.133 - */
1.134 - IMPORT_C CSIPClientTransaction*
1.135 - TerminateL(CSIPMessageElements* aElements=0);
1.136 -
1.137 - /**
1.138 - * Updates the refresh by sending SIP request to the remote destination.
1.139 - * The new client transactation will be of the same type as the first
1.140 - * transaction associated with this request.
1.141 - * @pre State()==EActive
1.142 - * @pre IsStandAlone()==ETrue
1.143 - * @param aElements contains optional SIP message headers and body.
1.144 - * Ownership is transferred.
1.145 - * @return SIP client transaction. Ownership is transferred.
1.146 - * @leave KErrSIPInvalidTransactionState if State() is not EActive
1.147 - * KErrNotFound if the CSIPRefresh is no longer associated to
1.148 - * anything
1.149 - * KErrSIPInvalidRegistrationState if trying to update a
1.150 - * REGISTER refresh.
1.151 - * KSIPErrInvalidDialogState if trying to update a
1.152 - * dialog association being refreshed.
1.153 - * @capability NetworkServices
1.154 - */
1.155 - IMPORT_C CSIPClientTransaction*
1.156 - UpdateL(CSIPMessageElements* aElements=0);
1.157 -
1.158 - /**
1.159 - * Compares this object to another object
1.160 - * @param aRefresh a CSIPRefresh type object to compare
1.161 - * @return ETrue if the objects are equal otherwise EFalse
1.162 - */
1.163 - IMPORT_C TBool operator==(const CSIPRefresh& aRefresh) const;
1.164 -
1.165 - /**
1.166 - * Gets current refresh interval
1.167 - * @pre State()==CSIPRefresh::EActive
1.168 - * @return current refresh interval in seconds
1.169 - * @leave KErrSIPInvalidTransactionState if State() is not EActive
1.170 - * @leave KErrSIPResourceNotAvailable if SIP server can't be contacted
1.171 - * because a required resource has been deleted.
1.172 - */
1.173 - IMPORT_C TUint IntervalL() const;
1.174 -
1.175 - /**
1.176 - * Sets refresh interval.
1.177 - * Note that SIP server choses the refresh interval. This function should
1.178 - * be used only if SIP server has indicated new refresh interval using
1.179 - * SIP messages that are not associated to the refresh needing the update.
1.180 - * @pre State()==CSIPRefresh::EActive
1.181 - * @pre aInterval > 0
1.182 - * @param aInterval a new interval in seconds
1.183 - * @leave KErrArgument if aInterval == 0
1.184 - * @leave KErrSIPInvalidTransactionState if State() is not EActive
1.185 - * @leave KErrSIPResourceNotAvailable if SIP server can't be contacted
1.186 - * because a required resource has been deleted.
1.187 - */
1.188 - IMPORT_C void SetIntervalL(TUint aInterval);
1.189 -
1.190 - public: // New functions, for internal use
1.191 -
1.192 - TBool DoesMatch(TUint32 aRefreshId) const;
1.193 -
1.194 - /**
1.195 - * Associate the CSIPRefresh with another object.
1.196 - * @param aAssoc Object associated with the CSIPRefresh
1.197 - * @return ETrue if the objects are equal otherwise EFalse
1.198 - */
1.199 - void SetRefreshOwner(MSIPRefreshAssociation& aAssoc);
1.200 -
1.201 - void RemoveRefreshOwner(const MSIPRefreshAssociation& aAssoc);
1.202 -
1.203 - void ChangeState(CSIPRefresh::TState aNextState);
1.204 -
1.205 - void UpdateRefreshState(TUint aStatusCode);
1.206 -
1.207 - TUint32 RefreshId() const;
1.208 -
1.209 - void SetRefreshIdIfEmpty(TUint32 aRefreshId);
1.210 -
1.211 - RStringF RequestType() const;
1.212 -
1.213 - void SetRequestType(RStringF aType);
1.214 -
1.215 - void AddTransaction(CSIPClientTransaction& aTransaction);
1.216 -
1.217 - void RemoveTransaction();
1.218 -
1.219 - CSIPClientTransaction* Transaction();
1.220 -
1.221 - private: // Constructors
1.222 -
1.223 - CSIPRefresh();
1.224 -
1.225 - void ConstructL();
1.226 -
1.227 - private:
1.228 -
1.229 - void CheckStateL() const;
1.230 -
1.231 - private: // Data
1.232 -
1.233 - MSIPRefreshAssociation* iOwner;
1.234 -
1.235 - //Client transaction which is refreshed, not owned by CSIPRefresh.
1.236 - CSIPClientTransaction* iClientTransaction;
1.237 -
1.238 - //Current state of the refresh
1.239 - TState iState;
1.240 -
1.241 - //RefreshId received from SIP client
1.242 - TUint32 iRefreshId;
1.243 -
1.244 - //Identifies the request method which is being refreshed
1.245 - RStringF iRequestType;
1.246 -
1.247 - private: // For testing purposes
1.248 -
1.249 - UNIT_TEST(CSIP_Test)
1.250 - UNIT_TEST(CSIPConnection_Test)
1.251 - };
1.252 -
1.253 -#endif