diff -r 000000000000 -r c8caa15ef882 simpleengine/siputils/inc/simplerequest.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/simpleengine/siputils/inc/simplerequest.h Tue Feb 02 01:05:17 2010 +0200 @@ -0,0 +1,692 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: SIMPLE engine request +* +*/ + + + + +#ifndef CSimpleRequest_H +#define CSimpleRequest_H + + +// INCLUDES +#include +#include "simplecommon.h" +#include "simplesipconncallback.h" +#include "simplecommon.h" +#include "msimpleenginerequest.h" +#include "simplerefreshtimer.h" + +// FORWARD DECLARATIONS +class CSimpleSipProfileObserver; +class CSIPClientTransaction; +class CSIPSubscribeDialogAssoc; +class CSimpleRefreshTimer; +class CSIPRefresh; + +// CLASS DECLARATION + +/** + * Client request buffer element + * + * @lib siputils + * @since S60 3.2 + */ +class CSimpleRequest : public CBase +{ +public: + +/** request type */ +enum TSimpleSipReqType + { + EReqRegister=1, + EReqPublish, + EReqSubscribe, + EReqSubscribeList, + EReqSubscribeWinfo, + EReqListenEvents, + EReqSendIM, + EReqReceiveIM + }; + +/** request state */ +enum TSimpleReqState + { + ESimpleInit=1, + ESimplePendingInit, + ESimpleRunningInit, + ESimpleActive, + ESimpleComplete, + ESimpleFailed, + ESimpleStopping, + ESimplePending, + ESimpleReTry, + ESimpleRunning, + ESimpleActiveSubs, + ESimpleDialogReCre, + ESimpleDeleting + }; + +/** pending state substate */ +enum TSimplePendingSubState + { + ENoPending=0, + EPendingModify, + EPendingRefresh, + EPendingModifyAndRefresh + }; + + + /** + * Contructor + * @param aEngine engine api callback implementation + * @param aReq client request + * @param aType request type + * @param aExpires SIP expiry time of the request + */ + static CSimpleRequest* NewL( + MSimpleSipConnCallback& aEngine, + MSimpleEngineRequest& aReq, + TSimpleSipReqType aType, + TUint aExpires ); + + /** + * Destructor + */ + void Destroy(); + + /** + * Destructor + */ + void DestroyStart(); + + inline static TInt LinkOffset(); + + /** + * Client request accessor + * + * @since S60 3.2 + * @return client request + */ + MSimpleEngineRequest& Request(); + + /** + * Client SIP transaction accessor + * + * @since S60 3.2 + * @return SIP transaction, may be NULL. + */ + CSIPClientTransaction* Transaction(); + + /** + * Client SIP transaction setter + * + * @since S60 3.2 + * @param aTrans SIP transaction + */ + void SetTransaction( CSIPClientTransaction* aTrans ); + + /** + * CSIPRefresh entity accessor + * + * @since S60 3.2 + * @return CSIPRefresh entity + */ + CSIPRefresh* Refresh(); + + /** + * If the request matches with the transaction + * + * @since S60 3.2 + * @param aTrans transaction + * @return ETrue if matches + */ + TBool Match( CSIPClientTransaction& aTrans ); + + /** + * If the request matches with the transaction + * + * @since S60 3.2 + * @param aType transaction type + * @return ETrue if matches + */ + TBool Match( TSimpleSipReqType aType ) const; + + /** + * If the request matches with the transaction + * + * @since S60 3.2 + * @param aDialog dialog + * @return ETrue if matches + */ + TBool Match( const CSIPDialog& aDialog ) const; + + /** + * If the request matches with client request + * + * @since S60 3.2 + * @param aReq client request + * @return ETrue if matches + */ + TBool Match( MSimpleEngineRequest& aReq ) const; + + /** + * Complete the pending request + * + * @since S60 3.2 + * @param aStatus response status + */ + void Complete( TInt aStatus ); + + /** + * Complete event request + * + * @since S60 3.2 + */ + void CompleteEvent( ); + + /** + * Set refresh time for the SIP request + * + * @since S60 3.2 + * @param aTime time in seconds + */ + void SetRefreshTime( TUint aTime ); + + /** + * Refresh time accessor + * + * @since S60 3.2 + * @return refresh time in seconds + */ + TUint RefreshTime () const; + + /** + * Start refresh timer for this request based + * on iRefreshTime. + * + * @since S60 3.2 + * @param aTime special time, if iRefreshTime not used + */ + void StartRefreshTimer( TUint aTime = 0 ); + + /** + * Stop refresh timer + * + * @since S60 3.2 + */ + void StopRefreshTimer(); + + /** + * Start expiry timer for this request + * + * @since S60 3.2 + * @param aTime time + */ + void StartExpiryTimer( TUint aTime ); + + /** + * Stop expiry timer + * + * @since S60 3.2 + */ + void StopExpiryTimer(); + + /** + * Counts retry time period + * + * @since S60 3.2 + * @return time + */ + TUint RetryTime(); + + /** + * Counts retry expiry time period + * + * @since S60 3.2 + * @return time + */ + TInt RetryExpiryTime(); + + /** + * Set SIP-ETag value + * + * @since S60 3.2 + * @param aTag tag, OWNERSHIP IS TRANSFERRED. + */ + void SetETag( HBufC8* aTag ); + + /** + * get SIP-ETag value + * + * @since S60 3.2 + * @return SIP-ETag value. + */ + TPtrC8 ETag() const; + + /** + * Status getter + * + * @since S60 3.2 + * @return status + */ + TUint Status() const; + + /** + * Status setter + * + * @since S60 3.2 + * @param aVal status value + */ + void SetStatus( TUint aVal ); + + /** + * Dialog setter + * + * @since S60 3.2 + * @param aDialog dialog + */ + void SetDialog( CSIPSubscribeDialogAssoc* aDialog ); + + /** + * Dialog getter + * + * @since S60 3.2 + * @return dialog + */ + CSIPSubscribeDialogAssoc* Dialog( ); + + /** + * State accessor + * + * @since S60 3.2 + * @return state + */ + TSimpleReqState ReqState() const; + + /** + * State setter + * + * @since S60 3.2 + * @param aState state + */ + void SetReqState( TSimpleReqState aState ); + + /** + * SOURCE-THROTTLE-PUBLISH time setter + * @param expiry time in seconds + */ + void SetThrottleTime( TUint aSeconds ); + + /** + * SOURCE-THROTTLE-PUBLISH time getter + * + * @since S60 3.2 + * @return expiry time + */ + TTime ThrottleTime( ); + + /** + * Retry-After SIP header parameter value accessor + * + * @since S60 3.2 + * @return Retry-After SIP header parameter, 0 if not present + */ + TUint RetryAfter(); + + /** + * Retry-After SIP header parameter value setter + * + * @since S60 3.2 + * @param aVal Retry-After SIP header parameter, 0 if not present + */ + void SetRetryAfter( TUint aVal ); + + /** + * Original error reason setter + * + * @since S60 3.2 + * @param aVal error code + */ + void SetReason( TInt aVal ); + + /** + * Original error reason getter + * + * @since S60 3.2 + * @param aVal error code + */ + TInt Reason( ); + + /** + * Error notify counter increse + * + * @since S60 3.2 + */ + void PlusErrCount( ); + + /** + * Error notify reset + * + * @since S60 3.2 + */ + void ResetErrCount( ); + + /** + * Error notify getter + * + * @since S60 3.2 + */ + TInt ErrCount( ); + + /** + * Pending accessor + * + * @since S60 3.2 + * return pending substate + */ + TSimplePendingSubState PendingState(); + + /** + * Pending state setter + * + * @since S60 3.2 + * @param aVal state + */ + void SetPendingState( TSimplePendingSubState aVal ); + + /** + * Add new Pending state to the current state + * + * @since S60 3.2 + * @param aVal state + */ + void AddPendingState( TSimplePendingSubState aVal ); + + /** + * Access iData + * + * @since S60 3.2 + * @return data + */ + TPtrC8 Data() const; + + /** + * Set iData + * + * @since S60 3.2 + * @param aData data + */ + void SetDataL( const TDesC8& aData ); + + /** + * Access iRecipientId + * + * @since S60 5.0 + * @return recipient ID + */ + TPtrC8 RecipientL() const; + + /** + * Set iRecipientId + * + * @since S60 5.0 + * @param aRecipientId recipient ID + */ + void SetRecipientL( const TDesC8& aRecipientId ); + + /** + * Accesor for iGivenETag + * + * @since S60 3.2 + * @return true if given ETag + */ + TBool GivenETag() const; + + /** + * Setter for iGivenETag + * + * @since S60 3.2 + * @param aVal true if given ETag + */ + void SetGivenETag( TBool aVal ); + + /** + * Accesor for request MIME content type + * + * @since S60 3.2 + * @return content type + */ + TPtrC8 RequestContentType(); + + /** + * Setter for request MIME content type + * + * @since S60 3.2 + * @param aData content type + */ + + void SetRequestContentTypeL( const TDesC8& aData ); + + /** + * Get SIP Subscription-State. + * @return Subscription-State + */ + MSimpleEngineRequest::TSimpleSipSubscriptionState SipSubscriptionState(); + + +private: + + /** + * contructor + */ + CSimpleRequest( MSimpleSipConnCallback& aEngine, + MSimpleEngineRequest& aReq, + TSimpleSipReqType aType, + TUint aExpires ); + + /** + * contructor + */ + void ConstructL(); + + /** + * Keep destructor private since it's easier to + * find Destroy() methods in the code when + * debugging. + * + * @since S60 3.2 + */ + virtual ~CSimpleRequest(); + + /** + * Handle state machine of subscription + * + * @since S60 3.2 + * @param aStatus status + */ + void DoCompleteSubscription( TInt aStatus ); + + /** + * Handle notification of subscription and update state machine if terminated. + * + * @since S60 3.2 + * @param aStatus status + */ + void DoCompleteNotification( TInt aStatus ); + + /** + * Handle state machine of publication + * + * @since S60 3.2 + * @param aStatus status + */ + void DoCompletePublication( TInt aStatus ); + + +private: // data + + TDblQueLink iLink; + + /** + * Client callback observer + */ + MSimpleSipConnCallback& iEngine; + + /** + * Client request + */ + MSimpleEngineRequest& iReq; + + /** + * SIP client transaction + * Own, + */ + CSIPClientTransaction* iTrans; + + /** + * SIP refresher + * Own. + */ + CSIPRefresh* iSipRefresh; + + /** + * Request type + */ + TSimpleSipReqType iType; + + /** + * Current Refresh period + */ + TUint iRefreshTime; + + /** + * Request expiry time in IF + */ + TUint iExpirationTime; + + /** + * Refresh timer. + * Own. + */ + CSimpleRefreshTimer* iRefreshTimer; + + /** + * Refresh timer. + * Own. + */ + CSimpleExpiryTimer* iExpiryTimer; + + /** + * ETag. + * Own. + */ + HBufC8* iETag; + + /** + * Subscribe dialog + * Own. + */ + CSIPSubscribeDialogAssoc* iDialog; + + /** + * SIP status (response) + */ + TUint iStatus; + + /** + * Current request state + */ + TSimpleReqState iState; + + /** + * The expiry time of SOURCE-THROTTLE-PUBLISH + */ + TTime iThrottleTime; + + /** + * SIP header retry-after parameter + */ + TUint iRetryAfter; + + /** + * Reason code + */ + TInt iReason; + + /** + * Error notify counter + */ + TInt iErrNotify; + + /** + * Expires + */ + TUint iExpires; + + /** + * Pending request state + */ + TSimplePendingSubState iPendingState; + + /** + * Request data + * Own. + */ + HBufC8* iData; + + /** + * IM message recipient ID + * Own. + */ + HBufC8* iRecipientId; + + /** + * Request Content type + * Own. + */ + HBufC8* iRequestContentType; + + /** + * If publish stoppig uses given ETag + */ + TBool iGivenETag; + + /** + * SIP Subscription-State + */ + MSimpleEngineRequest::TSimpleSipSubscriptionState iSubscriptionState; + + /** + * response counter for subscription stop (unsubscribe) + */ + TInt iRespCount; + +#ifdef _DEBUG + friend class T_CSimpleRequest; + friend class T_CSimpleSipConnectionObserver; + friend class CSimpleSipConnCallbackStub; +#endif +}; + + TInt CSimpleRequest::LinkOffset() + { + return _FOFF(CSimpleRequest, iLink); + } + +#endif + +// End of File