--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccrtpsourcesink/inc/mccrtpsender.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,211 @@
+/*
+* Copyright (c) 2002-2004 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 sender
+*
+*/
+
+
+
+
+
+#ifndef MCCRTPSENDER_H
+#define MCCRTPSENDER_H
+
+// INCLUDES
+#include <e32base.h>
+#include "rtpapi.h"
+#include "rtpheader.h"
+#include "mccexpirationhandler.h"
+
+
+// FORWARD DECLARATIONS
+class CMccRtpSendItem;
+class CMccTimerManager;
+
+// CLASS DECLARATION
+//
+
+class MMccRtpSenderObserver
+ {
+public:
+ virtual void SendErrorOccured( TInt aError ) = 0;
+ };
+
+class CMccRtpSender : public CActive, public MMccExpirationHandler
+ {
+public:
+
+ /**
+ * Create asynchronous rtp sender.
+ *
+ * @param aObserver
+ * @param aRtpApi
+ * @param aSessionId
+ * @param aDoMarkerBasedCleanup
+ */
+ static CMccRtpSender* NewL( MMccRtpSenderObserver& aObserver,
+ CRtpAPI& aRtpApi,
+ TRtpId aSessionId,
+ TBool aDoMarkerBasedCleanup );
+
+ ~CMccRtpSender();
+
+ /**
+ * Send rtp packet asynchronously. If previous send is pending, packet
+ * is queued unless the queue is full. In that case the packet is discarded.
+ *
+ * @param aRtpStreamId
+ * @param aRtpHeader
+ * @param aData
+ */
+ void SendRtpPacketL( TRtpId aRtpStreamId,
+ const TRtpSendHeader& aRtpHeader,
+ const TDesC8& aData );
+
+ /**
+ * Send a non-RTP (control) data packet.
+ * @param aSessionId RTP Session ID
+ * @param aUseRtpSocket Whether to use RTP or RTCP socket
+ * @param aData Non-RTP data packet to send
+ */
+ void SendDataL( TRtpId aSessionId, TBool aUseRtpSocket,
+ const TDesC8& aData );
+
+ /**
+ * Cancels pending send operation and empties the queue.
+ */
+ void Clear();
+
+protected: // From CActive
+
+ void RunL();
+
+ void DoCancel();
+
+ TInt RunError( TInt aError );
+
+protected: // From MMccExpirationHandler
+
+ void TimerExpiredL( TMccTimerId aTimerId, TAny* aTimerParam );
+
+private:
+
+ void ConstructL();
+
+ CMccRtpSender( MMccRtpSenderObserver& aObserver,
+ CRtpAPI& aRtpApi,
+ TRtpId aSessionId,
+ TBool aDoMarkerBasedCleanup );
+
+ void SendPacketL();
+
+ void RemovePacket( TBool aDoQueueCleanup = EFalse );
+
+ TBool ErrorReport( TInt aError );
+
+ TBool CheckDiscarding( const TRtpSendHeader& aRtpHeader );
+
+ /**
+ * If packet for which aRtpHeader belongs was zero marker frame,
+ * that packet and everything related to that frame is removed from
+ * queue. If full frame couldn't yet be removed, upcoming parts
+ * of the frame are discarded once they are tried to be sent.
+ *
+ * @param aItemIndex
+ * @param aRtpHeader
+ * @return ETrue if queue item in aItemIndex was deleted, otherwise
+ * return EFalse
+ */
+ TBool DoQueueCleanup( TInt aItemIndex, const TRtpSendHeader& aRtpHeader );
+
+private:
+
+ MMccRtpSenderObserver& iObserver;
+
+ CRtpAPI& iRtpApi;
+
+ TRtpId iSessionId;
+
+ CMccTimerManager* iTimeoutTimer;
+
+ RPointerArray<CMccRtpSendItem> iSendQueue;
+
+ TBool iDoMarkerBasedCleanup;
+
+ TBool iDiscarding;
+
+ TUint32 iTimeoutTimeMilliseconds;
+
+ TMccTimerId iTimerId;
+
+#ifdef TEST_EUNIT
+public:
+ friend class UT_CMccRtpSender;
+#endif
+
+ };
+
+class CMccRtpSendItem : public CBase
+ {
+public:
+
+ static CMccRtpSendItem* NewLC( TRtpId aRtpStreamId,
+ const TRtpSendHeader& aRtpHeader,
+ const TDesC8& aData );
+
+ static CMccRtpSendItem* NewLC( TRtpId aSessionId,
+ TBool aUseRtpSocket, const TDesC8& aData );
+
+ ~CMccRtpSendItem();
+
+ const TDesC8& DataPtr() const;
+
+ TRtpId RtpStreamId() const;
+
+ const TRtpSendHeader& RtpHeader() const;
+
+ TRtpId SessionId() const;
+
+ TBool UseRtpSocket() const;
+
+private:
+
+ void ConstructL( const TDesC8& aData );
+
+ CMccRtpSendItem( TRtpId aRtpStreamId, const TRtpSendHeader& aRtpHeader );
+
+ CMccRtpSendItem( TRtpId aSessionId, TBool aUseRtpSocket );
+
+private:
+
+ HBufC8* iData;
+
+ TRtpId iRtpStreamId;
+ TRtpSendHeader iRtpHeader;
+
+ TPtrC8 iDataPtr;
+
+ TRtpId iSessionId;
+ TBool iUseRtpSocket;
+
+private: // Friend classes
+
+ #ifdef TEST_EUNIT
+ friend class UT_CMccRtpSender;
+ #endif
+ };
+
+#endif // MCCRTPSENDER_H
+
+// End of File