sipvoipprovider/inc/svpemergencysession.h
branchRCL_3
changeset 21 f742655b05bf
parent 20 65a3ef1d5bd0
child 22 d38647835c2e
equal deleted inserted replaced
20:65a3ef1d5bd0 21:f742655b05bf
     1 /*
       
     2 * Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Class representing the emergency session
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #ifndef SVPEMERGENCYSESSION_H
       
    21 #define SVPEMERGENCYSESSION_H
       
    22 
       
    23 #include <sipprofileregistryobserver.h>
       
    24 #include <sipobserver.h>
       
    25 
       
    26 #include <mccpemergencycall.h>
       
    27 #include <mccpcallobserver.h>
       
    28 #include <ccpdefs.h>    // error definitions
       
    29 #include <mceoutsession.h>
       
    30 
       
    31 #include "svplogger.h"
       
    32 #include "svptimer.h"
       
    33 #include "svptimerobserver.h"
       
    34 #include "svppositioningproviderobserver.h"
       
    35 #include "svpemergencyconnectionobserver.h"
       
    36 #include "svpholdobserver.h"
       
    37 #include "svpdtmfeventobserver.h"
       
    38 #include "svputdefs.h"
       
    39 
       
    40 class MCCPCallObserver;
       
    41 class CSVPUtility;
       
    42 class CSIP;
       
    43 class CSIPProfileRegistry;
       
    44 class CRCSEProfileEntry;
       
    45 class CSVPPositioningProvider;
       
    46 class CSVPEmergencyConnection;
       
    47 class TMceTransactionDataContainer;
       
    48 class CSVPHoldController;
       
    49 class MCCPDTMFObserver;
       
    50 class CSVPDTMFEventGenerator;
       
    51 
       
    52 
       
    53 /**
       
    54  *  Class that handles emergency sessions
       
    55  *
       
    56  *  @lib svp.dll
       
    57  *  @since S60 3.2
       
    58  */
       
    59 class CSVPEmergencySession : public CBase,
       
    60                              public MCCPEmergencyCall, 
       
    61                              public MSIPObserver,
       
    62                              public MSIPProfileRegistryObserver, 
       
    63                              public MSVPTimerObserver, 
       
    64                              public MSVPPositioningProviderObserver, 
       
    65                              public MSVPEmergencyConnectionObserver, 
       
    66                              public MSVPHoldObserver, 
       
    67                              public MSVPDTMFEventObserver
       
    68     {
       
    69 
       
    70 public:
       
    71     
       
    72     /**
       
    73     * Two-phased constructor.
       
    74     */
       
    75     static CSVPEmergencySession* NewL( CMceManager& aMceManager, 
       
    76                                        TUint32 aVoipProfileId, 
       
    77                                        const TDesC& aAddress,
       
    78                                        const MCCPCallObserver& aObserver,
       
    79                                        CSVPUtility& aSVPUtility, 
       
    80                                        TBool aIsLastProfile, 
       
    81                                        TBool aIsDummy = EFalse );
       
    82 
       
    83     /**
       
    84     * Two-phased constructor for creating IAP session.
       
    85     */
       
    86     static CSVPEmergencySession* NewL( CMceManager& aMceManager, 
       
    87                                        const TDesC& aAddress,
       
    88                                        const MCCPCallObserver& aObserver,
       
    89                                        CSVPUtility& aSVPUtility, 
       
    90                                        TUint32 aIapId, 
       
    91                                        TBool aIsLastProfile, 
       
    92                                        TBool aIsDummy = EFalse );
       
    93 
       
    94     /**
       
    95     * Destructor.
       
    96     */
       
    97     virtual ~CSVPEmergencySession();
       
    98 
       
    99     /**
       
   100 	* Returns CCP call state
       
   101 	* @since S60 3.2
       
   102 	* @return CCP call state
       
   103 	*/
       
   104     MCCPCallObserver::TCCPCallState State() const;
       
   105     
       
   106     /**
       
   107 	* Traps SessionStateChangedL
       
   108     * @since S60 3.2
       
   109 	* @param aStatusCode Status code to be handled
       
   110 	*/
       
   111     void SessionStateChanged( TInt aStatusCode );
       
   112     
       
   113     /**
       
   114 	* Session connection state changed
       
   115 	* @since S60 3.2
       
   116 	* @param aSession SIP session
       
   117 	* @param aActive  SIP connection state, ETrue if up, EFalse otherwise
       
   118 	*/
       
   119     void SessionConnectionStateChanged( 
       
   120         CMceSession& aSession, TBool aActive );
       
   121 
       
   122     /**
       
   123 	* Handles stream state changes
       
   124     * @since S60 3.2
       
   125 	* @param aStream Stream that has changed
       
   126 	*/
       
   127     void StreamStateChanged( CMceMediaStream& aStream );
       
   128 
       
   129     /**
       
   130     * Handles remote action after session is established, i.e. hold
       
   131     * @since Series60 3.2
       
   132     * @param aUpdatedSession
       
   133     * @param aContainer MCE transaction container
       
   134     */
       
   135     void IncomingRequestL( CMceInSession* aUpdatedSession, 
       
   136                            TMceTransactionDataContainer aContainer );
       
   137 
       
   138     /**
       
   139     * Returns ETrue, if hold controller exists
       
   140     * @since Series60 3.2
       
   141     * @return ETrue if hold controller exists
       
   142     */
       
   143     TBool HasHoldController() const;
       
   144 
       
   145     /**
       
   146     * Returns reference to hold controller
       
   147     * @since Series60 3.2
       
   148     * @return ETrue Refenrence to hold controller
       
   149     */    
       
   150     CSVPHoldController& CSVPEmergencySession::HoldController() const;
       
   151 
       
   152     /**
       
   153     * Handles hold session state changes
       
   154     * @since Series60 3.2
       
   155     * @param aSession MCE session
       
   156     */    
       
   157     void HoldSessionStateChangedL( CMceSession& aSession );
       
   158 
       
   159     /**
       
   160     * Gets CCP DTMF observer 
       
   161     * @since Series 60 3.2
       
   162     * @return MCCPDTMFObserver CCP DTMF observer
       
   163     */
       
   164     const MCCPDTMFObserver& DtmfObserver();
       
   165 
       
   166     /**
       
   167     * Sets CCP DTMF observer to session
       
   168     * @since Series 60 3.2
       
   169     * @param aObserver Observer
       
   170     */
       
   171     void SetDtmfObserver( const MCCPDTMFObserver& aObserver );
       
   172 
       
   173 	/**
       
   174 	* Starts the transmission of a single DTMF tone across a
       
   175 	* connected and active call.
       
   176 	* @since S60 3.2
       
   177 	* @param aTone Tone to be played.
       
   178 	* @return Error code
       
   179 	*/
       
   180 	TInt StartDtmfTone( const TChar aTone );
       
   181 
       
   182 	/**
       
   183 	* Stops playing current DTMF tone.
       
   184 	* @since S60 3.2
       
   185 	* @return Error code
       
   186 	*/
       
   187 	TInt StopDtmfTone();
       
   188 
       
   189 	/**
       
   190 	* Plays DTMF string.
       
   191 	* @since S60 3.2
       
   192 	* @param aString String to be played.
       
   193 	* @return Error code
       
   194 	*/
       
   195 	TInt SendDtmfToneString( const TDesC& aString );  
       
   196 
       
   197     /**
       
   198 	* Cancels asynchronous DTMF string sending.
       
   199 	* @since Series 60 3.2
       
   200 	* @return Error code
       
   201 	*/
       
   202 	TInt CancelDtmfStringSending();
       
   203 
       
   204 
       
   205 // from base class MCCPEmergencyCall
       
   206 
       
   207  	/**
       
   208 	* Creates an emergency call
       
   209 	* @since S60 3.2
       
   210 	* @param aRecipient, not used
       
   211     * @return KErrNone or system wide error code
       
   212 	*/
       
   213 	TInt Dial( const TDesC& aRecipient );
       
   214 
       
   215 	/**
       
   216 	* Cancels ongoing dial request
       
   217 	* @since S60 3.2
       
   218 	* @return KErrNone or system wide error code
       
   219 	*/
       
   220 	TInt Cancel();
       
   221 
       
   222 	/**
       
   223 	* Ends an ongoing call
       
   224 	* @since S60 3.2
       
   225 	* @return KErrNone or system wide error code
       
   226 	*/
       
   227 	TInt HangUp();
       
   228 
       
   229 	/**
       
   230 	* Answers to an incoming call.
       
   231 	* @since S60 3.2
       
   232 	* @return KErrNone or system wide error code
       
   233 	*/
       
   234 	TInt Answer();
       
   235 	
       
   236 
       
   237 // from base class MSVPTimerObserver
       
   238     
       
   239     /**
       
   240     * Notifies, that the previously set timer has now expired.
       
   241     * Implemented by the class using the timer.
       
   242     * @since Series 60 3.2
       
   243     * @param aTimerId The ID of the timer. Observer can identify 
       
   244     *        timers from each other with this ID.
       
   245     */
       
   246     void TimedOut( TInt aTimerId );
       
   247 
       
   248 
       
   249 // from base class MSIPObserver
       
   250 
       
   251     /**
       
   252     * From MSIPObserver A SIP request has been received from the network. 
       
   253     * @since  Series 60 3.0
       
   254     * @param  aIapId The IapId from which the SIP request was received.  
       
   255     * @param  aTransaction Contains local address, remote address of a sip
       
   256     *         message, as well as optional SIP message method, headers and 
       
   257     *         body. The ownership is transferred.  
       
   258     */
       
   259      void IncomingRequest( TUint32 aIapId, 
       
   260                            CSIPServerTransaction* aTransaction );
       
   261 
       
   262     /**
       
   263     * From MSIPObserver The received SIP request time-outed and it has been
       
   264     * destroyed.  
       
   265     * @since  Series 60 3.0
       
   266     * @param  aSIPServerTransaction The time-outed transaction. Ownership is
       
   267     *         not transferred. 
       
   268     */
       
   269      void TimedOut( CSIPServerTransaction& aSIPServerTransaction );
       
   270 
       
   271      
       
   272 // from base class MSIPProfileRegistryObserver
       
   273 
       
   274     /**
       
   275     * From MSIPProfileRegistryObserver An asynchronous error has occurred
       
   276     * related to SIP profile Event is send to those observers, who have the
       
   277     * corresponding profile instantiated. 
       
   278     * @since  Series 60 3.0
       
   279     * @param  aSIPProfileId SIP Profile ID. 
       
   280     * @param  aError Error code. 
       
   281     */ 
       
   282      void ProfileRegistryErrorOccurred( TUint32 aSIPProfileId,
       
   283                                         TInt aError );
       
   284     
       
   285     /**
       
   286     * From MSIPProfileRegistryObserver An event related to SIP Profile has
       
   287     * occurred.
       
   288     * @since  Series 60 3.0
       
   289     * @param  aProfileId SIP Profile ID. 
       
   290     * @param  aEvent An occurred event.
       
   291     */ 
       
   292     void ProfileRegistryEventOccurred( TUint32 aProfileId,
       
   293                                        TEvent aEvent ); 
       
   294 
       
   295 
       
   296 // from base class MSVPPositioningProviderObserver
       
   297     
       
   298     /**
       
   299      * Handles successful positioning requests
       
   300      *
       
   301      * @since S60 3.2
       
   302      * @param aPosition Acquired position information
       
   303      */
       
   304     void PositioningRequestComplete( const TDesC8& aPosition );
       
   305     
       
   306     /**
       
   307      * Handles failed positioning requests
       
   308      *
       
   309      * @since S60 3.2
       
   310      * @param aError Symbian error code
       
   311      */
       
   312     void PositioningErrorOccurred( TInt aError );
       
   313 
       
   314 
       
   315 // from base class MSVPEmergencyConnectionObserver
       
   316 
       
   317     /**
       
   318      * SNAP connection is established
       
   319      *
       
   320      * @since S60 3.2
       
   321      */
       
   322     void SnapConnected();
       
   323     
       
   324     /**
       
   325      * IAP connection is established
       
   326      *
       
   327      * @since S60 3.2
       
   328      */    
       
   329     void Connected();
       
   330 
       
   331     /**
       
   332      * SIP proxy address is ready
       
   333      *
       
   334      * @since S60 3.2
       
   335      * @param aAddress SIP proxy address
       
   336      */    
       
   337     void SipProxyAddressReady( const TDesC16& aAddress );
       
   338 
       
   339     /**
       
   340      * Connection error has occurred
       
   341      *
       
   342      * @since S60 3.2
       
   343      * @param aError Symbian error code
       
   344      */    
       
   345     void ConnectionError( TInt aError );
       
   346 
       
   347 
       
   348 // from base class MSVPHoldObserver
       
   349 
       
   350     /**
       
   351     * Notifies, that session has been holded.
       
   352     * @since Series 60 3.2
       
   353     */
       
   354     void SessionLocallyHeld();
       
   355 
       
   356     /**
       
   357     * Notifies, that session has been resumed.
       
   358     * @since Series 60 3.2
       
   359     */
       
   360     void SessionLocallyResumed();
       
   361     
       
   362     /**
       
   363     * Notifies, that session has been remotely held.
       
   364     * @since Series 60 3.2
       
   365     */
       
   366     void SessionRemoteHeld();
       
   367 
       
   368     /**
       
   369     * Notifies, that session has been remotely resumed.
       
   370     * @since Series 60 3.2
       
   371     */
       
   372     void SessionRemoteResumed();
       
   373     
       
   374     /**
       
   375     * Notifies, that hold request failed.
       
   376     * @since Series 60 3.2
       
   377     */
       
   378     void HoldRequestFailed();
       
   379 
       
   380     /**
       
   381     * Notifies, that resume request failed.
       
   382     * @since Series 60 3.2
       
   383     */
       
   384     void ResumeRequestFailed();
       
   385 
       
   386 
       
   387 // from base class MSVPDTMFEventObserver
       
   388 
       
   389     /**
       
   390     * Sends DTMF events to CCE
       
   391     * @since S60 v3.2
       
   392     * @param aEvent DTMF event
       
   393     */
       
   394     void InbandDtmfEventOccurred( TSVPDtmfEvent aEvent );
       
   395 
       
   396 
       
   397 private:
       
   398 
       
   399     /**
       
   400     * C++ default constructor.
       
   401     */
       
   402     CSVPEmergencySession( CSVPUtility& aSVPUtility, 
       
   403                           CMceManager& aMceManager, 
       
   404                           TBool aIsLastProfile, 
       
   405                           TBool aIsDummy );
       
   406 
       
   407     /**
       
   408     * second-phase constructor
       
   409     */
       
   410     void ConstructL( TUint32 aVoipProfileId, 
       
   411                      const TDesC& aAddress,
       
   412                      const MCCPCallObserver& aObserver, 
       
   413                      TBool aIsDummy );
       
   414 
       
   415     /**
       
   416     * Second-phase constructor for IAP session
       
   417     */
       
   418     void ConstructWithIapIdL( TUint32 aIapId, 
       
   419                               const TDesC& aAddress,
       
   420                               const MCCPCallObserver& aObserver, 
       
   421                               TBool aIsDummy );
       
   422 
       
   423     /**
       
   424 	* Continues IAP EC construction
       
   425     * @since S60 3.2
       
   426 	* @param aSipProxyAddress SIP proxy address
       
   427 	*/
       
   428     void ContinueConstructWithIapIdL( const TDesC16& aSipProxyAddress );
       
   429 
       
   430  	/**
       
   431 	* Deletes failed MCE session and creates a new one without LI. Used when 
       
   432 	* 415 Unsupported Media Type received.
       
   433 	* @since S60 3.2
       
   434 	*/    
       
   435     void CreateNonLISessionL();
       
   436 
       
   437  	/**
       
   438  	* Creates unregistered MCE session
       
   439 	* @since S60 3.2
       
   440 	*/    
       
   441     void CreateUnregistedSessionL();
       
   442 
       
   443     /**
       
   444 	* Handles emergency session state change
       
   445     * @since S60 3.2
       
   446 	* @param aStatusCode Status code to be handled
       
   447 	*/
       
   448     void SessionStateChangedL( TInt aMceStatusCode );
       
   449 
       
   450  	/**
       
   451 	* Determines if dialing can be proceeded
       
   452 	* @since S60 3.2
       
   453 	*/
       
   454     void ProceedDial();    
       
   455 
       
   456  	/**
       
   457 	* Establishes an emergency call
       
   458 	* @since S60 3.2
       
   459 	*/
       
   460     void DialL();
       
   461 
       
   462     /**
       
   463     * Constructs audiostreams for emergency session
       
   464     * @since Series 60 3.2
       
   465     */   
       
   466     void ConstructAudioStreamsL();
       
   467 
       
   468     /**
       
   469     * Sets keep-alive value
       
   470     * @since Series 60 3.2
       
   471     */   
       
   472     void SetKeepAlive();
       
   473 
       
   474     /**
       
   475     * Updates keepalive parameters for MCE session
       
   476     * @since Series 60 3.2 
       
   477     */
       
   478     void UpdateKeepAliveL();
       
   479     
       
   480     /**
       
   481      * Method for checking audio priorities in audio streams. Method checks
       
   482      * that correct audio priorities are used in inband/outband DTMF cases and
       
   483      * sets them accordingly to uplink side codecs.
       
   484      * @since S60 3.2
       
   485      * @param aAudioStreams Media streams of MCE session
       
   486      */
       
   487     void CheckMmfPrioritiesForDtmfL( 
       
   488         const RPointerArray<CMceMediaStream>& aAudioStreams ) const;
       
   489 
       
   490     /**
       
   491     * Starts SVP timer
       
   492     * @since Series 60 3.2
       
   493     * @param aMilliSeconds Timeout
       
   494     * @param aTimerId Timer ID
       
   495     */
       
   496     void StartTimerL( TInt aMilliSeconds, TInt aTimerId );
       
   497 
       
   498     /**
       
   499     * Stop timer
       
   500     * @since Series 60 3.2
       
   501     * @param aTimerId Timer ID
       
   502     */
       
   503     void StopTimer( TInt aTimerId );
       
   504     
       
   505     /**
       
   506     * Stops started timers
       
   507     * @since Series 60 3.2
       
   508     */
       
   509     void StopTimers();
       
   510 
       
   511     /**
       
   512     * Notify client about an error. ECCPEmergencyFailed if it is the last try 
       
   513     * of this plugin, normal CCP error otherwise.
       
   514     * @since Series 60 3.2
       
   515     * @param aError CCP error
       
   516     */
       
   517     void ErrorOccurred( TCCPError aError );
       
   518 
       
   519     /**
       
   520      * Initializes position provider and requests for position information. 
       
   521      * Traps leaves of RequestPositionL because emergency call must not fail 
       
   522      * due to this feature.
       
   523      *
       
   524      * @since S60 3.2
       
   525      * @param aIapId IAP ID
       
   526      */
       
   527     void RequestPosition( TUint32 aIapId );
       
   528 
       
   529     /**
       
   530      * Initializes position provider and requests for position information.
       
   531      *
       
   532      * @since S60 3.2
       
   533      * @param aIapId IAP ID
       
   534      */
       
   535     void RequestPositionL( TUint32 aIapId );
       
   536 
       
   537     /**
       
   538      * Requests for SIP proxy address
       
   539      *
       
   540      * @since S60 3.2
       
   541      */
       
   542     void RequestSipProxyAddressL();
       
   543 
       
   544     /**
       
   545      * Parses content ID from URI: removes "sip(s):" prefix, if one exists.
       
   546      * @since S60 3.2
       
   547      * @param aUri URI to be parsed
       
   548      * @return Parsed content ID
       
   549      */
       
   550     HBufC8* ParseContentIdL( const TDesC8& aUri );
       
   551 
       
   552     /**
       
   553      * Parses cid: adds "cid:" prefix and brackets.
       
   554      * @since S60 3.2
       
   555      * @param aContentId Content ID to be parsed
       
   556      * @return Parsed cid
       
   557      */
       
   558     HBufC8* ParseCidL( const TDesC8& aContentId );
       
   559 
       
   560     
       
   561 private: // data
       
   562 
       
   563     /**
       
   564     * reference to SVP utility class
       
   565     */ 
       
   566     CSVPUtility& iSVPUtility;
       
   567     
       
   568     /**
       
   569     * Reference to MCE manager
       
   570     */     
       
   571     CMceManager& iMceManager;
       
   572 
       
   573     /**
       
   574     * Contains current session state
       
   575     */
       
   576     MCCPCallObserver::TCCPCallState iSessionState;
       
   577 
       
   578     /**
       
   579     * VoIP profile ID, KErrNotFound if creating an IAP session
       
   580     */
       
   581     TInt iVoipProfileId;
       
   582 
       
   583     /**
       
   584     * Id of SIP profile
       
   585     */
       
   586     TUint32 iSipProfileId;
       
   587 
       
   588     /**
       
   589     * IAP ID
       
   590     */
       
   591     TUint32 iIapId;
       
   592 
       
   593     /**
       
   594     * Session Expires value
       
   595     */
       
   596     TUint32 iSessionExpires;
       
   597 
       
   598     /**
       
   599     * Keep-alive value
       
   600     */
       
   601     TInt iKeepAlive;
       
   602     
       
   603     /**
       
   604     * Indicates that this the last profile to be tried with this plugin. If it 
       
   605     * fails, ECCPEmergencyFailed must be sent instead of normal error codes.
       
   606     */
       
   607     TBool iIsLastProfile;
       
   608 
       
   609     /**
       
   610     * Indicates that this session is dummy. ErrorOccurred is called on the 
       
   611     * next CCP API operation.
       
   612     */
       
   613     TBool iIsDummy;
       
   614 
       
   615     /**
       
   616     * Indicates that Dial() has been called
       
   617     */
       
   618     TBool iIsDialed;
       
   619 
       
   620     /**
       
   621     * Indicates that LI request is ready
       
   622     */
       
   623     TBool iIsLIRequestReady;
       
   624 
       
   625     /**
       
   626     * Session timers, need an array since there migh be more than one.
       
   627     */
       
   628     RPointerArray< CSVPTimer > iTimers;
       
   629 
       
   630     /**
       
   631     * Pointer to CCP call observer
       
   632     * Not own.
       
   633     */
       
   634     MCCPCallObserver* iEmergencyObserver;
       
   635     
       
   636     /**
       
   637     * Pointer to created emergency session
       
   638     * Own.
       
   639     */
       
   640     CMceSession* iEmergencySession;
       
   641 
       
   642     /**
       
   643     * Pointer to failed emergency session after received 415
       
   644     * Own.
       
   645     */    
       
   646     CMceSession* iFailedEmergencySession;
       
   647 
       
   648     /** 
       
   649     * User AOR. Member data because it is needed for creating location 
       
   650     * related SIP headers.
       
   651     */ 
       
   652     HBufC8* iUserAor;
       
   653 
       
   654     /** 
       
   655     * Recipient address.
       
   656     * Own.
       
   657     */ 
       
   658     HBufC8* iAddress;
       
   659 
       
   660     /** 
       
   661     * Recipient URI. Member data because it is needed for creating location 
       
   662     * related SIP headers.
       
   663     * Own.
       
   664     */ 
       
   665     HBufC8* iRecipientUri;
       
   666 
       
   667     /** 
       
   668     * Positioning provider
       
   669     * Own.
       
   670     */ 
       
   671     CSVPPositioningProvider* iPositioningProvider;
       
   672         
       
   673     /** 
       
   674     * Position information
       
   675     * Own.
       
   676     */ 
       
   677     HBufC8* iPositionInformation;
       
   678 
       
   679     /** 
       
   680     * Emergency connection.
       
   681     * Own.
       
   682     */ 
       
   683     CSVPEmergencyConnection* iEmergencyConnection;
       
   684 
       
   685     /** 
       
   686     * Hold Controller.
       
   687     * Own.
       
   688     */ 
       
   689     CSVPHoldController* iHoldController;
       
   690 
       
   691     /** 
       
   692     * Reference to DTMF observer.
       
   693     * Not own.
       
   694     */ 
       
   695     MCCPDTMFObserver* iDtmfObserver;
       
   696 
       
   697     /*
       
   698     * DTMF event generator, used in inband dtmf case.
       
   699     * Own.
       
   700     */
       
   701     CSVPDTMFEventGenerator* iDTMFEventGenerator;
       
   702 
       
   703     /**
       
   704      * Tone information. Updated everytime session state changes.
       
   705      */
       
   706     TCCPTone iTone;
       
   707     
       
   708     /** 
       
   709      * Contains DTMF tone sent. Used with inband DTMF. 
       
   710      */  
       
   711     TChar iDtmfTone;
       
   712        
       
   713     /** 
       
   714      * Contains DTMF string sent. Used with inband DTMF. 
       
   715      */
       
   716     HBufC* iDtmfString;
       
   717        
       
   718     /* 
       
   719     * Keeps count of the current tone sent. Used with inband DTMF
       
   720     */
       
   721     TLex iDtmfLex;  
       
   722     
       
   723 private:
       
   724 
       
   725     // For testing
       
   726     SVP_UT_DEFS
       
   727     
       
   728     };
       
   729 
       
   730 #endif // SVPEMERGENCYSESSION_H