--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sipvoipprovider/inc/svpsessionbase.h Mon Jan 18 20:12:36 2010 +0200
@@ -0,0 +1,1238 @@
+/*
+* 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: Session base class for SVP MO and MT sessions. Contains methods
+* common for SVP MO and MT sessions.
+*
+*/
+
+
+#ifndef SVPSESSIONBASE_H
+#define SVPSESSIONBASE_H
+
+#include <e32base.h>
+#include <mccpcall.h>
+#include <mccpssobserver.h>
+#include <mccpdtmfobserver.h>
+
+#include "svpsessionobserver.h"
+#include "svpholdobserver.h"
+#include "svptransferobserver.h"
+#include "svptimer.h"
+#include "svptimerobserver.h"
+#include "svppropertywatchobserver.h"
+#include "svpvolumeupdateobserver.h"
+#include "svpdtmfeventobserver.h"
+#include "svputdefs.h"
+
+// FORWARD DECLARATIONS
+class TMceTransactionDataContainer;
+class CSVPUtility;
+class CSVPRtpObserver;
+class CSVPHoldController;
+class MCCPCallObserver;
+class MCCPSsObserver;
+class CSVPTransferController;
+class CMceInRefer;
+class CSVPVolumeObserver;
+class CSVPPropertyWatch;
+class CSVPDTMFEventGenerator;
+class CMceSession;
+class CMceMediaStream;
+class CMceMediaSink;
+class CMceMediaSource;
+class CMceEvent;
+class CMceRefer;
+class CDesC8Array;
+
+/**
+ * SVP Session base
+ *
+ * Base class for SVP MT and MO sessions.
+ *
+ * @lib svp.dll
+ * @since S60 3.2
+ */
+class CSVPSessionBase : public CBase,
+ public MCCPCall,
+ public MSVPTransferObserver,
+ public MSVPHoldObserver,
+ public MSVPTimerObserver,
+ public MSVPPropertyWatchObserver,
+ public MSVPVolumeUpdateObserver,
+ public MSVPDTMFEventObserver
+
+ {
+
+public:
+
+ /**
+ * C++ default constructor.
+ */
+ CSVPSessionBase( TMceTransactionDataContainer& aContainer,
+ MSVPSessionObserver& aObserver,
+ CSVPUtility& aSVPUtility,
+ CSVPRtpObserver& aRtpObserver );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSVPSessionBase();
+
+public: // new functions
+
+ /**
+ * Saves updated Mce session in cases where re-INVITE without
+ * SDP is received
+ * @Since S60 3.2
+ * @param aUpdatedSession Session that is under update
+ */
+ void SetUpdatedSession( CMceInSession* aUpdatedSession );
+
+ /**
+ * Releases temporary secure session stored
+ * after secure session trial failed
+ * @since Series 60 3.2
+ */
+ void ReleaseTempSecure();
+
+ /**
+ * Returns Mce session
+ * @Since S60 3.2
+ * @param
+ * @return instance of session
+ */
+ const CMceSession& Session() const;
+
+ /**
+ * Construcst audiostreams for MT and MO session
+ * @since Series 60 3.2
+ * @param None
+ * @return
+ */
+ void ConstructAudioStreamsL();
+
+ /**
+ * Starts SVP timer
+ * @since Series 60 3.2
+ * @param aMilliSeconds
+ * @param aTimerId
+ * @return
+ */
+ void StartTimerL( TInt aMilliSeconds, TInt aTimerId );
+
+ /**
+ * Stop specified SVP timer
+ * @since Series 60 3.2
+ * @param aTimerId The ID of the timer to stop.
+ */
+ void StopTimer( TInt aTimerId );
+
+ /**
+ * Stops started timers
+ * @since Series 60 3.2
+ * @return
+ */
+ void StopTimers();
+
+ /**
+ * Returns correct timer value (RFC 3261 chapter 14.1)
+ * @since Series 60 3.2
+ * @return
+ */
+ TInt ReinviteCrossoverTime();
+
+ /**
+ * Sets observer for supplementary services events
+ * @since Series 60 3.2
+ * @return
+ */
+ void SetSsObserver( const MCCPSsObserver& aObserver );
+
+ /**
+ * Gets supplementary services events observer of session
+ * @since Series 60 3.2
+ * @return MCCPSsObserver supplementary services events observer
+ */
+ const MCCPSsObserver& GetSsObserver( );
+
+ /**
+ * Sets CCP DTMF observer to session
+ * @since Series 60 3.2
+ * @return
+ */
+ void SetDtmfObserver( const MCCPDTMFObserver& aObserver );
+
+ /**
+ * Gets CCP DTMF observer
+ * @since Series 60 3.2
+ * @return MCCPDTMFObserver CCP DTMF observer
+ */
+ const MCCPDTMFObserver& DtmfObserver();
+
+ /**
+ * Handles session state changes
+ * @since Series 60 3.2
+ * @param aStatusCode Status code
+ * @return
+ */
+ void SessionStateChanged( TInt aStatusCode );
+
+ /**
+ * Handles session state changed announcement.
+ * @since Series60 3.2
+ * @param aSession MCE session
+ * @return void
+ */
+ void HandleSessionStateChanged( CMceSession& aSession );
+
+ /**
+ * Handles the state change of a given stream.
+ * @since S60 v3.2
+ * @param aStream Stream whose state has changed.
+ * @return void
+ **/
+ void HandleStreamStateChange( CMceMediaStream& aStream );
+
+ /**
+ * Handles the state change of a given stream & sink.
+ * @since S60 v3.2
+ * @param aStream Stream whose state has changed.
+ * @param aSink Sink which is either Enabled or Disabled.
+ * @return void
+ **/
+ void HandleStreamStateChange( CMceMediaStream& aStream,
+ CMceMediaSink& aSink );
+
+ /**
+ * Handles the state change of a given stream & source
+ * @since S60 v3.2
+ * @param aStream Stream whose state has changed.
+ * @param aSource Source which is either Enabled or Disabled.
+ * @return void
+ **/
+ void HandleStreamStateChange( CMceMediaStream& aStream,
+ CMceMediaSource& aSource );
+
+ /**
+ * Handles remote action after session is established.
+ * @since Series60 3.2
+ * @param None
+ * @return
+ */
+ TInt IncomingRequest( CMceInSession& aUpdatedSession );
+
+ /**
+ * Returns Hold session
+ * @Since S60 3.2
+ * @param None
+ * @return Reference to the session hold controller
+ */
+ CSVPHoldController& HoldController() const;
+
+ /**
+ * Finds out if the session has hold controller
+ * @since Series60 3.2
+ * @param None
+ * @return ETrue if session has hold controller, EFalse otherways
+ */
+ TBool HasHoldController() const;
+
+ /**
+ * Returns ETrue if session is muted
+ * @since Series 60 3.2
+ * @return TBool iMuted value
+ */
+ TBool IsSessionMuted() const;
+
+ /**
+ * Handles the event state changes.
+ * @since Series 60 3.2
+ * @param aEvent, the event that has changed.
+ * @param aStatusCode, status code
+ * @return KErrNone if succesfull, otherwise error code
+ */
+ TInt EventStateChanged( CMceEvent& aEvent,
+ TInt aStatusCode );
+
+ /**
+ * Handles the received notify.
+ * @since Series 60 3.2
+ * @param aEvent, the event that has changed.
+ * @param aContainer, if present, holds details of received notify.
+ */
+ void NotifyReceived( CMceEvent& aEvent,
+ TMceTransactionDataContainer* aContainer );
+
+ /**
+ * Handles the refer state changes.
+ * @since Series 60 3.2
+ * @param aRefer, the refer that has changed.
+ * @param aStatusCode, status code
+ */
+ void ReferStateChanged( CMceRefer& aRefer,
+ TInt aStatusCode );
+
+
+ /**
+ * Return the data container.
+ * When session is the target session of the attended transfer.
+ * @since Series 60 3.2
+ * @return the mce data container
+ */
+ TMceTransactionDataContainer& MceTransactionDataContainer();
+
+ /**
+ * New incoming refer received.
+ * @since Series 60 3.2
+ * @param aRefer, the new inbound refer. Ownership is
+ * transferred.
+ * @param aReferTo SIP specific Refer-to header
+ * @param aContainer, if present, holds details of incoming refer.
+ */
+ void IncomingReferL( CMceInRefer* aRefer,
+ const TDesC8& aReferTo,
+ TMceTransactionDataContainer* aContainer );
+
+ /**
+ * Checks the MCE refer object.
+ * @since S60 3.2
+ * @param aRefer - refer to check
+ * @return TBool true if same MCE refer object
+ */
+ TBool IsMceRefer( CMceRefer& aRefer );
+
+ /**
+ * Indicates whether call is secured or not
+ * @since S60 3.2
+ * @return TBool ETrue if call is secured
+ */
+ TBool SecureMandatory() const;
+
+ /**
+ * Is secure call prefered
+ * @since S60 3.2
+ * @return TBool ETrue is secure call is prefered
+ */
+ TBool SecurePreferred() const;
+
+ /**
+ * Set secure mandatody flag true or false
+ * @since S60 3.2
+ * @param aSecMandatory flag value
+ */
+ void SetSecureMandatory( TBool aSecMandatory );
+
+ /**
+ * Sets secure preferred flag true or false
+ * @since S60 3.2
+ * @param aSecPreferred flag value
+ */
+ void SetSecurePreferred( TBool aSecPreferred );
+
+ /**
+ * Sets call event to be sent, used in secure and attended transfer cases.
+ * @since S60 3.2
+ * @param aCallEventToBeSent event value
+ */
+ void SetCallEventToBeSent( MCCPCallObserver::TCCPCallEvent aCallEventToBeSent );
+
+ /**
+ * Checks if transfer is attended or unattended.
+ * @since S60 3.2
+ * @return TBool true if attended case
+ */
+ TBool IsAttended( );
+
+ /**
+ * The new recipient of the call can be fetched via this method.
+ * @since S60 3.2
+ * @param none
+ * @return New recipient for the call after transfer
+ */
+ const TDesC& TransferTarget() const;
+
+ /**
+ * 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 );
+
+ /**
+ * Send notify incoming transfer case.
+ * @param aStatusCode code coming from mce
+ * @since Series60 3.2
+ */
+ void SendNotify( TInt aStatusCode );
+
+ /**
+ * Finds out if the session has incoming transfer ongoing
+ * @since Series60 3.2
+ * @return ETrue if incoming transfer ongoing, EFalse otherways
+ */
+ TBool IsIncomingTransfer();
+
+ /**
+ * Sets the FromHeader data
+ * @since S60 3.2
+ * @param aFromHeader reference to the FromHeader data to store
+ * @return KErrNone if succesfull, otherwise another system wide error code
+ */
+ TInt SetFromHeader( const TDesC8& aFromHeader );
+
+ /**
+ * Returns the FromHeader data.
+ * @since S60 3.2
+ * @return pointer to FromHeader data
+ */
+ TDesC8* FromHeader();
+
+ /**
+ * Sets the ToHeader data
+ * @since S60 3.2
+ * @param aToHeader reference to the ToHeader data to store
+ * @return KErrNone if succesfull, otherwise another system wide error code
+ */
+ TInt SetToHeader( const TDesC8& aToHeader );
+
+ /**
+ * Returns the ToHeader data.
+ * @since S60 3.2
+ * @return pointer to ToHeader data
+ */
+ TDesC8* ToHeader();
+
+ /**
+ * Sets the CallId data
+ * @since S60 3.2
+ * @param aCallId reference to the CallId data to store
+ * @return KErrNone if succesfull, otherwise another system wide error code
+ */
+ TInt SetCallId( const TDesC8& aCallId );
+
+ /**
+ * Returns the CallId data.
+ * @since S60 3.2
+ * @return pointer to CallId data
+ */
+ TDesC8* CallId();
+
+ /**
+ * Sets the CSeq header data
+ * @since S60 3.2
+ * @param aCSeq reference to the CSeq header data to store
+ * @return KErrNone if succesfull, otherwise another system wide error code
+ */
+ TInt SetCSeqHeader( const TDesC8& aCSeq );
+
+ /**
+ * Returns the CSeqHeader data.
+ * @since S60 3.2
+ * @return reference to CSeqHeader data
+ */
+ const TDesC& CSeqHeader() const;
+
+ /**
+ * Method for setting crypto context to secure session
+ * @since S60 3.2
+ */
+ void SetCryptoContextL();
+
+ /**
+ * Gets CCP session observer
+ * @since Series 60 3.2
+ * @return CCP session observer.
+ */
+ MCCPCallObserver& GetCCPSessionObserver( );
+
+ /**
+ * Handles update failure
+ * @since Series 60 3.2
+ * @param aSession MCE session reference
+ * @param aStatusCode Status code of the response received
+ * @return None
+ */
+ void UpdateFailed( CMceSession& aSession, TInt aStatusCode );
+
+ /**
+ * Returns session keepalive timer value
+ * @since Series 60 3.2
+ * @return TInt returns keepalive timer value
+ */
+ TInt GetKeepAliveTime();
+
+ /**
+ * SVP received INVITE without SDP, this flag is set to
+ * prevent extra incomingcall callback to CCE
+ * @since Series 60 3.2
+ * @return none
+ */
+ void SetEmptyReInvite();
+
+ /**
+ * Returns ETrue if empty re-INVITE was received by SVP
+ * @since Series 60 3.2
+ * @return TBool Flag value
+ */
+ TBool IsEmptyReInvite();
+
+ /**
+ * Returns ETrue if iSessionState is still in initial state.
+ * @since Series 60 3.2
+ * @return TBool Flag value
+ */
+ TBool IsIdle();
+
+
+// dtmf
+
+ /**
+ * Cancels asynchronous DTMF string sending.
+ * @since Series 60 3.2
+ * @return KErrNone is successful, otherwiee antoher system wide error code
+ */
+ TInt CancelDtmfStringSending();
+
+ /**
+ * 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 KErrNone if succesfull, otherwise another system wide error code
+ */
+ TInt StartDtmfTone( const TChar aTone );
+
+ /**
+ * Stops playing current DTMF tone.
+ * @since S60 3.2
+ * @param none
+ * @return KErrNone if succesfull, otherwise another system wide error code
+ */
+ TInt StopDtmfTone();
+
+ /**
+ * Plays DTMF string.
+ * @since S60 3.2
+ * @param aString String to be played.
+ * @return KErrNone if succesfull, otherwise another system wide error code
+ * KErrArgument if the specified string contains illegal DTMF characters
+ */
+ TInt SendDtmfToneString( const TDesC& aString );
+
+ // from SVPDTMFEventObserver
+ void InbandDtmfEventOccurred( TSVPDtmfEvent aEvent );
+
+public: // from base classes: timerobserver
+
+ /**
+ * Notifies, that the previously set timer has now expired.
+ * Implemented by the class using the timer.
+ * @since Series 60 3.2
+ * @param TInt aTimerId The ID of the timer. Observer can identify
+ * timers from each other with this ID.
+ * @return
+ */
+ void TimedOut( TInt aTimerId );
+
+public: // from MSVPVolumeUpdateObserver
+
+ /**
+ * CSVPVolumeObserver calls this when volume level changes
+ * changed.
+ *
+ * @since S60 3.2
+ * @param aVolume New volume level
+ */
+ void VolumeChanged( TInt aVolume );
+
+public: // from base classes: MCCPCall
+
+ /**
+ * Return if call secure status is specified or not.
+ * @since Series 60 5.0
+ * @param None
+ * @return TBool ETrue if security is specified, else EFalse.
+ */
+ TBool SecureSpecified() const;
+
+ /**
+ * Sets CCP call observer
+ * @since Series 60 3.2
+ * @param aObserver observer to be set
+ * @return
+ */
+ void AddObserverL( const MCCPCallObserver& aObserver );
+
+ /**
+ * Remove an observer.
+ * @since S60 v3.2
+ * @param none
+ * @param aObserver Observer
+ * @return KErrNone if removed succesfully. KErrNotFound if observer was not found.
+ * Any other system error depending on the error.
+ */
+ TInt RemoveObserver( const MCCPCallObserver& aObserver );
+
+ /**
+ * Answers to an incoming call.
+ * @since Series60 3.2
+ * @return KErrNotSupported
+ */
+ virtual TInt Answer();
+
+ /**
+ * Starts dialing to recipient
+ * @since Series60 3.2
+ * @return KErrNone or system wide error code
+ */
+ virtual TInt Dial();
+
+ /**
+ * Cancels ongoing dial or answer request
+ * @since Series60 3.2
+ * @return KErrNone or system wide error code
+ */
+ virtual TInt Cancel();
+
+ /**
+ * Ends an ongoing call.
+ * @since Series60 3.2
+ * @return KErrNone or system wide error code
+ */
+ virtual TInt HangUp();
+
+ /**
+ * Rejects an incoming call.
+ * @since Series 60 3.2
+ * @return KErrNone or system wide error code
+ */
+ virtual TInt Reject();
+
+ /**
+ * Reguests plug-in to queue the call.
+ * @since S60 3.2
+ * @return KErrNone or system wide error code
+ */
+ virtual TInt Queue();
+
+ /**
+ * Call is ringning
+ * @since S60 3.2
+ * @return KErrNone or system wide error code
+ */
+ virtual TInt Ringing();
+
+ /**
+ * Puts the specified call on hold.
+ * @since Series60 3.2
+ * @return KErrNone or system wide error code
+ */
+ virtual TInt Hold();
+
+ /**
+ * Resumes the call.
+ * @since Series60 3.2
+ * @return KErrNone or system wide error code
+ */
+ virtual TInt Resume();
+
+ /**
+ * Swaps a connected call to its opposite state, either active or on hold
+ * @since Series60 3.2
+ * @return KErrNone or system wide error code
+ */
+ virtual TInt Swap();
+
+ /**
+ * Releases all bindings to call and calls destructor
+ * @since Series60 3.2
+ * @return KErrNone
+ */
+ virtual TInt Release();
+
+ /**
+ * Returns the recipient of the call.
+ * @since Series60 3.2
+ * @return recipient address,
+ */
+ virtual const TDesC& RemoteParty() const;
+
+ /**
+ * Returns display name of the recipient of the call.
+ * @since Series60 3.2
+ * @return Recipient's display name
+ */
+ virtual const TDesC& RemotePartyName();
+
+ /**
+ * Returns the original dialled party.
+ * @since Series60 3.2
+ * @return Dialled party,
+ */
+ virtual const TDesC& DialledParty() const;
+
+ /**
+ * Return boolean value, is incoming call forwarded or not.
+ * @since Series60 3.2
+ * @return ETrue if call is forwarded, else EFalse
+ */
+ virtual TBool IsCallForwarded() const;
+
+ /**
+ * Returns boolean value, is the call mobile originated.
+ * @since Series60 3.2
+ * @return ETrue if call is mobile originated, otherwise EFalse
+ */
+ virtual TBool IsMobileOriginated() const;
+
+ /**
+ * Returns the state of the call.
+ * @since Series60 3.2
+ * @return TCCPCallState The current state of the call
+ */
+ virtual MCCPCallObserver::TCCPCallState State() const;
+
+ /**
+ * Returns TUid of the Plug-In used for this call
+ * @since Series60 3.2
+ * @return TUid Implementation UID of the Plug-In
+ */
+ virtual TUid Uid() const;
+
+ /**
+ * Returns call control caps for this call This tells for CCE what call can
+ * currently do.
+ * @since Series60 3.2
+ * @return Call control caps defined in MCCPCallObserver::TCCPCallControlCaps.
+ */
+ virtual MCCPCallObserver::TCCPCallControlCaps Caps() const;
+
+ /**
+ * Get call's secure status.
+ * @since Series 60 3.2
+ * @return TBool ETrue if security is enabled, else EFalse.
+ */
+ virtual TBool IsSecured() const;
+
+ /**
+ * Get Conference extension methods
+ * @since Series 60 3.2
+ * @return Pointer to MCCPCSCallConfernece if succesfull, NULL if not available
+ */
+ virtual MCCPConferenceCall* ConferenceProviderL( const MCCPConferenceCallObserver& aObserver );
+
+ /**
+ * Get Forward provider
+ * @since Series 60 3.2
+ * @return Pointer to MCCPForwardProvider if succesfull, NULL if not available
+ */
+ virtual MCCPForwardProvider* ForwardProviderL( const MCCPForwardObserver& aObserver );
+
+
+ /**
+ * Get Call transfer provider
+ * @since Series 60 3.2
+ * @return Pointer to MCCPTransferProvider if succesfull, NULL if not available
+ */
+ MCCPTransferProvider* TransferProviderL( const MCCPTransferObserver& aObserver );
+
+
+ /**
+ * Set call parameters.
+ * @since S60 3.2
+ * @param aNewParams New call paramater information.
+ */
+ void SetParameters( const CCCPCallParameters& aNewParams );
+
+ /**
+ * Cet call parameters.
+ * @since S60 3.2
+ * @param None
+ * @return Current call paramater information.
+ */
+ virtual const CCCPCallParameters& Parameters() const;
+
+ /**
+ * Returns currently used tone for the call. Used in case tones are needed to be played.
+ * See defenition for TCCPTone.
+ * @since S60 3.2
+ * @param None.
+ * @return TCCPTone Used tone.
+ */
+ TCCPTone Tone() const;
+
+public: // from SVPHoldObserver
+
+ /**
+ * Notifies, that session has been holded.
+ * @since Series 60 3.2
+ */
+ virtual void SessionLocallyHeld();
+
+ /**
+ * Notifies, that session has been resumed.
+ * @since Series 60 3.2
+ */
+ virtual void SessionLocallyResumed();
+
+ /**
+ * Notifies, that session has been remotely held.
+ * @since Series 60 3.2
+ */
+ virtual void SessionRemoteHeld();
+
+ /**
+ * Notifies, that session has been remotely resumed.
+ * @since Series 60 3.2
+ */
+ virtual void SessionRemoteResumed();
+
+ /**
+ * Notifies, that hold request failed.
+ * @since Series 60 3.2
+ */
+ virtual void HoldRequestFailed();
+
+ /**
+ * Notifies, that resume request failed.
+ * @since Series 60 3.2
+ */
+ virtual void ResumeRequestFailed();
+
+
+public: // from MSVPTransferObserver
+
+ /**
+ * From MSVPTransferObserver
+ * Notifier for succesful transfer.
+ * @since Series60 3.2
+ * @param aNotifyCode The transfer notify code
+ */
+ virtual void TransferNotification( TInt aNotifyCode );
+
+ /**
+ * From MSVPTransferObserver
+ * Notifier for transfer failure.
+ * @since Series60 3.2
+ * @param aError The error Id.
+ */
+ virtual void TransferFailed( TInt aError );
+
+public: // from MSVPPropertyWatchObserver
+
+ /**
+ * CSVPPropertyWatch calls this when some property under watching was
+ * changed.
+ *
+ * @since S60 3.2
+ * @param aKey Property which was changed
+ * @param aValue New value of the property
+ */
+ void ValueChangedL( TInt aKey, TInt aValue );
+
+ /**
+ * CSVPPropertyWatch calls this when property was deleted.
+ *
+ * @since S60 3.2
+ * @param aKey Property which was deleted
+ */
+ void PropertyDeleted( TInt aKey );
+
+protected: // new methods
+
+ /**
+ * Updates keepalive parameters for session
+ * @since Series 60 3.2
+ * @param aSession Session to be updated
+ * @param aSessionUpdateOngoing Determines whether session needs to be updated
+ * @return
+ */
+ void UpdateKeepAliveL( CMceSession& aSession, TBool aSessionUpdateOngoing );
+
+ /**
+ * Worker function for session state change, called from
+ * SessionStateChanged().
+ * @since S60 v3.2
+ * @param aOrigStatus Original status code
+ * @param aError Mapped TCCPError
+ * @param aModStatus Modified status code
+ * @return void
+ */
+ virtual void SessionStateChangedL( TInt aOrigCode, TCCPError aError,
+ TInt aModStatus );
+
+ /**
+ * Initializes mute P&S property watcher and CenRep volume watcher
+ * @Since S60 3.2
+ * @param
+ * @return instance of session
+ */
+ void InitializePropertyWatchingL();
+
+ /**
+ * Sets RTP keep-alive timer value and payload
+ * @since Series 60 3.2
+ * @param aSession MCE session
+ * @param aSessionUpdateOngoing Determines whether session needs to be updated
+ * @return void
+ */
+ virtual void SetRtpKeepAliveL( CMceSession* aSession,
+ TBool aSessionUpdateOngoing );
+
+ /**
+ * Executes session observer callback(Cb) if not NULL.
+ * @since Series 60 3.2
+ * @param aError the error code.
+ * @return System wide error code.
+ */
+ TInt ExecCbErrorOccurred( TCCPError aError );
+
+ /**
+ * Sets new internal call state, and executes session observer callback(Cb)
+ * if not NULL.
+ * @since Series 60 3.2
+ * @param aNewState new state
+ * @return System wide error code.
+ */
+ TInt ExecCbCallStateChanged( MCCPCallObserver::TCCPCallState aNewState );
+
+ /**
+ * Executes session observer callback(Cb) if not NULL.
+ * @since Series 60 3.2
+ * @param aEvent the new event.
+ * @return System wide error code.
+ */
+ TInt ExecCbCallEventOccurred( MCCPCallObserver::TCCPCallEvent aEvent );
+
+ /**
+ * Executes supplementary services(Ss) observer callback(Cb) if not NULL.
+ * Events can be e.g. call forward related events
+ * that are not call related to an existing call
+ * @since Series 60 3.2
+ * @param aEvent the new event.
+ * @return System wide error code.
+ */
+ TInt ExecCbSsEventOccurred( MCCPSsObserver::TCCPSsCallForwardEvent aEvent );
+
+
+private: // new methods
+
+ /**
+ * 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 v3.2
+ * @param aAudioStreams. Media streams in iSession.
+ * @return void
+ */
+ void CheckMmfPrioritiesForDtmfL(
+ const RPointerArray<CMceMediaStream>& aAudioStreams ) const;
+
+ /**
+ * Method for seek remote party
+ * Handle possible leave
+ * @since Series 60 3.2
+ * @return void
+ * @leave system error if searching fails
+ */
+ void RemotePartyL() const;
+
+ /**
+ * Volume level changed
+ * Handle possible leave
+ * @since S60 3.2
+ * @param aVolume New volume level
+ * @return void
+ * @leave system error if volume settings fails
+ */
+ void VolumeChangedL( TInt aVolume );
+
+ /**
+ * Performs mute / unmute
+ * @since S60 3.2
+ * @param aStreams Media streams
+ * @param aValue Mute change value
+ * @return void
+ * @leave system error if mute/unmute fails
+ */
+ void PerformMuteChangeL( const RPointerArray< CMceMediaStream >& aStreams,
+ TInt aValue );
+
+ /**
+ * Sets Flag that indicates Error in UpLink (ICMP -3) happens the 1st Time
+ * @since Series 60 3.2
+ * @return none
+ */
+ void SetErrorInULandDLFirstTime( TBool aFirstTime );
+
+ /**
+ * Returns is the error in Uplink has happened the only 1st time
+ * @since Series 60 3.2
+ * @return TBool Flag value
+ */
+ TBool IsErrorInULandDLFirstTime();
+
+ /**
+ * Returns ETrue if both UpLink and DownLink are disabled
+ * @since Series 60 3.2
+ * @return TBool Flag value
+ */
+ TBool IsBothStreamsDisabledL() const;
+
+
+protected: // protected data
+
+ /**
+ * Mce session
+ * Own.
+ */
+ CMceSession* iSession;
+
+ /**
+ * Temporary secure session, needed so that old session deletion can be
+ * performed painlessly.
+ * Own.
+ */
+ CMceSession* iTempSecSession;
+
+ /**
+ * reference to SVP utility class
+ */
+ CSVPUtility& iSVPUtility;
+
+ /**
+ * reference to SVP Rtp observer class. Needed for RTCP resetting.
+ */
+ CSVPRtpObserver& iRtpObserver;
+
+ /**
+ * SIP profile id
+ */
+ TUint32 iSipProfileId;
+
+ /**
+ * Converged call provider call observer
+ */
+ MCCPCallObserver* iCCPSessionObserver;
+
+ /**
+ * Observer for supplementary services events
+ */
+ MCCPSsObserver* iCCPSsObserver;
+
+ /**
+ * Flag that indicates whether established session is secured or not
+ */
+ TBool iSecured;
+
+ /**
+ * Call event which will be sent in securepreferred or attended transfer cases.
+ */
+ MCCPCallObserver::TCCPCallEvent iCallEventToBeSent;
+
+ /**
+ * Id of VoIP profile
+ */
+ TUint32 iVoIPProfileId;
+
+ /**
+ * Keep-alive timer value
+ */
+ TInt iKeepAliveValue;
+
+ /**
+ * Call parameters
+ */
+ CCCPCallParameters* iCallParameters;
+
+ /**
+ * User tries to call to sips: -uri, secpref 0 is used
+ * this flag is needed for event notification
+ */
+ TBool iTLSNotInUse;
+
+ /**
+ * Prevents UI notes if error response received to BYE request
+ */
+ TBool iAlreadyTerminating;
+
+ /**
+ * This flag indicates whether preconditions
+ * are required in SIP headers or not
+ */
+ TBool iPreconditions;
+
+private: // private data
+
+ /**
+ * Transaction data container, not owned.
+ */
+ TMceTransactionDataContainer& iContainer;
+
+ /*
+ * Instance of DTMF event generator, used in inband dtmf case
+ * Own.
+ */
+ CSVPDTMFEventGenerator* iEventGenerator;
+
+ /**
+ * Instance of volume observer, observer CenRep
+ * Own.
+ */
+ CSVPVolumeObserver* iVolObserver;
+
+ /**
+ * Instance of property watcher using P&S system
+ * Own.
+ */
+ CSVPPropertyWatch* iMutePropertyWatch;
+
+ /**
+ * Session timers, need an array since there migh be more than one.
+ */
+ RPointerArray<CSVPTimer> iTimers;
+
+ /**
+ * Contains current session state
+ */
+ MCCPCallObserver::TCCPCallState iSessionState;
+
+ /**
+ * From header of the mce session, from headers
+ * Own.
+ */
+ HBufC8* iFromHeader;
+
+ /**
+ * To header of the mce session, from headers
+ * Own.
+ */
+ HBufC8* iToHeader;
+
+ /**
+ * Call id of the mce session, from headers
+ * Own.
+ */
+ HBufC8* iCallId;
+
+ /**
+ * CSeq header of the mce session, from headers
+ * Own.
+ */
+ HBufC* iCSeqHeader;
+
+ /**
+ * The address of the recipient of the SIP session.
+ * Own.
+ */
+ mutable HBufC* iRecipient;
+
+ /**
+ * Display name of the recipient of the SIP session.
+ * Own.
+ */
+ HBufC* iDisplayName;
+
+ /**
+ * Pointer to a SVP hold controller.
+ * Own.
+ */
+ CSVPHoldController* iHoldController;
+
+ /**
+ * Pointer to transfer controller.
+ * Own.
+ */
+ CSVPTransferController* iTransferController;
+
+ /**
+ * Terminating timeout time repeat control value when incoming transfer
+ * ongoing.
+ */
+ TInt iTerminatingRepeat;
+
+ /**
+ * CCP DTMF observer
+ */
+ MCCPDTMFObserver* iCCPDtmfObserver;
+
+ /**
+ * SVP session observer
+ */
+ MSVPSessionObserver& iObserver;
+
+ /**
+ * Flag to indicate secure preference value 1 -> secure is preferred
+ */
+ TBool iSecurePreferred;
+
+ /**
+ * Flag to indicate secure preference value 2 -> secure call mandatory
+ */
+ TBool iSecureMandatory;
+
+ /**
+ * Mute flag
+ */
+ TBool iMuted;
+
+ /**
+ * Flag that indicates that handling of received re-INVITE
+ * without is SDP is ongoing
+ */
+ TBool iEmptyReInvite;
+
+ /**
+ * 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;
+
+ /**
+ * Flag that indicates that the case MediaStreams are
+ * Disabled (ICMP -3 error) happens 1st time
+ */
+ TBool iErrorInULandDLFirstTime;
+
+ /**
+ * Flag that indicates whether earlymedia event should
+ * be sent again in ringing case
+ */
+ TBool iEarlyMediaOngoing;
+
+private:
+
+ // For testing
+ SVP_UT_DEFS
+
+ };
+
+#endif // SVPSESSIONBASE_H