multimediacommscontroller/mmccsubcontroller/inc/mccrtpkeepalive.h
changeset 0 1bce908db942
child 18 817c922b90eb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccsubcontroller/inc/mccrtpkeepalive.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,259 @@
+/*
+* Copyright (c) 2002-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:    RTP Keepalive mechanism
+*
+*/
+
+
+
+
+#ifndef MCCRTPKEEPALIVE_H
+#define MCCRTPKEEPALIVE_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "rtpdef.h"
+#include "rtpapi.h"
+#include "rtpheader.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+    
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class MAsyncEventHandler;
+class MMccResources;
+class MMccRtpInterface;
+class CMccRtpMediaClock;
+
+// CLASS DECLARATION
+
+/**
+*
+*/
+NONSHARABLE_CLASS( CMccRtpKeepalive ) : public CActive
+    {
+    public: // enums
+    
+        enum TMccRtpKeepaliveState
+            {
+            EIdle,
+            ESending,
+            EWaitingTimer,
+            ESendingPending
+            };
+            
+    public: // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CMccRtpKeepalive* NewL( MAsyncEventHandler& aEventHandler,
+                                       CRtpAPI& aRtpAPI,
+                                       TRtpId aRtpSessionId,
+                                       TUint8 aKeepalivePayloadType,
+                                       TUint8 aKeepaliveInterval,
+                                       const TDesC8& aKeepaliveData,
+                                       TBool aRemoteAddressSet );
+        
+        /**
+        * Destructor
+        */
+        virtual ~CMccRtpKeepalive();
+
+    public:     // New functions
+        
+        /**
+         * Start sending keepalive packets.
+         *
+         * @since Series 60 3.2
+         * @param aUser rtp interface instance 
+         * @param aRtpMediaClock rtp media clock instance
+         * @return void
+         */  
+        void StartKeepaliveL( MMccRtpInterface& aUser, 
+                              CMccRtpMediaClock& aRtpMediaClock );
+        
+        /**
+         * Stop sending keepalive packets.
+         *
+         * @since Series 60 3.2
+         * @param aUser rtp interface instance
+         * @param aRefCount array index to rtp interface intance array
+         * @return One of the standard system-wide error codes.
+         */  
+        TInt StopKeepalive( MMccRtpInterface& aUser, TInt& aRefCount );
+        
+        /**
+         * Reset keepalive timer.
+         *
+         * @since Series 60 3.2
+         * @param None
+         * @return void
+         */  
+        void ResetKeepaliveTimer();
+        
+        /**
+         * Getter function for rtp stream id.
+         *
+         * @since Series 60 3.2
+         * @param None
+         * @return rtp stream Id.
+         */
+        TRtpId StreamId() const;
+
+        TUint8 PayloadType() const;
+        
+        TInt RemoteAddressSet();
+        
+        /**
+         * Function for checking if there is a sink in the array.
+         * 
+         * @since Series 60 3.2
+         * @return ETrue if sink exits
+         */    
+        TBool IsForSink();
+        
+        /**
+         * Update session keepalive parameters
+         *
+         * @since Series 60 3.2
+         * @param aKeepalivePT payload type for keepalive
+         * @param aKeepaliveInterval interval to execute packet sending
+         * @param aKeepaliveData data to add in keepalive packets
+         * @return void
+         */
+        void UpdateParamsL( TUint8 aKeepalivePT,
+                            TUint8 aKeepaliveInterval,
+                            const TDesC8& aKeepaliveData );
+        
+    protected:  // New functions
+    
+    protected:  // Functions from CActive
+    
+        void RunL();
+        
+        void DoCancel();
+        
+        TInt RunError( TInt aError );
+    
+    private:    // New functions
+    
+        TBool ResolveActivity();
+    
+        TInt ToggleKeepaliveSending( TBool aIsActive );
+    
+        TInt StartSending();
+        
+        TInt Send();
+    
+        TUint16 Random() const;
+        
+        void SendErrorToClient( TInt aError );
+        
+    private:    // Constructors
+
+        /**
+        * C++ default constructor.
+        */
+        CMccRtpKeepalive( MAsyncEventHandler& aEventHandler,
+                          CRtpAPI& aRtpAPI,
+                          TRtpId aRtpSessionId,
+                          TBool aRemoteAddressSet );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( TUint8 aKeepalivePayloadType,
+                         TUint8 aKeepaliveInterval,
+                         const TDesC8& aKeepaliveData );       
+
+    public:     // Data
+    
+    protected:  // Data
+
+    private:    // Data
+        
+        // Callback for errors
+        MAsyncEventHandler& iEventHandler;
+
+        // RTP stack API reference
+        CRtpAPI& iRtpAPI;
+        
+        TRtpId iRtpSessionId;
+        
+        // Stream id for the RTP Keepalive transmit stream
+        TRtpId iRtpStreamId;
+        
+        RTimer iTimer;
+        
+        TMccRtpKeepaliveState iCurrentState;
+        
+        TRtpSSRC iSSRC;
+        
+        TRtpSequence iSequenceNum;
+        
+        TRtpSendHeader iRtpHeaderInfo;
+        
+        TInt iKeepaliveInterval;
+        
+        HBufC8* iKeepaliveData;
+        
+        TTime iInitialTime;
+        TTime iCurrentTime;
+        
+        RPointerArray<MMccRtpInterface> iUsers;
+        
+        TBool iRemoteAddressSet;
+        
+        /**
+         * Boolean indicating if rtp sink exists.
+         */
+        TBool iRtpSinkExists;
+        
+        /**
+         * Rtp sink index in iUsers array.
+         */
+        TUint iRtpSinkIndex;
+        
+        /**
+         * Rtp media clock instance
+         * Not own.
+         */
+        CMccRtpMediaClock* iRtpMediaClock;
+        
+        /**
+         * Boolean indicating if pre audio keep alive packet is sent
+         */
+        TBool iPreAudioPacketSent;
+
+
+    public:     // Friend classes
+
+    protected:  // Friend classes
+
+    private:    // Friend classes
+    
+        #ifdef TEST_EUNIT
+        friend class UT_CMccRtpKeepalive;
+        #endif
+    };
+    
+#endif      // MCCRTPKEEPALIVE_H
+
+// End of File