--- 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 <e32base.h>
-#include <badesca.h> // 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