diff -r 65a3ef1d5bd0 -r f742655b05bf sipvoipprovider/svptransfer/inc/svptransferstatecontext.h --- a/sipvoipprovider/svptransfer/inc/svptransferstatecontext.h Thu Aug 19 09:45:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,566 +0,0 @@ -/* -* 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: Transfer state context class for state machine logic -* -*/ - - -#ifndef SVPTRANSFERSTATECONTEXT_H -#define SVPTRANSFERSTATECONTEXT_H - -#include -#include // CDesC8ArrayFlat -#include "svputdefs.h" - -class CSVPController; -class CSVPSessionBase; -class CSVPTransferStateBase; // iCurrentState -class MSVPTransferObserver; // iTransferObserver -class CMceSession; -class TMceTransactionDataContainer; // iContainer -class CMceRefer; // iMceRefer -class CMceEvent; // iMceEvent - -typedef TInt TSVPTransferStateIndex; - -const TInt KSVPTransferStateArraySize = 5; -const TInt KSVPHeaderArrayGranularity = 2; - -// State indices. -const TSVPTransferStateIndex KSVPTransferIdleStateIndex = 0; -const TSVPTransferStateIndex KSVPTransferPendingStateIndex = 1; -const TSVPTransferStateIndex KSVPTransferAcceptedStateIndex = 2; -const TSVPTransferStateIndex KSVPTransferTerminatingStateIndex = 3; -const TSVPTransferStateIndex KSVPTransferTerminatedStateIndex = 4; - -// Error codes -const TInt KSVPErrTransferErrorBase = -2300; -const TInt KSVPErrTransferStateError = KSVPErrTransferErrorBase - 1; -const TInt KSVPErrTransferInProgress = KSVPErrTransferErrorBase - 2; -const TInt KSVPErrTransferReferCreate = KSVPErrTransferErrorBase - 3; -const TInt KSVPErrTransferApplyState = KSVPErrTransferErrorBase - 4; -const TInt KSVPErrTransferReferStatusCodeNotHandled = - KSVPErrTransferErrorBase - 5; -const TInt KSVPErrTransferParamRefer = KSVPErrTransferErrorBase - 6; -const TInt KSVPErrTransferReferTo = KSVPErrTransferErrorBase - 7; - - - -/** - * Transfer state contexts. - * - * - * @lib svp.dll - * @since S60 3.2 - */ -class CSVPTransferStateContext : public CBase - { - -public: - - /** - * Two-phased constructor. - */ - static CSVPTransferStateContext* NewL( - CMceSession* aMceSession, - CSVPSessionBase* aSVPSession, - TMceTransactionDataContainer& aContainer, - MSVPTransferObserver& aObserver ); - - /** - * Destructor. - */ - virtual ~CSVPTransferStateContext(); - - /** - * Sets the current state for the context. - * @since S60 3.2 - * @param aNewState New current state - * @return Leaves with Error code if state transition is not - * acceptable. - */ - void SetCurrentStateL( TSVPTransferStateIndex aNewState ); - - /** - * Returns the current state of the context - * @since S60 3.2 - * @return TSVPTransferStateIndex Index to the current state. - */ - TSVPTransferStateIndex CurrentState() const; - - /** - * Applies the current state of the contex. This causes a - * state transition to next state of the state machine. The - * current state sets the next state. Leaves on error - * @since S60 3.2 - */ - void ApplyCurrentStateL(); - - /** - * Returns reference to the transfer observer. - * @since S60 3.2 - * @return Reference to the transfer observer - */ - MSVPTransferObserver& TransferObserver(); - - /** - * Sets the reference to the sip (mce) session object - * @param aSession The session object - * @return None - */ - void SetMceSessionObject( CMceSession* aSession ); - - /** - * Returns the sip (mce) session object. - * @since S60 3.2 - * @return The sip (mce) session object - */ - CMceSession* MceSessionObject(); - - /** - * Sets the MCE refer object. - * @since Series 60 3.2 - * @param aRefer New received refer - */ - void SetMceRefer( CMceRefer* aRefer ); - - /** - * Returns pointer to the MCE refer object. - * @since S60 3.2 - * @return Pointer to the MCE refer object - */ - CMceRefer* MceRefer(); - - /** - * Check if attended or unattended transfer. - * @since S60 3.2 - * @return Boolean true (=attended) or false - */ - TBool IsAttended(); - - /** - * Check if session is on remote hold. If yes, this is Snom or EyeBeam - * as unattended transferer case and we send OK notify - * to proceed unattended transfer. - * @since S60 3.2 - * @return TBool true if session is remote hold - */ - TBool CheckIsSessionRemoteHold(); - - /** - * Set transfer data. Add Replaces and Referred-By headers. - * Update transfer target url to sips: if secure status 1 or 2, - * otherwise url updated to sip: - * @since S60 3.2 - * @param aUserAgentHeaders On completion contains collected transfer headers. - * @param aSecureStatus secure status - */ - void SetTransferDataL( CDesC8Array* aUserAgentHeaders, TInt aSecureStatus ); - - /** - * Set attended/unattended. - * @since S60 3.2 - * @param aAttended boolean true (=attended) or false - */ - void SetAttended( const TBool aAttended ); - - /** - * Check if incoming transfer. - * @since S60 3.2 - * @return Boolean true (=incoming) or false - */ - TBool IsIncoming(); - - /** - * Set incoming "refer to" -string. - * @since S60 3.2 - * @param aReferTo Reference to the string - */ - void SetIncomingReferToL( const TDesC8& aReferTo ); - - /** - * Sets the Referred-By data - * @since S60 3.2 - * @param aReferredBy reference to the Referred-By data to store - */ - void SetIncomingReferredByL( const TDesC8& aReferredBy ); - - /** - * Return incoming "Referred By" -string. - * @since S60 3.2 - * @return Reference to the string - */ - const TDesC& IncomingReferredBy(); - - /** - * Return incoming "refer to" -string. - * @since S60 3.2 - * @return Reference to the string - */ - const TDesC& IncomingReferTo(); - - /** - * Reset/clear incoming "refer to" -string. - * @since S60 3.2 - */ - void ResetIncomingReferTo(); - - /** - * Reset/clear incoming "Referred-By" -string. - * @since S60 3.2 - */ - void ResetIncomingReferredBy(); - - /** - * Set incoming "Replaces" -string. - * @since S60 3.2 - * @param aString Reference to the string - */ - void SetIncomingReplacesL( const TDesC8& aString ); - - /** - * Return incoming "Replaces" -string. - * @since S60 3.2 - * @return Reference to the string - */ - const TDesC& IncomingReplaces(); - - /** - * Reset/clear incoming "Replaces" -string. - * @since S60 3.2 - */ - void ResetIncomingReplaces(); - - /** - * Store the parameters for the mce out refer. - * @since S60 3.2 - * @param aTargetSession target receiver of the transferred call, - * null if address is given. - * @param aTarget transfer target address, KNullDesC if call is given. - * @param aAttendedTransfer boolean true if attended transfer. - */ - void SetTransferParmsL( CSVPSessionBase* aTargetSession, - const TDesC& aTarget, - const TBool aAttendedTransfer ); - - /** - * Execute the refer, creates mce out event. - * @since S60 3.2 - * @return KErrNone if ok, SVP transfer error on failure - */ - void ExecuteReferL(); - - /** - * Sets the MCE event object. - * @since Series 60 3.2 - * @param aEvent New received event - */ - void SetMceEvent( CMceEvent* aEvent ); - - /** - * Returns pointer to the MCE event object. - * @since S60 3.2 - * @return Pointer to the MCE event object - */ - CMceEvent* MceEvent(); - - /** - * Stop the refer timer. - * @since Series 60 3.2 - */ - void StopReferTimer(); - - -protected: // New functions - - /** - * Creates the states belonging to this context - * @since S60 3.2 - */ - void InitializeStateArrayL(); - - /** - * Check if state transition to a new state is acceptable. - * @since S60 3.2 - * @param aStateIndex New state to enter - * @return Boolean value, is the transition valid. - */ - TBool IsStateTransitionAccepted( - const TSVPTransferStateIndex aStateIndex ); - - /** - * C++ default constructor. - */ - CSVPTransferStateContext( CMceSession* aMceSession, - CSVPSessionBase* aSVPSession, - TMceTransactionDataContainer& aContainer, - MSVPTransferObserver& aObserver ); - - /** - * By default Symbian 2nd phase constructor is private. - * Now it is protected. - */ - void ConstructL(); - - -private: // New Functions - - /** - * Set up headers for refer call. - * @since S60 3.2 - * @return Pointer to the new created headers data - */ - CDesC8Array* SetupHeadersL(); - - /** - * Create mce out refer using target address. - * @since S60 3.2 - * @param aTarget Address of the target. - */ - void CreateMceOutReferL( const TDesC& aTarget ); - - /** - * Create mce out refer using session. - * @since S60 3.2 - * @param aTargetSession Pointer to the target session. - */ - void CreateMceOutReferL( CSVPSessionBase* aTargetSession ); - - /** - * Method for completing referTo - * @since Series 60 3.2 - * @param aReferTo referto - * @return HBufC8* constructed aReferTo - */ - HBufC8* CompleteReferToL( const TDesC8& aReferTo ); - - /** - * Method for completing referred by - * @since Series 60 3.2 - * @param aReferredBy Referred By - * @return HBufC8* constructed aReferredBy - */ - HBufC8* CompleteReferredByL( const TDesC8& aReferredBy ); - - /** - * Method for completing Replaces - * @since Series 60 3.2 - * @param aString Replaces string - * @return HBufC8* constructed Replaces string - */ - HBufC8* CompleteReplacesL( const TDesC8& aString ); - - /** - * Checks, if the URI given as parameter has - * the "<" character. - * @since S60 3.2 - * @param aUri The URI to be checked, non-modifiable descriptor. - * @return TInt, position of the character, - * KErrNotFound, if not found. - */ - TInt CheckLeftBracket( const TDesC8& aUri ) const; - - /** - * Removes the "<" character and all characters - * before the position from the URI given as parameter. - * @since S60 3.2 - * @param aUri The URI to be altered, modifiable descriptor. - * @param aPosition, position of string. - * @return None - */ - void RemoveLeftBracket( HBufC8*& aUri, TInt aPosition ) const; - - /** - * Checks, if the URI given as parameter has - * the ">" character. - * @since S60 3.2 - * @param aUri The URI to be checked, non-modifiable descriptor. - * @return TInt, position of the character, - * KErrNotFound, if not found. - */ - TInt CheckRightBracket( const TDesC8& aUri ) const; - - /** - * Removes the all characters from the URI after the position. - * @since S60 3.2 - * @param aUri, the URI to be altered, modifiable descriptor. - * @param aPosition, position where removing starts. - * @return None - */ - void CutStringFromPosition( HBufC8*& aUri, TInt aPosition ) const; - - /** - * Checks, if the URI given as parameter has - * the "?X-Sipx-Authidentity=" string. - * Some server might add that to Refer-To header. - * @since S60 3.2 - * @param aUri The URI to be checked, non-modifiable descriptor. - * @return TInt, position of the character, - * KErrNotFound, if not found. - */ - TInt CheckAuthidentity( const TDesC8& aUri ) const; - - /** - * Checks, if the URI given as parameter has the "?Replaces=" text. - * @since S60 3.2 - * @param aUri The URI to be checked, non-modifiable descriptor. - * @return TInt, position of the chareacter, - * KErrNotFound, if not found. - */ - TInt CheckReplacesTxt( const TDesC8& aUri ) const; - - /** - * Checks, if the URI given as parameter has the "Referred-By:" text. - * @since S60 3.2 - * @param aReferredBy The URI to be checked, non-modifiable descriptor. - * @return TInt, position of the chareacter, - * KErrNotFound, if not found. - */ - TInt CheckReferredByTxt( const TDesC8& aReferredBy ) const; - - /** - * Removes the "Referred-By:" text - * @since S60 3.2 - * @param aReferredBy The text to be altered, modifiable descriptor. - * @param aPosition, position of string. - * @return None - */ - void RemoveReferredByTxt( HBufC8*& aReferredBy, TInt aPosition ) const; - - /** - * Take the "?Replaces=" text and text after it. - * @since S60 3.2 - * @param aUri The URI to be altered, modifiable descriptor. - * @param aPosition, position of string. - * @return None - */ - void TakeReplacesTxt( HBufC8*& aString, TInt aPosition ) const; - - /** - * Checks, if the URI given as parameter has - * the ";user=phone" text. - * @since S60 3.2 - * @param aUri The URI to be checked, non-modifiable descriptor. - * @return TInt, position of the chareacter, - * KErrNotFound, if not found. - */ - TInt CheckUserEqualsPhone( const TDesC8& aUri ) const; - - /** - * Removes the ";user=phone" text and text after it. - * @since S60 3.2 - * @param aUri The URI to be altered, modifiable descriptor. - * @param aPosition, position of string. - * @return None - */ - void RemoveUserEqualsPhone( HBufC8*& aUri, TInt aPosition ) const; - - /** - * Removes all extra parameters from given address - * @since S60 3.2 - * @param aUri The URI to be altered, modifiable descriptor. - * @return None - */ - void RemoveExtraParameters( HBufC8*& aUri ) const; - - /** - * Update transfer target url to sips: if secure status 1 or 2. - * Otherwise url updated to sip: - * @since S60 3.2 - * @param aSecureStatus secure status - */ - void UpdateTransferTargetL( TInt aSecureStatus ); - -private: // data - - /** - * Pointer to the mce session object. - * Not own. - */ - CMceSession* iMceSession; - - /** - * Pointer to the SVP session object. - * Not own. - */ - CSVPSessionBase* iSVPSession; - - /** - * Pointer to the target of attended transfer. - * Not own. - */ - CSVPSessionBase* iTargetSession; - - /** - * Data container for mce session. - */ - TMceTransactionDataContainer& iContainer; - - /** - * Reference to the transfer observer. - */ - MSVPTransferObserver& iTransferObserver; - - /** - * Transfer state array. - * Own. - */ - RPointerArray< CSVPTransferStateBase >* iStates; - - /** - * State object pointer to indicate current state. - */ - CSVPTransferStateBase* iCurrentState; - - /** - * Mce refer, either in (MT) or out (MO) type. - * Own. - */ - CMceRefer* iMceRefer; - - /** - * Mce event, either in (MT) or out (MO) type. - * Own. - */ - CMceEvent* iMceEvent; - - /** - * Attended (consultative) / unattended (blind) transfer. - */ - TBool iAttended; - - /** - * Incoming "refer to" parameter string - * Indicates also the incoming refer handling. - */ - HBufC* iIncomingReferTo; - - /** - * Incoming "Referred By" parameter string - */ - HBufC* iIncomingReferredBy; - - /** - * Incoming "Replaces" parameter string - */ - HBufC* iIncomingReplaces; - -private: - - // For testing - SVP_UT_DEFS - - }; - -#endif // SVPTRANSFERSTATECONTEXT_H