diff -r 7b872347d83b -r 6d0b9f605b61 sipvoipprovider/svphold/inc/svpholdcontext.h --- a/sipvoipprovider/svphold/inc/svpholdcontext.h Tue Feb 02 00:05:57 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,584 +0,0 @@ -/* -* Copyright (c) 2006-2008 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: Base class for hold contexts. Contains methods -* for creating the state array and controlling current state. -* -*/ - - -#ifndef SVPHOLDCONTEXT_H -#define SVPHOLDCONTEXT_H - -#include -#include -#include "svputdefs.h" - -// Constants -const TInt KSVPHoldDirectionAttributeCount = 4; // "sendonly" etc. -const TInt KSVPMaxDirectionAttributeLength = 10; // "a=sendonly" -const TInt KSVPHoldStateArraySize = 5; -const TInt KSVPHoldMaxLengthOfSDPMessage = 1000; -const TInt KSVPHoldMaxLengthOfInetAddr = 32; - -// SDP Connection field content for oldway hold -_LIT8( KSVPHoldZeroAddr, "0.0.0.0" ); - -// SDP Direction attributes -_LIT8( KSVPHoldAttributeSendrecv, "a=sendrecv" ); -_LIT8( KSVPHoldAttributeSendonly, "a=sendonly" ); -_LIT8( KSVPHoldAttributeRecvonly, "a=recvonly" ); -_LIT8( KSVPHoldAttributeInactive, "a=inactive" ); - -// Indexes for direction attributes -typedef TInt KSVPHoldAttributeIndex; -const KSVPHoldAttributeIndex KSVPHoldSendrecvIndex = 0; -const KSVPHoldAttributeIndex KSVPHoldSendonlyIndex = 1; -const KSVPHoldAttributeIndex KSVPHoldRecvonlyIndex = 2; -const KSVPHoldAttributeIndex KSVPHoldInactiveIndex = 3; - -// State indices -typedef TInt TSVPHoldStateIndex; -const TSVPHoldStateIndex KSVPHoldConnectedStateIndex = 0; -const TSVPHoldStateIndex KSVPHoldEstablishingStateIndex = 1; -const TSVPHoldStateIndex KSVPHoldOutStateIndex = 2; -const TSVPHoldStateIndex KSVPHoldInStateIndex = 3; -const TSVPHoldStateIndex KSVPHoldDHStateIndex = 4; - -/** -* Hold transition -*/ -// session hold state, needed for dtmf for determining active session -enum TSVPSessionHoldState - { - ESVPConnected = 0, - ESVPEstablishing, - ESVPOnHold - }; - - -/** -* Hold desired state change -*/ -enum TSVPHoldDesiredTransition - { - ESVPHoldNoRequest = 0, - ESVPHoldToHold = 1, - ESVPHoldToResume = 2, - ESVPHoldIncoming = 3 - }; - -/** -* Hold request type -*/ -enum TSVPHoldRequestType - { - ESVPNoType = 0, - ESVPLocalHold = 1, - ESVPLocalResume = 2, - ESVPLocalDoubleHold = 3, - ESVPLocalDoubleHoldResume = 4, - ESVPRemoteHold = 5, - ESVPRemoteResume = 6, - ESVPRemoteDoubleHold = 7, - ESVPRemoteDoubleHoldResume = 8, - ESVPRequestError = 9 // causes state to resume previous - }; - -/** -* Hold state -*/ -enum TSVPHoldState - { - ESVPHoldConnected = 0, - ESVPHoldLocallyHolded = 1, - ESVPHoldRemoteHolded = 2, - ESVPHoldLocallyDoubleHolded = 3, - ESVPHoldRemoteDoubleHolded = 4 - }; - - -class CSdpConnectionField; -class TInetAddr; -class CDesC8Array; -class MDesC8Array; -class CMceSession; -class TMceTransactionDataContainer; -class CSVPHoldStateBase; -class MSVPHoldObserver; -class CSVPHoldAttributeHandler; -class CSVPHoldMediaHandler; - - -/** -* Base class for session contexts. -* -* @lib svp.dll -* @since Series 60 3.2 -*/ -class CSVPHoldContext : public CBase - { -public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CSVPHoldContext* NewL( - CMceSession& aSession, - TMceTransactionDataContainer& aContainer, - MSVPHoldObserver* iObserver, - TBool aIsMobileOriginated ); - - /** - * Destructor. - */ - virtual ~CSVPHoldContext(); - -public: // New functions - - /** - * Sets the current state for the context. - * Leaves with Error code if state transition is not acceptable. - * @since Series 60 3.2 - * @param aContext Hold context - * @param aNewState New current state - */ - void SetCurrentStateL( CSVPHoldContext& aContext, - TSVPHoldStateIndex aNewState ); - - /** - * Returns the current state of the context - * @since Series 60 3.2 - * @return TSVPHoldStateIndex the current state, index to it. - */ - TSVPHoldStateIndex 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 Series 60 3.2 - * @param aSession Session to be modified - * @param aTransition Desired operation - */ - void ApplyCurrentStateL( CMceSession* aSession, - TSVPHoldDesiredTransition aTransition ); - - /** - * 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 Series 60 3.2 - */ - void ApplyCurrentStateL(); - - /** - * Sets the reference to session object - * state leaves. - * @since Series 60 3.2 - * @param aSession The session object - */ - void SetSessionObject( CMceSession* aSession ); - - /** - * Returns reference to session object - * state leaves. - * @since Series 60 3.2 - * @return Pointer to session object - */ - CMceSession* SessionObject(); - - /** - * Returns type of hold request. This is valid during the complete - * state transition process, until next stable state is reached. - * @since Series 60 3.2 - * @return Hold request type - */ - TSVPHoldRequestType HoldRequest(); - - /** - * Returns ETrue if hold/resume remote request. - * @since Series 60 3.2 - * @return Boolean value - */ - TBool IsRemoteRequest(); - - /** - * After completed & succesful IN / OUT Request, returns occurred event. - * @since Series 60 3.2 - * @return Occurred event to be informed to client application - */ - MCCPCallObserver::TCCPCallEvent HoldEvent(); - - /** - * Sets first attempt flag - * @since Series 60 3.2 - * @param aValue Boolean value for -flag - */ - void SetFirstAttempt( TBool aValue ); - - /** - * Returns value of first attempt -flag - * @since Series 60 3.2 - * @return Boolean value of first attempt -flag - */ - TBool FirstAttempt(); - - /** - * Sets remote request not processed -flag - * @since Series 60 3.2 - * @param aValue Boolean value for flag - */ - void SetRemoteRequestNotProcessed( TBool aValue ); - - /** - * Returns value of the remote request not processed -flag - * @since Series 60 3.2 - * @return Boolean value of the remote request not processed -flag - */ - TBool RemoteRequestNotProcessed(); - - /** - * Sets audio handling allowed -flag - * @since Series 60 3.2 - * @param aValue Boolean value for flag - */ - void SetAudioHandlingAllowed( TBool aValue ); - - /** - * Returns value of the audio handling allowed -flag - * @since Series 60 3.2 - * @return Boolean value of the audio handling allowed -flag - */ - TBool AudioHandlingAllowed(); - - /** - * Returns reference to hold observer. - * @since Series 60 3.2 - * @return Reference to hold observer. - */ - MSVPHoldObserver& HoldObserver(); - - /** - * Returns reference to attribute handler. - * @since Series 60 3.2 - * @return Reference to attribute handler. - */ - CSVPHoldAttributeHandler& AttributeHandler(); - - /** - * Returns reference to media handler. - * @since Series 60 3.2 - * @return Reference to media handler. - */ - CSVPHoldMediaHandler& MediaHandler(); - - /** - * Solves type of incoming request and returns next state of state machine. - * @since Series 60 3.2 - * @param aSession Incoming updated MCE session - * @param aAttributeLines Attribute lines from incoming request. - * @param aCheckOldwayHold ETrue if oldwayhold need to be taken into account - * @return TSVPHoldRequestType Request type - */ - TSVPHoldRequestType SolveRequestL( CMceSession& aSession, - MDesC8Array* aAttributeLines, - TBool aCheckOldwayHold = EFalse ); - - /** - * Sets response status code - * @since Series 60 3.2 - * @param aStatusCode Status code of response received - */ - void SetResponseStatusCode( TInt aStatusCode ); - - /** - * Gets response status code - * @since Series 60 3.2 - * @return Status code - */ - TInt ResponseStatusCode(); - - /** - * Sets force hold flag value - * @since Series 60 3.2 - * @param aForceHold Boolean value - */ - void SetForceHold( TBool aForceHold ); - - /** - * Gets force hold flag value - * @since Series 60 3.2 - * @return Boolean value - */ - TBool ForceHoldOccured(); - - /** - * Handles and controls hold operation based on response status - * @since Series 60 3.2 - * @param aNextState Valid hold state machine state after function call - * @return Boolean value ETrue if response needed special handling - */ - TBool SpecialResponseHandling( TSVPHoldStateIndex& aNextState ); - - /** - * Sets hold/resume request timed out -flag, - * called when hold/resume request has expired. - * @since Series 60 3.2 - */ - void TimedOut(); - - /** - * Returns RollBack -boolean value - * @since Series 60 3.2 - * @return Boolean value - */ - TBool HoldRolledBack(); - - /** - * Sets crossover situation on/off - * @since Series 60 3.2 - * @param ETrue if CrossOver situation, EFalse otherways - * @return - */ - void CrossOver( TBool aActive ); - - /** - * Returns Hold failed -boolean value. After this function call - * flag is cleared. - * @since Series 60 3.2 - * @return ETrue if hold failed, EFalse otherways - */ - TBool HoldFailed(); - - /** - * Returns Resume failed -boolean value - * @since Series 60 3.2 - * @return ETrue if resume failed, EFalse otherways - */ - TBool ResumeFailed(); - - /** - * Returns IsMobileOriginated -boolean value - * @since Series 60 3.2 - * @return ETrue if MobileOriginated, EFalse otherways - */ - TBool IsMobileOriginated(); - - /** - * Sets mute state to Hold Controller - * @since Series 60 3.2 - * @param aMuted Boolean value for mute value - */ - void Muted( TBool aMuted ); - - /** - * Returns mute state - * @since Series 60 3.2 - * @return Boolean value for mute value - */ - TBool Muted(); - - /** - * Sets CallRequestFailed status ETrue/EFalse - * @since Series 60 3.2 - * @param aCallRequest Boolean value for call on hold request failed - */ - void SetCallRequestFailed( TBool aCallRequest ); - - - /** - * Returns CallRequestFailed -boolean value - * @since Series 60 3.2 - * @return ETrue if call on hold request failed, EFalse otherways - */ - TBool CallRequestFailed(); - - -protected: // New functions - - /** - * Creates the states belonging to this context - * @since Series 60 3.2 - */ - void InitializeStateArrayL(); - - /** - * Checkes if a state transition to a given state is accepted. - * @since Series 60 3.2 - * @param TSVPHoldStateIndex aStateIndex - * @return TBool, boolean value, is the transition valid. - */ - TBool IsStateTransitionAccepted( - const TSVPHoldStateIndex aStateIndex ); - - /** - * C++ default constructor. - */ - CSVPHoldContext( TMceTransactionDataContainer& aContainer, - TBool aIsMobileOriginated ); - - /** - * By default Symbian 2nd phase constructor is private. - * Now it is protected. - */ - void ConstructL( CMceSession& aSession, - MSVPHoldObserver* iObserver ); - - -private: // New functions - - /** - * Returns ETrue if establishing state is next, EFalse otherways - */ - TBool ToEstablishing(); - - /** - * Returns hold request type - */ - TSVPHoldRequestType RequestType( - TSVPHoldDesiredTransition aTransition ); - - /** - * Returns hold request type - */ - TSVPHoldRequestType RequestToHold(); - - /** - * Returns hold request type - */ - TSVPHoldRequestType RequestToResume(); - - /** - * Returns hold request type - */ - TSVPHoldRequestType RequestIncoming(); - - /** - * Updates right establishing state based on the direction of the request - */ - void UpdateEstablishingStateL(); - - /** - * - */ - TSVPHoldRequestType SolveRequestType( - TInt aAttributeIndex, - TSVPHoldRequestType aPresumedRequest ); - - /** - * This method is used in mobile terminating(MT) calls, to check SDP - * body for Connection field, and to check the content of that field. - * - * @since Series60 3.2 - * @param aSession Incoming updated MCE session - * @param aPresumedRequest Enumeration for hold request type, - * assumed hold type passed as parameter. - * @return Enumerated value of hold request, after - * oldway hold is checked from the content. - */ - TSVPHoldRequestType - CheckOldwayHoldL( CMceSession& session, - TSVPHoldRequestType aPresumedRequest ); - - /** - * Rolls hold session state back to previous state - */ - void RollBack( TSVPHoldStateIndex& aNextState ); - - -protected: // Data - - // State array - RPointerArray< CSVPHoldStateBase >* iStates; - - // Observer - MSVPHoldObserver* iObserver; - - -private: // Data - - // Current state - CSVPHoldStateBase* iCurrentState; - - // Current hold request type. Changed by SolveRequestType() and - // in special cases, e.g. when 2-phased hold needed (MO oldway) - TSVPHoldRequestType iHoldRequest; - - // Pointer to session object (not owned) - CMceSession* iSession; - - // Boolean value of request direction - TBool iOutgoing; - - // Instance of attribute handler - CSVPHoldAttributeHandler* iAttributeHandler; - - // Instance of media handler - CSVPHoldMediaHandler* iMediaHandler; - - // First attempt (not MO oldway hold) - TBool iFirstAttempt; - - // Flag for remote request in process - TBool iRemoteRequestNotProcessed; - - // Data container for mce session - TMceTransactionDataContainer& iContainer; - - // Hold event - MCCPCallObserver::TCCPCallEvent iHoldEvent; - - // Indicates that audio handling is allowed - TBool iAllowAudioHandling; - - // Status code of the response - TInt iResponseStatusCode; - - // Force hold occured flag; - TBool iForceHoldOccured; - - // Flag for timed out hold/resume request - TBool iTimedOut; - - // Flag for preventing audio enable/disable - TBool iRollBack; - - // Flag for failed hold - TBool iHoldFail; - - // Flag for failed resume (causes session to be terminated) - TBool iResumeFail; - - // Flag for SVP session direction - TBool iIsMobileOriginated; - - // Flag for mute - TBool iMuted; - - // Flag for cross over (simultaneous requests) - TBool iCrossOver; - - // Flag for callbackrequest - TBool iCallRequest; - - -private: - - // For testing - SVP_UT_DEFS - - }; - -#endif // SVPHOLDCONTEXT_H -