diff -r 65a3ef1d5bd0 -r f742655b05bf sipvoipprovider/inc/svpemergencysession.h --- a/sipvoipprovider/inc/svpemergencysession.h Thu Aug 19 09:45:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,730 +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: Class representing the emergency session -* -*/ - - - -#ifndef SVPEMERGENCYSESSION_H -#define SVPEMERGENCYSESSION_H - -#include -#include - -#include -#include -#include // error definitions -#include - -#include "svplogger.h" -#include "svptimer.h" -#include "svptimerobserver.h" -#include "svppositioningproviderobserver.h" -#include "svpemergencyconnectionobserver.h" -#include "svpholdobserver.h" -#include "svpdtmfeventobserver.h" -#include "svputdefs.h" - -class MCCPCallObserver; -class CSVPUtility; -class CSIP; -class CSIPProfileRegistry; -class CRCSEProfileEntry; -class CSVPPositioningProvider; -class CSVPEmergencyConnection; -class TMceTransactionDataContainer; -class CSVPHoldController; -class MCCPDTMFObserver; -class CSVPDTMFEventGenerator; - - -/** - * Class that handles emergency sessions - * - * @lib svp.dll - * @since S60 3.2 - */ -class CSVPEmergencySession : public CBase, - public MCCPEmergencyCall, - public MSIPObserver, - public MSIPProfileRegistryObserver, - public MSVPTimerObserver, - public MSVPPositioningProviderObserver, - public MSVPEmergencyConnectionObserver, - public MSVPHoldObserver, - public MSVPDTMFEventObserver - { - -public: - - /** - * Two-phased constructor. - */ - static CSVPEmergencySession* NewL( CMceManager& aMceManager, - TUint32 aVoipProfileId, - const TDesC& aAddress, - const MCCPCallObserver& aObserver, - CSVPUtility& aSVPUtility, - TBool aIsLastProfile, - TBool aIsDummy = EFalse ); - - /** - * Two-phased constructor for creating IAP session. - */ - static CSVPEmergencySession* NewL( CMceManager& aMceManager, - const TDesC& aAddress, - const MCCPCallObserver& aObserver, - CSVPUtility& aSVPUtility, - TUint32 aIapId, - TBool aIsLastProfile, - TBool aIsDummy = EFalse ); - - /** - * Destructor. - */ - virtual ~CSVPEmergencySession(); - - /** - * Returns CCP call state - * @since S60 3.2 - * @return CCP call state - */ - MCCPCallObserver::TCCPCallState State() const; - - /** - * Traps SessionStateChangedL - * @since S60 3.2 - * @param aStatusCode Status code to be handled - */ - void SessionStateChanged( TInt aStatusCode ); - - /** - * Session connection state changed - * @since S60 3.2 - * @param aSession SIP session - * @param aActive SIP connection state, ETrue if up, EFalse otherwise - */ - void SessionConnectionStateChanged( - CMceSession& aSession, TBool aActive ); - - /** - * Handles stream state changes - * @since S60 3.2 - * @param aStream Stream that has changed - */ - void StreamStateChanged( CMceMediaStream& aStream ); - - /** - * Handles remote action after session is established, i.e. hold - * @since Series60 3.2 - * @param aUpdatedSession - * @param aContainer MCE transaction container - */ - void IncomingRequestL( CMceInSession* aUpdatedSession, - TMceTransactionDataContainer aContainer ); - - /** - * Returns ETrue, if hold controller exists - * @since Series60 3.2 - * @return ETrue if hold controller exists - */ - TBool HasHoldController() const; - - /** - * Returns reference to hold controller - * @since Series60 3.2 - * @return ETrue Refenrence to hold controller - */ - CSVPHoldController& CSVPEmergencySession::HoldController() const; - - /** - * Handles hold session state changes - * @since Series60 3.2 - * @param aSession MCE session - */ - void HoldSessionStateChangedL( CMceSession& aSession ); - - /** - * Gets CCP DTMF observer - * @since Series 60 3.2 - * @return MCCPDTMFObserver CCP DTMF observer - */ - const MCCPDTMFObserver& DtmfObserver(); - - /** - * Sets CCP DTMF observer to session - * @since Series 60 3.2 - * @param aObserver Observer - */ - void SetDtmfObserver( const MCCPDTMFObserver& aObserver ); - - /** - * Starts the transmission of a single DTMF tone across a - * connected and active call. - * @since S60 3.2 - * @param aTone Tone to be played. - * @return Error code - */ - TInt StartDtmfTone( const TChar aTone ); - - /** - * Stops playing current DTMF tone. - * @since S60 3.2 - * @return Error code - */ - TInt StopDtmfTone(); - - /** - * Plays DTMF string. - * @since S60 3.2 - * @param aString String to be played. - * @return Error code - */ - TInt SendDtmfToneString( const TDesC& aString ); - - /** - * Cancels asynchronous DTMF string sending. - * @since Series 60 3.2 - * @return Error code - */ - TInt CancelDtmfStringSending(); - - -// from base class MCCPEmergencyCall - - /** - * Creates an emergency call - * @since S60 3.2 - * @param aRecipient, not used - * @return KErrNone or system wide error code - */ - TInt Dial( const TDesC& aRecipient ); - - /** - * Cancels ongoing dial request - * @since S60 3.2 - * @return KErrNone or system wide error code - */ - TInt Cancel(); - - /** - * Ends an ongoing call - * @since S60 3.2 - * @return KErrNone or system wide error code - */ - TInt HangUp(); - - /** - * Answers to an incoming call. - * @since S60 3.2 - * @return KErrNone or system wide error code - */ - TInt Answer(); - - -// from base class MSVPTimerObserver - - /** - * Notifies, that the previously set timer has now expired. - * Implemented by the class using the timer. - * @since Series 60 3.2 - * @param aTimerId The ID of the timer. Observer can identify - * timers from each other with this ID. - */ - void TimedOut( TInt aTimerId ); - - -// from base class MSIPObserver - - /** - * From MSIPObserver A SIP request has been received from the network. - * @since Series 60 3.0 - * @param aIapId The IapId from which the SIP request was received. - * @param aTransaction Contains local address, remote address of a sip - * message, as well as optional SIP message method, headers and - * body. The ownership is transferred. - */ - void IncomingRequest( TUint32 aIapId, - CSIPServerTransaction* aTransaction ); - - /** - * From MSIPObserver The received SIP request time-outed and it has been - * destroyed. - * @since Series 60 3.0 - * @param aSIPServerTransaction The time-outed transaction. Ownership is - * not transferred. - */ - void TimedOut( CSIPServerTransaction& aSIPServerTransaction ); - - -// from base class MSIPProfileRegistryObserver - - /** - * From MSIPProfileRegistryObserver An asynchronous error has occurred - * related to SIP profile Event is send to those observers, who have the - * corresponding profile instantiated. - * @since Series 60 3.0 - * @param aSIPProfileId SIP Profile ID. - * @param aError Error code. - */ - void ProfileRegistryErrorOccurred( TUint32 aSIPProfileId, - TInt aError ); - - /** - * From MSIPProfileRegistryObserver An event related to SIP Profile has - * occurred. - * @since Series 60 3.0 - * @param aProfileId SIP Profile ID. - * @param aEvent An occurred event. - */ - void ProfileRegistryEventOccurred( TUint32 aProfileId, - TEvent aEvent ); - - -// from base class MSVPPositioningProviderObserver - - /** - * Handles successful positioning requests - * - * @since S60 3.2 - * @param aPosition Acquired position information - */ - void PositioningRequestComplete( const TDesC8& aPosition ); - - /** - * Handles failed positioning requests - * - * @since S60 3.2 - * @param aError Symbian error code - */ - void PositioningErrorOccurred( TInt aError ); - - -// from base class MSVPEmergencyConnectionObserver - - /** - * SNAP connection is established - * - * @since S60 3.2 - */ - void SnapConnected(); - - /** - * IAP connection is established - * - * @since S60 3.2 - */ - void Connected(); - - /** - * SIP proxy address is ready - * - * @since S60 3.2 - * @param aAddress SIP proxy address - */ - void SipProxyAddressReady( const TDesC16& aAddress ); - - /** - * Connection error has occurred - * - * @since S60 3.2 - * @param aError Symbian error code - */ - void ConnectionError( TInt aError ); - - -// from base class MSVPHoldObserver - - /** - * Notifies, that session has been holded. - * @since Series 60 3.2 - */ - void SessionLocallyHeld(); - - /** - * Notifies, that session has been resumed. - * @since Series 60 3.2 - */ - void SessionLocallyResumed(); - - /** - * Notifies, that session has been remotely held. - * @since Series 60 3.2 - */ - void SessionRemoteHeld(); - - /** - * Notifies, that session has been remotely resumed. - * @since Series 60 3.2 - */ - void SessionRemoteResumed(); - - /** - * Notifies, that hold request failed. - * @since Series 60 3.2 - */ - void HoldRequestFailed(); - - /** - * Notifies, that resume request failed. - * @since Series 60 3.2 - */ - void ResumeRequestFailed(); - - -// from base class MSVPDTMFEventObserver - - /** - * Sends DTMF events to CCE - * @since S60 v3.2 - * @param aEvent DTMF event - */ - void InbandDtmfEventOccurred( TSVPDtmfEvent aEvent ); - - -private: - - /** - * C++ default constructor. - */ - CSVPEmergencySession( CSVPUtility& aSVPUtility, - CMceManager& aMceManager, - TBool aIsLastProfile, - TBool aIsDummy ); - - /** - * second-phase constructor - */ - void ConstructL( TUint32 aVoipProfileId, - const TDesC& aAddress, - const MCCPCallObserver& aObserver, - TBool aIsDummy ); - - /** - * Second-phase constructor for IAP session - */ - void ConstructWithIapIdL( TUint32 aIapId, - const TDesC& aAddress, - const MCCPCallObserver& aObserver, - TBool aIsDummy ); - - /** - * Continues IAP EC construction - * @since S60 3.2 - * @param aSipProxyAddress SIP proxy address - */ - void ContinueConstructWithIapIdL( const TDesC16& aSipProxyAddress ); - - /** - * Deletes failed MCE session and creates a new one without LI. Used when - * 415 Unsupported Media Type received. - * @since S60 3.2 - */ - void CreateNonLISessionL(); - - /** - * Creates unregistered MCE session - * @since S60 3.2 - */ - void CreateUnregistedSessionL(); - - /** - * Handles emergency session state change - * @since S60 3.2 - * @param aStatusCode Status code to be handled - */ - void SessionStateChangedL( TInt aMceStatusCode ); - - /** - * Determines if dialing can be proceeded - * @since S60 3.2 - */ - void ProceedDial(); - - /** - * Establishes an emergency call - * @since S60 3.2 - */ - void DialL(); - - /** - * Constructs audiostreams for emergency session - * @since Series 60 3.2 - */ - void ConstructAudioStreamsL(); - - /** - * Sets keep-alive value - * @since Series 60 3.2 - */ - void SetKeepAlive(); - - /** - * Updates keepalive parameters for MCE session - * @since Series 60 3.2 - */ - void UpdateKeepAliveL(); - - /** - * Method for checking audio priorities in audio streams. Method checks - * that correct audio priorities are used in inband/outband DTMF cases and - * sets them accordingly to uplink side codecs. - * @since S60 3.2 - * @param aAudioStreams Media streams of MCE session - */ - void CheckMmfPrioritiesForDtmfL( - const RPointerArray& aAudioStreams ) const; - - /** - * Starts SVP timer - * @since Series 60 3.2 - * @param aMilliSeconds Timeout - * @param aTimerId Timer ID - */ - void StartTimerL( TInt aMilliSeconds, TInt aTimerId ); - - /** - * Stop timer - * @since Series 60 3.2 - * @param aTimerId Timer ID - */ - void StopTimer( TInt aTimerId ); - - /** - * Stops started timers - * @since Series 60 3.2 - */ - void StopTimers(); - - /** - * Notify client about an error. ECCPEmergencyFailed if it is the last try - * of this plugin, normal CCP error otherwise. - * @since Series 60 3.2 - * @param aError CCP error - */ - void ErrorOccurred( TCCPError aError ); - - /** - * Initializes position provider and requests for position information. - * Traps leaves of RequestPositionL because emergency call must not fail - * due to this feature. - * - * @since S60 3.2 - * @param aIapId IAP ID - */ - void RequestPosition( TUint32 aIapId ); - - /** - * Initializes position provider and requests for position information. - * - * @since S60 3.2 - * @param aIapId IAP ID - */ - void RequestPositionL( TUint32 aIapId ); - - /** - * Requests for SIP proxy address - * - * @since S60 3.2 - */ - void RequestSipProxyAddressL(); - - /** - * Parses content ID from URI: removes "sip(s):" prefix, if one exists. - * @since S60 3.2 - * @param aUri URI to be parsed - * @return Parsed content ID - */ - HBufC8* ParseContentIdL( const TDesC8& aUri ); - - /** - * Parses cid: adds "cid:" prefix and brackets. - * @since S60 3.2 - * @param aContentId Content ID to be parsed - * @return Parsed cid - */ - HBufC8* ParseCidL( const TDesC8& aContentId ); - - -private: // data - - /** - * reference to SVP utility class - */ - CSVPUtility& iSVPUtility; - - /** - * Reference to MCE manager - */ - CMceManager& iMceManager; - - /** - * Contains current session state - */ - MCCPCallObserver::TCCPCallState iSessionState; - - /** - * VoIP profile ID, KErrNotFound if creating an IAP session - */ - TInt iVoipProfileId; - - /** - * Id of SIP profile - */ - TUint32 iSipProfileId; - - /** - * IAP ID - */ - TUint32 iIapId; - - /** - * Session Expires value - */ - TUint32 iSessionExpires; - - /** - * Keep-alive value - */ - TInt iKeepAlive; - - /** - * Indicates that this the last profile to be tried with this plugin. If it - * fails, ECCPEmergencyFailed must be sent instead of normal error codes. - */ - TBool iIsLastProfile; - - /** - * Indicates that this session is dummy. ErrorOccurred is called on the - * next CCP API operation. - */ - TBool iIsDummy; - - /** - * Indicates that Dial() has been called - */ - TBool iIsDialed; - - /** - * Indicates that LI request is ready - */ - TBool iIsLIRequestReady; - - /** - * Session timers, need an array since there migh be more than one. - */ - RPointerArray< CSVPTimer > iTimers; - - /** - * Pointer to CCP call observer - * Not own. - */ - MCCPCallObserver* iEmergencyObserver; - - /** - * Pointer to created emergency session - * Own. - */ - CMceSession* iEmergencySession; - - /** - * Pointer to failed emergency session after received 415 - * Own. - */ - CMceSession* iFailedEmergencySession; - - /** - * User AOR. Member data because it is needed for creating location - * related SIP headers. - */ - HBufC8* iUserAor; - - /** - * Recipient address. - * Own. - */ - HBufC8* iAddress; - - /** - * Recipient URI. Member data because it is needed for creating location - * related SIP headers. - * Own. - */ - HBufC8* iRecipientUri; - - /** - * Positioning provider - * Own. - */ - CSVPPositioningProvider* iPositioningProvider; - - /** - * Position information - * Own. - */ - HBufC8* iPositionInformation; - - /** - * Emergency connection. - * Own. - */ - CSVPEmergencyConnection* iEmergencyConnection; - - /** - * Hold Controller. - * Own. - */ - CSVPHoldController* iHoldController; - - /** - * Reference to DTMF observer. - * Not own. - */ - MCCPDTMFObserver* iDtmfObserver; - - /* - * DTMF event generator, used in inband dtmf case. - * Own. - */ - CSVPDTMFEventGenerator* iDTMFEventGenerator; - - /** - * Tone information. Updated everytime session state changes. - */ - TCCPTone iTone; - - /** - * Contains DTMF tone sent. Used with inband DTMF. - */ - TChar iDtmfTone; - - /** - * Contains DTMF string sent. Used with inband DTMF. - */ - HBufC* iDtmfString; - - /* - * Keeps count of the current tone sent. Used with inband DTMF - */ - TLex iDtmfLex; - -private: - - // For testing - SVP_UT_DEFS - - }; - -#endif // SVPEMERGENCYSESSION_H