dvrengine/CommonRecordingEngine/inc/CCRRTSPPacketSource.h
changeset 41 d88d70d98bbc
parent 34 814ba97beeb9
child 46 3bc36dbd63c2
--- a/dvrengine/CommonRecordingEngine/inc/CCRRTSPPacketSource.h	Fri Jun 11 10:05:41 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1052 +0,0 @@
-/*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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 that negotiaties RTP stream using RTSP*
-*/
-
-
-
-
-#ifndef CCRRTSPPACKETSOURCE_H
-#define CCRRTSPPACKETSOURCE_H
-
-//  INCLUDES
-#include "CCRPacketSourceBase.h"
-#include "CCRStreamingSession.h"
-#include "CCRConnection.h"
-#include "CCRRtspResponse.h"
-#include "CCRRtpTcpObserver.h"
-#include "CCRSock.h"
-#include "MCRTimerObserver.h"
-#include <rtp.h>
-
-// CONSTANTS
-// None
-
-// MACROS
-// None
-
-// DATA TYPES
-// None
-
-// FORWARD DECLARATIONS
-class CCRRtspCommand;
-class CDvrSdpParser;
-class RRtpSession;
-class RRtpReceiveSource;
-class TRtpEvent;
-class CCRTimer;
-class CCRPunchPacketSender;
-class CCRRtpTcpStreamer;
-
-// CLASS DECLARATION
-
-/**
-*  Class that negotiaties RTP stream using RTSP.
-*
-*  @lib CommonRecordingEngine.lib
-*  @since Series 60 3.0
-*/
-class CCRRtspPacketSource : public CCRPacketSourceBase,
-                            public MCRSockObserver,
-                            public MCRRtpTcpObserver,
-                            public MCRConnectionObserver,
-                            public MCRTimerObserver
-    {
-
-public: // Data types
-
-    /**
-    * RTP packet memory layout structure
-    */
-    struct TCRRtpMessageHeader
-        {
-        TUint iVersion:2;
-        TUint iPadding:1;
-        TUint iExtension:1;
-        TUint iCsrcCount:4;
-        TUint iMarker:1;
-        TUint iPayloadType:7;
-        TUint iSeq:16;
-        TUint32 iTimestamp;
-        TUint32 iSSRC;
-        };
-
-    /**
-    * RTCP sender report memory layout 
-    */
-    struct TCRRtpSRReportHeader
-        {
-        // Note the order of first 3 items:
-        unsigned char iReportCount:5; // this and
-        unsigned char iPadding:1;     // this and
-        unsigned char iVersion:2;     // this are first 8 bits. 
-        // Note that above order is reversed from spec.
-        unsigned char iPacketType;
-        TUint16 iLength;
-        TUint32 iSenderSSRC;
-        TUint32 iMSWTimestamp;
-        TUint32 iLSWTimestamp;
-        TUint32 iRTPTimestamp;
-        TUint32 iSenderPacketCount;
-        TUint32 iSenderOctetCount;
-        };
-
-    /**
-    * Enum for identifying sockets. Sockets return this via Id()
-    * and this is also used as an array index. 
-    */
-    enum TCRRTPSockId
-        {
-        ERTPControl=0,     /**< placeholder for RTSP sock */
-        ERTPVideoSend1,    /**< RTP video payload */
-        ERTPVideoSend2,    /**< RTCP video */
-        ERTPAudioSend1,    /**< RTP audio payload */
-        ERTPAudioSend2,    /**< RTCP audio */
-        ERTPMaxSockets     /**< Just max value, no real socket assigned for this */
-        };
-
-public: // Constructors and destructor
-
-    /**
-    * Two-phased constructor.
-    * Calling this method will finally cause a call to DoConnectL() so
-    * this class will start connecting as soon as it is constructed, 
-    * address where to connect to is in aParams. 
-    * @param aParams is the stream address
-    * @param aConnection is handle to RConnection wrapper to use
-    * @param aSessionObs is pointer to our observer
-    * @aOwningSession is the streaming session that owns this packet source
-    * @return CCRRtspPacketSource pointer to CCRRtspPacketSource class
-    */
-    static CCRRtspPacketSource* NewL( const SCRRtspParams& aParams,
-                                      CCRConnection& aConnection,
-                                      RSocketServ& aSockServer,
-                                      MCRStreamObserver& aSessionObs,
-                                      CCRStreamingSession& aOwningSession );
-
-    /**
-    * Destructor.
-    */
-    virtual ~CCRRtspPacketSource();
-
-public: // New functions
-
-    /**
-    * Method for aquiring the URI being streamed here
-    * @since Series 60 3.0
-    * @param none.
-    * @return URI.
-    */
-    TPtr URI();
-
-    /**
-    * Method that packet puncher calls to tell
-    * it has finished punching the firewall.
-    * @since Series 60 3.0
-    * @param aPuncher tells the number of the port 
-    * where the punch packet was sent to.
-    * @return none.
-    */
-    void PunchPacketsSent( CCRPunchPacketSender* aPuncher );
-
-    /**
-    * Method for setting observer that this source will report its status to.
-    * @since Series 60 3.0
-    * @param aObserver is the observer instance implementing MCRConnectionObserver.
-    * @return none.
-    */
-    void RegisterConnectionObs( MCRConnectionObserver* aObserver );
-
-    /**
-    * Method for removing status observer
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void UnregisterConnectionObs();
-
-public: // Methods from base classes
-
-    /**
-    * From CCRPacketSourceBase.
-    * Method for acquiring sdp.
-    * @since Series 60 3.0
-    * @param aSdp is string pointer that will be .Set() to contain the sdp.
-    *        If no sdp is available no .Set() will occur.
-    * @return KErrNotReady if no sdp available.
-    */
-    TInt GetSdp( TPtrC8& aSdp );
-
-    /**
-    * From CCRPacketSourceBase.
-    * Method for acquiring (almost) up-to-date sequence and ts numbers.
-    * @since Series 60 3.0
-    * @param aAudioSeq is reference to TUint that will be set by this
-    *        method to contain latest available sequence number for
-    *        audio stream being received via this packet source.
-    * @param aAudioTS rtp timestamp for audio.
-    * @param aVideoSeq rtp seq for video. If no video, value will not be touched.
-    * @param aVideoTS rtp ts for video.
-    * @return KErrNone if data available.
-    */
-    TInt SeqAndTS( TUint& aAudioSeq,
-                   TUint& aAudioTS,
-                   TUint& aVideoSeq,
-                   TUint& aVideoTS );
-
-    /**
-    * From CCRPacketSourceBase.
-    * Post action after source initialized.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void PostActionL();
-
-    /**
-    * From CCRPacketSourceBase.
-    * Method for ordering "play" for packet source.
-    * @since Series 60 3.0
-    * @param aStartPos is start position in seconds.
-    * @param aEndPos is end position in seconds.
-    * @return a system wide error code.
-    */
-    TInt Play( const TReal& aStartPos,
-               const TReal& aEndPos );
-
-    /**
-    * From CCRPacketSourceBase.
-    * Method for pausing play from source.
-    * @since Series 60 3.0
-    * @param none.
-    * @return a system wide error code.
-    */
-    TInt Pause();
-
-    /**
-    * From CCRPacketSourceBase.
-    * Method for stopping play from source.
-    * @since Series 60 3.0
-    * @param none.
-    * @return a system wide error code.
-    */
-    TInt Stop();
-
-    /**
-    * From CCRPacketSourceBase.
-    * Method for getting range of stream. If no range/duration
-    * is available this method will set the return values to
-    * 0.0,-1.0 and that may be quite normal state live streams.
-    * @since Series 60 3.0
-    * @param aLower is where to start from. If no value available,
-    *        value of aLower must be set to 0
-    * @param aUpper is where to stop. Negative values mean eternity.
-    * @return none.
-    */
-    void GetRange( TReal& aLower,
-                   TReal& aUpper );
-
-    /**
-    * From CCRPacketSourceBase.
-    * Setter for current position.
-    * @since Series 60 3.0
-    * @param aPosition a postion of playback.
-    * @return a system wide error code.
-    */
-    virtual TInt SetPosition( const TInt64 aPosition ) ;
-
-    /**
-    * From MCRSockObserver.
-    * This method is called after some data has been received from socket.
-    * @since Series 60 3.0
-    * @param aSockId identifies the socket where the data came from. 
-    * @param aData is descriptor containing the data received.
-    *        ownership of data is not passed via this call.
-    * @return none.
-    */
-    void DataReceived( TInt aSockId,
-                       const TDesC8& aData );
-
-    /**
-    * From MCRSockObserver.
-    * This method is called after status of socket changes.
-    * @since Series 60 3.0
-    * @param aSockId Identifies the socket that had the status change
-    * @param aStatus is the new status of the sock
-    * @param aError if aStatus was an error-status, this may contain error code
-    * @return none.
-    */
-    void SockStatusChange( TInt aSockId, 
-                           CCRSock::TCRSockStatus aStatus,
-                           TInt aError );
-
-    /**
-    * From MCRRtpTcpObserver.
-    * Signals an available incoming RTSP control message
-    * @since Series 60 3.0
-    * @param aData a RTSP meaage data.
-    * @return none.
-    */
-    void RtspMsgAvailable( const TDesC8& aData );
-
-    /**
-    * From MCRRtpTcpObserver.
-    * Receives a RTP/RTCP packet available from TCP streamer and
-    * forwards to streaming sessions (buffers).
-    * @since Series 60 3.0
-    * @param aChannel specifies channel if in TCP streaming case, in practice
-    *        tells if it is a video/audio packet and if it is RTP or RTCP.
-    * @param aPacket is the payload of the  packet
-    * @return none.
-    */
-    void RtpTcpPacketAvailable( TInt aChannel,
-                                const TDesC8& aPacket );
-
-    /**
-    * From MCRRtpTcpObserver.
-    * Receives a RTP/RTCP packet and forward to streaming server
-    * @since Series 60 3.0
-    * @param aChunk contains RTP packet with headers suitable to be sent to remote
-    *        via RTSP control socket.
-    * @return none.
-    */
-    void ForwardRtpTcpChunck( const TDesC8& aChunk );
-    
-    /**
-    * From MCRConnectionObserver.
-    * receives notifications of connection status changes,
-    * used to clear heuristics on streaming capabilities.
-    * @since Series 60 3.0
-    * @param aSessionId a session id.
-    * @param aStatus is the new status of the connection.
-    * @param aErr contains error code if new status is failure status.
-    * @return none.
-    */
-    void ConnectionStatusChange( TInt aSessionId,
-                                 TCRConnectionStatus aStatus,
-                                 TInt aErr );
-
-    /**
-    * From MCRTimerObserver.
-    * The function to be called when a timeout occurs.
-    * @since Series 60 3.0
-    * @param aTimer is pointer to timer instance that caused call to this method.
-    * @return none.
-    */
-    void TimerExpired( CCRTimer* aTimer );
-
-private: // Constructors and destructor
-
-    /**
-    * C++ default constructor.
-    * @param aConnection is RConnection wrapper to use.
-    * @param aSockServer is socket server to use when opening sockets.
-    * @param aSessionObs is pointer to our observer.
-    * @param aOwningSession is pointer to session that owns this source.
-    */
-    CCRRtspPacketSource( CCRConnection& aConnection,
-                         RSocketServ& aSockServer,
-                         MCRStreamObserver& aSessionObs,
-                         CCRStreamingSession& aOwningSession );
-
-    /**
-    * By default Symbian 2nd phase constructor is private.
-    * @aParams aParams contains stream address parameters that this packet source
-    *          will try to use to obtain the stream.
-    * @return none
-    */
-    void ConstructL( const SCRRtspParams& aParams );
-
-private: // New methods
-
-    /**
-    * Method for connecting.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void DoConnectL();
-
-    /**
-    * Method for cleaning up.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void CleanUp();
-
-    /**
-    * Method for initiating cleanup.
-    * @since Series 60 3.0
-    * @param aSelfPtr is pointer to "this".
-    * @return none.
-    */
-    static TInt CleanUpCallback( TAny* aSelfPtr );
-
-    /**
-    * Method for asking for cleanup in async way.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void DoCleanup();
-
-    /**
-    * Method for sending RTSP command. Command in question depends on state.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void SendRtspCommandL();
-
-    /**
-    * Method for parsing and reacting to RTSP reply.
-    * @since Series 60 3.0
-    * @param aData a RTSP response data.
-    * @return none.
-    */
-    void ProcessRtspResponseL( const TDesC8& aData );
-
-    /**
-    * Method for parsing and reacting to RTSP command that
-    * remote server may send to us
-    * @since Series 60 3.0
-    * @param aData a RTSP response data.
-    * @return none.
-    */
-    void ProcessRTSPCommandL( const TDesC8& aData );
-
-    /**
-    * Method for sending error indication to client side
-    * if rtsp response was something errorneous.
-    * @since Series 60 3.0
-    * @param aErrorCode is RTSP response code,something else than 200 OK.
-    * @return none.
-    */
-    void ProcessRtspErrorResponseL( CCRRtspResponse::TResponseCode aErrorCode );
-
-    /**
-    * Method for doing SETUP.
-    * @since Series 60 3.0
-    * @param aControlAddr is either absolute or relative controladdr for stream.
-    * @param aForAudio is ETrue if control addr is for audio.
-    * @return client port number.
-    */
-    TInt SendSetupCommandL( const TDesC8& aControlAddr,
-                            TBool aForAudio );
-
-    /**
-    * Method for doing PLAY.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void SendPlayCommandL();
-
-    /**
-    * Method for doing PAUSE that is sent to remote server.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void SendPauseCommandL();
-
-    /**
-    * Method for doing OPTIONS ping that is sent to remote server.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void SendOptionsCommandL();
-
-    /**
-    * Method for doing TEARDOWN.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void SendTearDownCommandL();
-
-    /**
-    * Method that sets up rtp sessions. Must be called before play is issued.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    TInt SetupRTPSessions();
-
-    /**
-    * Method that starts RTSP command response timeout.
-    * @since Series 60 3.0
-    * @param aTime a timer interval.
-    * @return none.
-    */
-    void StartRtspTimeout( TTimeIntervalMicroSeconds32 aTime );
-
-    /**
-    * Callback method from RTP session for audio.
-    * @since Series 60 3.0
-    * @param aPtr is pointer to "this".
-    * @param aEvent is the event. In practice it contains RTP packet or RTCP packet.
-    * @return none.
-    */
-    static void AudioRTPCallBack( CCRRtspPacketSource* aPtr,
-                                  const TRtpEvent& aEvent );
-
-    /**
-    * Callback method from RTP session for video.
-    * @since Series 60 3.0
-    * @param aPtr is pointer to "this".
-    * @param aEvent is the event. In practice it contains RTP packet or RTCP packet.
-    * @return none.
-    */
-    static void VideoRTPCallBack( CCRRtspPacketSource* aPtr,
-                                  const TRtpEvent& aEvent );
-
-    /**
-    * Callback for RTSP timeout. Just ask session to start cleanup.
-    * @since Series 60 3.0
-    * @param aPtr is pointer to "this".
-    * @return none.
-    */
-    static TInt RtspTimeoutCallback( TAny* aPtr );
-
-    /**
-    * Method for creating sender report header.
-    * @param aPtr is pointer to "this".
-    * @param aEvent is the rtp packet event received.
-    * @param aStreamId a stream id.
-    * @return none
-    */
-    static void SenderReport( CCRRtspPacketSource* aPtr,
-                              const TRtpEvent& aEvent,
-                              MCRPacketSource::TCRPacketStreamId aStreamId );
-
-    /**
-    * Method for handling audio.
-    * @param aPtr is pointer to "this".
-    * @param aSource a receiver source.
-    * @param aEvent is the rtp packet event received.
-    * @return none
-    */
-    static void HandleNewSourceL( CCRRtspPacketSource* aPtr,
-                                  RRtpReceiveSource& aSource,
-                                  const TRtpEvent& aEvent,
-                                  TRtpCallbackFunction aCallback );
-
-    /**
-    * Generate DESCRIBE message with authentication information.
-    * used when server responses with 401 or 407.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void SendAuthDescribeL();
-
-    /**
-    * Adds authentication info to given command.
-    * @since Series 60 3.0
-    * @param aCommand the command where to add authentication info.
-    * @return none.
-    */
-    void AddAuthenticationL( TInt aCommand );
-
-    /**
-    * Setup sessions for RTP stack and issue play command
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void SetupSessionsAndPlay();
-
-    /**
-    * Initiates sending of punch packets
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void SendPunchPacketsL();
-
-    /**
-    * Creates a socket in iRTPSockArr for multicast streaming:
-    * binds to local port and join multicast group
-    *
-    * @since Series 60 3.0
-    * @param aSockId  id for RTP socket in iRTPSockArr
-    * @param aGroupAddr multicast group address, in IPv6 or mapped IPv4
-    * @param aPort local UDP port to listen
-    * @return system error code
-    */
-    TInt CreateMulticastSocket( TCRRTPSockId aSockId,
-                                const TInetAddr& aGroupAddr,
-                                TInt aPort );
-
-    /**
-    * Creates a socket in iRTPSockArr for unicast streaming:
-    * binds to local port and connects to remote address
-    *
-    * @since Series 60 3.0
-    * @param aSockId  id for RTP socket in iRTPSockArr
-    * @param aLocalAddr  local address and port to listen
-    * @param aRemoteAddr remote address and port to connect to
-    * @return system error code
-    */
-    TInt CreateUnicastSocket( TCRRTPSockId aSockId,
-                              const TInetAddr& aLocalAddr,
-                              const TInetAddr& aRemoteAddr );
-
-    /**
-    * Method that handles rtp payload packet to buffer.
-    * @since Series 60 3.0
-    * @param aEvent is the rtp packet event received.
-    * @param aIsAudio indicates whether this is audio or video packet.
-    * @return none.
-    */
-    void RTPPayloadProcessor ( const TRtpEvent& aEvent,
-                               const TBool aIsAudio );
-
-    /**
-    * Method for setting session parameters.
-    * @since Series 60 3.0
-    * @param aSession is reference to either audio or video rtp session.
-    *        from instance variables of this class ; the parameters will
-    *        be set in similar way for both audio and video
-    * @param aGranularity is number of clock ticks per second, usually found from SDP
-    * @return none.
-    */
-    void SetRtpSession( RRtpSession& aSession ,
-                        TReal aGranularity );
-
-    /**
-    * Method for initiating cleanup.
-    * @since Series 60 3.0
-    * @param aSelfPtr is pointer to "this".
-    * @return symbian error code.
-    */
-    static TInt SendRtspPing( TAny* aSelfPtr );
-
-    /**
-    * Method for synchronizing of timestamps and notifying sinks.
-    * This should be called after sender reports are received
-    * and with normal packet reception in the beginning of the stream.
-    * In practice this will be called for about every packet while
-    * iNoRtpInfoHeader is on, when we know the seq+ts then 
-    * iNoRtpInfoHeader will be turned off and this method will be no longer
-    * used ; detection of no rtp info header in rtsp play reply will turn
-    * iNoRtpInfoHeader on. 
-    *
-    * @param aStreamId identifies the stream
-    * @param aMSWTimestamp more significant part of wall-clock. Seconds.
-    * @param aLSWTimestamp less significant part of wall-clock. Fraction of seconds.
-    * @param aRTPTimestamp rtptimestamp of aMSW+aLSWTimestamp
-    * @param aSeq sequence number of aRTPTimestamp
-    */
-    void ConstructSeqAndTsForSink ( MCRPacketSource::TCRPacketStreamId aStreamId,
-                                    TUint32 aMSWTimestamp,
-                                    TUint32 aLSWTimestamp,
-                                    TUint32 aRTPTimestamp,
-                                    TUint aSeq );
-    
-    /**
-    * Method for setting up multicast or tcp streaming from setup reply.
-    * @param none
-    * @return none
-    */
-    void ConditionallySetupMultiCastOrTcpStreamingL();
-
-    /**
-    * Method checks that we all receiveing from all streams, if not returns false.
-    * @param none
-    * @return ETrue if receiving from all streams.
-    */
-    TBool CheckReceiveOfStreams();
-    
-    /**
-    * Method that flags given stream as receiving stream.
-    * @param aStreamType stream that is receiving   
-    * @return none
-    */
-    void StreamFound( TCRPacketStreamId aStreamType );
-    
-    /**
-    * Method that resets all created receive streams as non receiving.  
-    * @param none
-    * @return none
-    */
-    void ResetStreamFlags();
-
-#if defined ( LIVE_TV_FILE_TRACE ) || defined ( LIVE_TV_RDEBUG_TRACE )
-    /**                                        
-    * Method for showing a packet header.
-    * @since Series 60 3.0
-    * @param aRtcpHeader a pointer to packet header.
-    * @param aEvent is the rtp packet event received.
-    * @return none.
-    */
-    static void ShowHeader( const TDesC8& aRtcpHeader,
-                            const TCRRtpSRReportHeader& aSrReport );
-#endif // LIVE_TV_FILE_TRACE || LIVE_TV_RDEBUG_TRACE
-
-private: // Data
-
-    /**
-    * rtsp URL we're supposed to view.
-    */
-    HBufC* iRtspUri;
-    
-    /**
-    * Hostname -part of iRTSPURI.
-    */
-    TPtrC iRtspUriHost;
-    /**
-    * rtsp URL in 8bit descriptor, only because there is no uri parser in 8 bit.
-    */
-    HBufC8* iRtspUri8;
-    /**
-    * possible username, if server requires.
-    */
-    HBufC* iUserName;
-    
-    /**
-    * possible password, if server requires.
-    */
-    HBufC* iPassword;
-    
-    /**
-    * Sequence number from rtp info header concerning audio.
-    */
-    TUint iSeqFromRtpInfoForAudio;
-    
-    /**
-    * Sequence number from rtp info header concerning video.
-    */
-    TUint iSeqFromRtpInfoForVideo;
-    
-    /**
-    * RTP Session for audio.
-    */
-    RRtpSession iAudioSession;
-    
-    /**
-    * RTP Session for video.
-    */
-    RRtpSession iVideoSession;
-    
-    /**
-    * Receive stream for audio.
-    */
-    RRtpReceiveSource iRtpRecvSrcAudio;
-    
-    /**
-    * Receive stream for audio.
-    */
-    RRtpReceiveSource iRtpRecvSrcVideo;
-    
-    /*
-    * Socket server reference ; all sockets we use must be via common sock serv. 
-    */
-    RSocketServ& iSockServer;
-    
-    /*
-    * RConnection wrapper reference ; all sockets we use must share an RConnection.
-    */
-    CCRConnection& iConnection;
-
-    /*
-    * Socket to use to talk RTSP to remote server. 
-    */
-    CCRSock* iRtspSock;
-
-    /**
-    * Sockets for incoming multicast RTP data, to bypass RTP stack limitations.
-    */
-    CCRSock* iRTPSockArr[ERTPMaxSockets];
-
-    /**
-    * pointer to data sent by us via socket.
-    */
-    HBufC8* iSentData;
-    
-    /**
-    * State of this rtsp client, or stage in discussion.
-    */
-    TCRRTSPStage iStage;
-    
-    /**
-    * Pointers to previous commands sent in various stages.
-    */
-    CCRRtspCommand* iPrevCommands[ERTSPLastStage];
-    
-    /**
-    * Pointers to responses of various commands.
-    */
-    CCRRtspResponse* iResponses[ERTSPLastStage];
-    
-    /** 
-    * CSeq for rtsp negotiation.
-    */
-    TInt iCSeq;
-    
-    /**
-    * SDP parser.
-    */
-    CDvrSdpParser* iSdpParser;
-    
-    /**
-    * Client portbase. Value used for video, for audio it is this value + 2.
-    */
-    TInt iClientPort;
-    
-    /**
-    * Transport method for RTP.
-    */
-    TCRRTPTransport iTransport;
-    
-    /**
-    * Timer for UDP reception timeout, to fire TCP usage.
-    */
-    CCRTimer* iUdpReceptionTimer;
-    
-    /**
-    * IP packet parser.
-    */
-    CCRRtpTcpStreamer* iRtpTcpStreamer;
-    
-    /**
-    * Session id from server.
-    */
-    TPtrC8 iSessionId;
-    
-    /**
-    * If sink is ready.
-    */
-    TBool iReadyToPlay;
-    
-    /**
-    * RTP time initial value for audio.
-    */
-    TUint32 iRTPTimeStampAudio;
-    
-    /**
-    * RTP time initial value for video.
-    */
-    TUint32 iRTPTimeStampVideo;
-    
-    /**
-    * If authentication is needed.
-    */
-    TBool iAuthenticationNeeded;
-    
-    /**
-    * Nonce of the authentication header.
-    */
-    HBufC8* iNonce;
-    
-    /**
-    * Realm of the authentication header.
-    */
-    HBufC8* iRealm;
-    
-    /**
-    * Authentication type ("Basic" or "Digest"). 
-    */
-    HBufC8* iAuthType;
-    
-    /** 
-    * Opaque of the authentication header.
-    */
-    HBufC8* iOpaque;
-    
-    /**
-    * User Agent header if present.
-    */
-    HBufC8* iUserAgent;
-    
-    /**
-    * Connection bandwidth in bit/s for 'Bandwidth' header.
-    */
-    TInt iBandwidth;
-    
-    /**
-    * x-wap-profile if present.
-    */
-    HBufC8* iWapProfile;
-    
-    /**
-    * Number of times authentication has failed.
-    */
-    TInt iAuthFailedCount;
-    
-    /**
-    * Our observer.
-    */
-    MCRStreamObserver& iSessionObs;
-    
-    /**
-    * Number of bytes sent in audio rtp packets.
-    */
-    TUint32 iAudioBytes;
-    
-    /**
-    * Number os audio rtp packets sent.
-    */
-    TUint32 iAudioPackets;
-    
-    /**
-    * Number of bytes sent in video rtp packets.
-    */
-    TUint32 iVideoBytes;
-    
-    /**
-    * Number of video packets sent.
-    */
-    TUint32 iVideoPackets;
-    
-    /**
-    * Instance for punch packet sender ; lifetime will be from setup stage
-    * to delivery of first audio packet.
-    */
-    CCRPunchPacketSender* iPunchPacketSenderAudio;
-    
-    /**
-    * Instance for punch packet sender ; lifetime will be from setup stage
-    * to delivery of first video packet.
-    */
-    CCRPunchPacketSender* iPunchPacketSenderVideo;
-    
-    /**
-    * Flag for successful sending of punch packets for audio stream.
-    */
-    TBool iPunchPacketSentForAudio;
-    
-    /**
-    * Flag for successful sending of punch packets for video stream.
-    */
-    TBool iPunchPacketSentForVideo;
-    
-    /**
-    * Connection status observer.
-    */
-    MCRConnectionObserver* iObserver;
-    
-    /**
-    * Position where playback will start. Usually will have value 0 but will
-    * be changed if user seeks the clip.
-    */
-    TReal iStartPos;
-    
-    /**
-    * Position where playback is supposed to end. Most streaming servers won't
-    * obey this at all but rtsp gives possibility to specify end position so
-    * we'll support that anyway.
-    */
-    TReal iEndPos;
-    
-    /**
-    * Sends RTSP ping.
-    */
-    CPeriodic* iRtspPingTimer;
-    
-    /**
-    * Timer started when RTSP message is sent and cancelled when reply is received. 
-    * If this timer fires, it means that we didn't get reply in time that in turn
-    * forces cleanup of this source.
-    */
-    CPeriodic* iRtspTimeout;
-
-    /**
-    * Sequence number of last rtsp reply received. 
-    */    
-    TInt iLastReceivedSeq;
-
-    /**
-    * We have a play-command pending, not yet sent. 
-    */    
-    TInt iPostPonedPlay;
-
-    /**
-    * Proxy server addr to use while streaming.
-    */
-    TName iProxyServerAddr; 
-
-    /**
-    * Proxy server port to use while streaming. 
-    */
-    TInt iProxyServerPort;     
-
-    /**
-    * Flag telling that there has been no rtp-info header.
-    * in play-response 
-    */
-    TBool iNoRtpInfoHeader; 
-    
-    /**
-    * Wall-clock timestamp MSW part for syncronizing.
-    */
-    TUint32 iMSWTimestamp; 
-    
-    /**
-    * Wall-clock timestamp LSW part for syncronizing.
-    */
-    TUint32 iLSWTimestamp;
-    
-    /**
-    * Flag set when we manage to get UDP traffic. If we some reason loose
-    * traffic completely (eg staying too long in PAUSE -state while streaming)
-    * we dont try TCP at first but after we have tried UDP again.
-    */  
-    TBool iUdpFound;
-    
-    /**
-    * Simple container class representing one receive stream.
-    */
-    class TReceiveStream
-        {
-        public:
-        
-        /**
-        * Default constructor setting default values.
-        */
-        TReceiveStream()
-            {
-            iStreamType = EStreamIdCount;
-            iDataReceived = EFalse;
-            };
-        
-        /**
-        * Stream type, defined in MCRPacketSource.
-        */
-        TCRPacketStreamId iStreamType;
-        
-        /**
-        * Boolean flagging if we have traffic from this stream.
-        */
-        TBool iDataReceived;
-        };
-    
-    /**
-    * Array of receive streams.
-    */    
-    RArray<TReceiveStream> iReceiveStreams;
-    
-    /**
-    * Boolean flagging if we have found traffic from all receive streams.
-    */
-    TBool iTrafficFound;
-    
-    };
-
-#endif // CCRRTSPPACKETSOURCE_H
-
-// End of file