multimediacommscontroller/mmccsubcontroller/inc/mccrtpmanager.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccsubcontroller/inc/mccrtpmanager.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,338 @@
+/*
+* Copyright (c) 2004-2007 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:    RTP session handling 
+*
+*/
+
+
+
+
+#ifndef MCCRTPMANAGER_H
+#define MCCRTPMANAGER_H
+
+//  INCLUDES
+#include "rtpapi.h"
+#include "mccqoseventobserver.h"
+
+// FORWARD DECLARATIONS
+class MAsyncEventHandler;
+class MDataSink;
+class MDataSource;
+class TMccCodecInfo;
+class CMccRtcpReceiver;
+class MMccResources;
+class CMccRtpKeepaliveContainer;
+class TMccCreateLink;
+class CSRTPSession;
+class CMccQosHandler;
+
+
+// CLASS DECLARATION
+
+/**
+*  Mcc RTP Manager implements Mcc RTP API handling.
+*
+*  @since Series 60 3.0
+*/
+NONSHARABLE_CLASS( CMccRtpManager ) : public CBase, public MRtpErrNotify,
+	public MMccQosEventObserver
+	{
+	public:	// Constructors and destructor
+
+		/**
+        * Two-phased constructor.
+        */
+        static CMccRtpManager* NewL( MAsyncEventHandler& aHandler, 
+                                     MMccResources& aMccResources,
+                                     TUint32 aMccSessionId );
+
+		/**
+        * Destructor.
+        */
+        virtual ~CMccRtpManager();
+
+	public:	// New functions
+
+        /**
+        * Create RTP session.
+        * @since Series 60 3.0
+        * @param aRemoteAdd	- [input] Remote IP-address
+        * @param aPort
+        * - [input] Local UDP/IP port number proposed to use 
+        * - [output] Local UDP/IP port number allocated
+		* @param aEnableRTCP - [input] Enable RTCP handling for the session
+        * @param aSecure - [input]   Indicates is secure session to be created
+        * @param aIncreaseDefaultSocketSize - [input] ETrue if default socket size
+        *           of RTP stack should be increased.
+        * @return void
+        */
+        void CreateSessionL( TUint& aPort, 
+                             TBool aEnableRTCP, 
+                             TBool aSecure, 
+                             TBool aIncreaseDefaultSocketSize = EFalse );
+
+		/**
+        * Close RTP session.
+        * @since Series 60 3.0
+        * @param None
+        * @return None
+        */
+        void CloseSession();
+
+        /**
+        * Get RTPApi reference.
+        * @since Series 60 3.0
+        * @param None
+        * @return pointer to RtpApi
+        */
+        CRtpAPI* GetRtpReferenceL();
+
+        /**
+        * Sets remote address.
+        * @since Series 60 3.0
+		* @param aRemoteAddress	- [input] Remote IP-address
+        * @return KErrNone if successful
+        */
+        TInt SetRemoteAddress( const TInetAddr& aRemoteAddress );
+
+		/**
+        * Sets remote address.
+        * @since Series 60 3.0
+		* @param aRemoteAddress	- [input] Remote IP-address
+        * @return KErrNone if successful
+        */
+        TInt SetRemoteRtcpAddr( const TInetAddr& aRemoteAddress );
+        
+        /**
+        * Sets TOS flag, must be called before StartSession
+        * @since Series 60 3.0
+        * @param aIpTOS	- [input] TOS
+        * @return void
+        */
+        void SetIpTOS( TInt aIpTOS );
+
+        /**
+        * Starts RTP session.
+        * @since Series 60 3.0
+        * @param None
+        * @return void
+        */
+        void StartSessionL();
+
+        /**
+        * Initializes RTP session.
+        * @since Series 60 3.0
+        * @param aStatus - Async status
+        * @param aIapId	- [input] Iap ID
+        * @return KErrNone if successful
+        */
+        void InitializeL( TRequestStatus& aStatus, TInt aIapId );
+		
+        /**
+        * Returns the session ID for this RTP manager object
+        * @since Series 60 3.0
+        * @param None
+        * @return TRtpId Session Identifier
+        */
+        TRtpId SessionId() const;
+        
+        /**
+        * Creates a new transmit stream
+        * @since Series 60 3.0
+        * @param aSink RTP Datasink
+        * @param aCodecInfo Codec information
+        * @return void
+        */
+        TUint32 CreateTransmitStreamL( MDataSink& aSink, 
+                const TMccCodecInfo& aCodecInfo );
+        
+        /**
+        * Creates a new receive stream
+        * @since Series 60 3.0
+        * @param MDataSource RTP datasource
+        * @param aCodecInfo Codec information
+        * @retun void
+        */ 
+        TUint32 CreateReceiveStreamL( MDataSource& aSource, 
+                const TMccCodecInfo& aCodecInfo );
+
+        /**
+        * Sets RTCP sending and receiving.
+        * @param aSend [input] ETrue if automatic RTCP sending and 
+        *        RTCP receiving is enabled
+        * @return KErrNone if successful
+        */
+        TInt SetRTCPSendReceive( TBool aEnableRtcp );
+        
+        /**
+        * Sets id of the link where the rtp manager belongs.
+        */
+        void SetLinkId( TUint32 aLinkId );
+        
+        /**
+        * Updates rtp manager.
+        */
+        void UpdateL( const TMccCodecInfo* aCodecInfo = 0 );
+
+        /**
+         * Resolves local IP address and ports from RTP API.
+         * For NATFW support.
+         * @since Series 60 3.2
+         * @param aClientData Client data
+         * @return void
+         */
+        void GetLocalIpAddressesL( TMccCreateLink& aClientData );
+
+        /*
+        * Sets RTP CName.
+        */
+        void SetCNameL( const TDesC8& aCName );
+
+        /**
+        * Returns the MCC session ID
+        * @since Series 60 3.0
+        * @param None
+        * @return TRtpId Session Identifier
+        */
+        TUint32 MccSessionId() const;
+        
+    public: // Functions from base classes
+
+        /**
+        * From MRtpErrNotify Error call back.
+        */
+        void ErrorNotify( TInt aErrCode );
+        
+                                 
+        /**
+         * From MMccQosEventObserver
+         */        
+        void QoSParamEvent( TInt aError, TUint32 aEvent );
+
+        /**
+         * From MMccQosEventObserver
+         */
+        void QoSConnEvent( TInt aError, TUint32 aEvent );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CMccRtpManager( MAsyncEventHandler& aHandler,
+                        MMccResources& aMccResources,
+                        TUint32 aSessionId );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Remove RTP session from SessionArray.
+        * @since Series 60 3.0
+        * @param aStreamId - [input] RTP stream ID
+        * @return None
+        */
+        void RemoveStreamFromArray( const TRtpId& aStreamId );
+
+        /**
+        * Check Session Exists.
+        * @since Series 60 3.0
+        * @param aStreamId - [input] RTP stream ID
+        * @return TBool
+        */
+        TBool CheckStreamExists( const TRtpId& aStreamId ) const;
+
+        /**
+        * Check RTP Api is open.
+        * @since Series 60 3.0
+        * @param None
+        * @return TBool
+        */
+        TBool IsOpen() const;
+
+    private:    // Data
+
+        // Session ID RTP manager handles one RTP session
+        TRtpId iRtpSessionId;
+        
+        // Stream Array. One RTP session may have many RTP streams
+        RArray<TRtpId> iStreamArray;
+
+        // RTPApi instance
+        CRtpAPI* iRtpApi;
+        
+        // Eventhandler for errors
+        MAsyncEventHandler& iEventHandler;
+        
+        MMccResources& iMccResources;
+        
+        // TOS bit setting
+        TInt iIpTOS;
+        
+        // Source description
+        TRtpSdesParams iRtpSdes;
+        
+        // Local port
+        TUint iLocalPort;
+        
+        // RTCP On/Off status
+        TBool iRtcpEnabled;
+        
+        // Remote address for this session
+        TInetAddr iRemoteAddress;
+        
+        TInetAddr iRemoteRtcpAddr;
+        
+        CMccRtcpReceiver* iRtcpReceiver;
+        
+        CMccRtpKeepaliveContainer* iRtpKeepaliveMechanism;
+        
+        // SocketServ
+        RSocketServ iSocketServ;
+        
+        // Connection
+        RConnection iConnection;
+        
+        TUint32 iLinkId;
+        
+        // MCC session ID
+        TUint32 iMccSessionId;
+        
+        TRtpId iDummyRcvStreamId;
+        
+        /**
+         * Pointer to SRTP session
+         * Own.
+         */
+        CSRTPSession* iSecSession;
+        
+        /**
+         * Pointer to QoS Plugin
+         * Own.
+         */
+        CMccQosHandler* iQosHandler;
+
+        HBufC8* iCName;
+	#ifdef EUNIT_TEST
+        friend class UT_CMccRtpManager;
+        friend class UT_CMccSymSubthreadClient;
+    #endif
+
+	};
+
+#endif	// MCCRTPMANAGER_H
+
+// End of File