realtimenetprots/rtp/rtpcore/test/trtpsocket/src/trtpcoreserver.h
changeset 0 307788aac0a8
child 19 b5e99d8877c7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/rtp/rtpcore/test/trtpsocket/src/trtpcoreserver.h	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,459 @@
+// Copyright (c) 2007-2009 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:
+// Header for class specific to rtp unit tests
+// 
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#if (!defined T_RTPCORESERVER_H__)
+#define T_RTPCORESERVER_H__
+#include <testexecuteserverbase.h>
+
+#if (!defined __DATA_CAGING__)
+IMPORT_C TInt NewServer();
+#endif
+
+#include "rtpcontroller.h"
+#include "rtcppacket.h"
+#include "rtppacket.h"
+
+
+class CTRtpCoreStep;
+
+class CTRtpCoreServer : public CTestServer
+	{
+public:
+	static CTRtpCoreServer* NewL();
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+	~CTRtpCoreServer();
+
+	// Member functions used by test steps
+	/*
+	static void StopScheduler(CTrtpServer* aPtr, const TRtpEvent& aEvent);
+	*/
+	static TBool CompareRtpHeadersFromBuf(TDesC8& buf1,TDesC8& buf2);
+	static TBool CompareRtpHeaderWithBuf(TRtpFixedHdrMemLayout& aHeader,TDesC8& aBuf);
+	static TBool CompareRtcpHeadersFromBuf(TDesC8& buf1,TDesC8& buf2);
+	static TBool CompareRtcpHeaderWithBuf(TRtcpFixedHdrMemLayout& aHeader,TDesC8& aBuf);
+	// Members used by the steps
+	
+	TBool iOom;
+	CTRtpCoreStep* iCurrentStep;
+	TBool iStopping;
+	TInt iStopCount;
+	
+	RConnection iConnection;
+	RSubConnection iSubConnection;
+	
+	// generic socket, e..g send
+	RSocket iSocket;
+	// for connected/bind socket use cases
+	RSocket iRtpSocket;
+	RSocket iRtcpSocket;
+	TBool iUsingConnectedSocket;
+
+	CActiveScheduler* iScheduler;
+	RSocketServ iSocketServer;
+	CRtpControllerBase* iController;
+	CRtpControllerBase* iSendController;
+ private:
+	CTRtpCoreServer();
+	};
+
+
+class CWaiter : public CBase, public MRtpDataObserver
+	{
+ public:
+	static CWaiter* NewLC(CTRtpCoreServer* aServer);
+
+	~CWaiter();
+	
+	void DataAvailable(TInt aErrorCode);
+	
+ private:
+	CWaiter(CTRtpCoreServer* aServer) : iServer(aServer) 
+			{
+			};
+
+	CTRtpCoreServer* iServer;
+	
+ public:
+    TRequestStatus iStatus;
+	};
+
+struct TRtpFixedHeader
+  	{
+  	TUint8 iVersion:2;		// protocol version
+  	TUint8 iP:1;			// padding flag
+  	TUint8 iX:1;			// header extension flag
+  	TUint8 iCC:4;			// CSRC count
+  	TUint8 iM:1;			// marker bit
+  	TUint8 iPT:7;			// payload type
+  	TUint16	iSequenceNo;	// sequence number
+  	TUint32	iTimeStamp;		// timestamp
+  	TUint32	iSSRC;			// synchronization source
+  	//RArray<TUint32> iCSRC; // optional CSRC list
+  	TRtpFixedHeader();
+  	};
+
+inline TRtpFixedHeader::TRtpFixedHeader()
+  	{
+  	iVersion = KRtpVersion2;	// protocol version = 2
+  	iP = 0;						// padding flag
+  	iX = 0;						// header extension flag
+  	iCC = 0;					// CSRC count
+  	iM = 0;						// marker bit
+  	iPT = 0;					// payload type
+  	iSequenceNo = 0;			// sequence number
+  	iTimeStamp = 0;				// timestamp
+  	iSSRC = 0;					// synchronization source
+  	}
+
+class CRtpFixedHeader
+   	{
+   public:
+   	CRtpFixedHeader(TDes8& packet);
+   	CRtpFixedHeader();
+   	~CRtpFixedHeader();
+   	void SetVersion(TUint aVersion);
+   	void SetCSRCCount(TUint aCC);
+   	void SetSequenceNumber(TUint16 aNo);
+   	void SetSSRC(TUint32 aSSRC);
+   	void SetPadding(TBool aPadding);
+   	void SetExtension(TBool aExtension);
+   	void SetTimeStamp(TUint32 aTime);
+   
+   	TUint32 SSRC();
+   	TUint8 CC();
+   	TBool IsMarker();
+   	TBool IsPadding();
+   	TBool IsExtension();
+   	TUint8 PayloadType();
+   	TUint8 Version();
+   	TUint16 SequenceNumber();
+   	TUint32 TimeStamp();
+   	TUint32 CSRCs(TInt aIndex);
+private:
+   	
+   	TRtpFixedHeader iHeader;
+   	};
+
+// RTCP //
+// Reception report block
+struct TRtcpRRBlock
+	{
+	TUint32 iSSRC;	// data source being reported
+    TUint iFractionLost:8;	// fraction lost since last SR/RR
+	TInt iCumulLost:24;	// cumul. no. pkts lost (signed!)
+	TUint32 iExtendedLastSeq;	// extended last seq. no. received
+    TUint32 iJitter;	// interarrival jitter
+    TUint32 iLastSR;	// last SR packet from this source
+    TUint32 iDSLR;	// delay since last SR packet
+	};
+
+// SDES item
+struct TRtcpSDESItem
+	{
+	TUint8 iType;		// type of item (rtcp_sdes_type_t)
+	TUint8 iLength;		// length of item (in octets)
+	HBufC8* iData;		// text, not null-terminated 
+   };
+
+
+//One RTCP packet
+struct TRtcpPacketStruct
+	{
+	struct
+		{
+		// common part
+		// protocol version
+		TUint iVersion:2;
+		// padding flag
+		TUint iPadding:1;
+		// varies by packet type
+		TUint iCount:5;
+		// RTCP packet type
+		TUint iPacketType:8;
+		// pkt len in words, w/o this word
+		TUint16 iLength;
+		} common;
+	union 
+		{
+		// sender report (SR)
+		struct 
+			{
+			TUint32 iSSRC;     // sender generating this report
+			TUint32 iNtpSeconds;  // NTP timestamp
+			TUint32 iNtpFraction;
+			TUint32 iRtpTimeStamp;   // RTP timestamp
+			TUint32 iPacketsSent;    // packets sent
+			TUint32 iOctetsSent;    // octets sent
+            TRtcpRRBlock iRR[1];  // variable-length list
+			} sr;
+
+		// reception report (RR)
+		struct 
+			{
+			TUint32 iSSRC;		// receiver generating this report
+			TRtcpRRBlock iRR[1];	// variable-length list
+			} rr;
+
+		// source description (SDES)
+		struct
+			{
+			TUint32 iSRC;			// first SSRC/CSRC
+			TRtcpSDESItem iItem[1];	// list of SDES items
+			} sdes;
+
+		// BYE
+		struct 
+			{
+			TUint32 iSRC[1];   // list of sources
+               /* can't express trailing text for reason */
+           } bye;
+
+		// App
+		struct
+			{
+			TUint32 iSRC;
+			HBufC8* iAppName;
+			HBufC8* iAppData;
+			} app;
+		
+       } specific;
+   };
+
+class CRtcpPacketTest
+   	{
+   public:
+   	CRtcpPacketTest(TDes8& aPacket);
+   	//CRtcpRRPacket();
+   	~CRtcpPacketTest();
+	void Init(TDes8& aPacket);
+	TBool operator==(CRtcpPacketTest& aPacket);
+	TBool operator!=(CRtcpPacketTest& aPacket);
+   	void SetVersion(TUint aVersion);
+	void SetPadding(TBool aPadding);
+   	void SetCount(TUint8 aCount);
+   	void SetPacketType(TRtcpPacketType aPacketType);
+	void SetLength(TUint16 aLength);
+   	
+	TUint Version();
+	TBool IsPadding();
+   	TUint8 Count();
+	TRtcpPacketType PacketType();
+   	TUint16 Length();
+   	
+protected:
+   	
+   	TRtcpPacketStruct iPacket;
+   	};
+
+class CRtcpRRPacketTest : public CRtcpPacketTest
+   	{
+   public:
+   	CRtcpRRPacketTest(TDes8& aPacket);
+   	~CRtcpRRPacketTest();
+	TBool operator==(CRtcpRRPacketTest& aPacket);
+	TBool operator!=(CRtcpRRPacketTest& aPacket);
+	void SetSenderSSRC(TUint32 aSSRC);
+	void SetReportSSRC(TUint32 aSSRC);
+	void SetFraction(TUint8 aFraction);
+	void SetLost(TUint aLost);
+	void SetHighestSequence(TUint32 aSeq);
+   	void SetJitter(TUint32 aJitter);
+	void SetLastSR(TUint32 aLastSR);
+   	void SetDSLR(TUint32 aDSLR);
+   
+   	TUint32 SenderSSRC();
+	TUint32 ReportSSRC();
+   	TUint8 Fraction();
+	TUint Lost();
+	TUint32 HighestSequence();
+	TUint32 Jitter();
+	TUint32 LastSR();
+   	TUint32 DSLR();
+   	};
+
+class CRtcpSRPacketTest : public CRtcpPacketTest
+   	{
+   public:
+   	CRtcpSRPacketTest(TDes8& aPacket);
+   	~CRtcpSRPacketTest();
+	TBool operator==(CRtcpSRPacketTest& aPacket);
+	TBool operator!=(CRtcpSRPacketTest& aPacket);
+	void SetSenderSSRC(TUint32 aSSRC);
+
+	void SetNtpMsb(TUint32 aNtpMsb);
+	void SetNtpLsb(TUint32 aNtpLsb);
+	void SetRtpTimeStamp(TUint32 aRtpTs);
+	void SetPacketCount(TUint32 aPacketCount);
+	void SetOctetCount(TUint32 aOctetCount);
+
+	void SetReportSSRC(TUint32 aSSRC);
+	void SetFraction(TUint8 aFraction);
+	void SetLost(TUint aLost);
+	void SetHighestSequence(TUint32 aSeq);
+   	void SetJitter(TUint32 aJitter);
+	void SetLastSR(TUint32 aLastSR);
+   	void SetDSLR(TUint32 aDSLR);
+   
+   	TUint32 SenderSSRC();
+
+	TUint32 NtpMsb();
+	TUint32 NtpLsb();
+	TUint32 RtpTimeStamp();
+	TUint32 PacketCount();
+	TUint32 OctetCount();
+
+	TUint32 ReportSSRC();
+   	TUint8 Fraction();
+	TUint Lost();
+	TUint32 HighestSequence();
+	TUint32 Jitter();
+	TUint32 LastSR();
+   	TUint32 DSLR();
+   	};
+
+class CRtcpByePacketTest : public CRtcpPacketTest
+   	{
+   public:
+   	CRtcpByePacketTest(TDes8& aPacket, TBool aIncreaseOffset = ETrue);
+   	~CRtcpByePacketTest();
+	TBool operator==(CRtcpByePacketTest& aPacket);
+	TBool operator!=(CRtcpByePacketTest& aPacket);
+	void SetSSRC(TUint32 aSSRC);
+	void SetReasonTxt(TDesC8 aReason);
+
+	TInt ReadSROrRRAndSDESAndIncOffset(const TUint8** aPtr);
+   
+   	TUint32 SSRC();
+	TDesC8 ReasonTxt();
+
+	TInt iOffset;  
+   	};
+
+class CRtcpAppPacketTest : public CRtcpPacketTest
+   	{
+   public:
+
+	static CRtcpAppPacketTest* NewL(TDes8& aPacket);
+	CRtcpAppPacketTest(TDes8& aPacket);
+   	~CRtcpAppPacketTest();
+	TBool operator==(CRtcpAppPacketTest& aPacket);
+	TBool operator!=(CRtcpAppPacketTest& aPacket);
+	void SetSSRC(TUint32 aSSRC);
+	void SetAppData(const TDesC8& aAppData);
+	void SetAppName(const TDesC8& aAppName);
+   
+   	TUint32 SSRC();
+	const TDesC8& AppData();
+	const TDesC8& AppName();
+
+   private :
+ void ConstructL(TDes8& aPacket);
+
+   	};
+
+
+
+class CItem : public CBase
+	{
+public:
+	static CItem* NewL( const TDesC8& aItem, TInt aType );
+	static TInt FlatCompare(const CItem& aItemOne, const CItem& aItemTwo ); //Assume that given CItem are a flat-data structures, compare 
+						//them byte by byte, and if all bytes are exactly same
+						//return true
+
+private:
+	void ConstructL( const TDesC8& aItem );
+	CItem( TUint8 aType );
+	~CItem();
+
+	TBool DoFlatCompare( const CItem& aItem ) const;
+
+private:
+	TUint8 iType;
+	HBufC8* iData;
+	};
+
+
+class CRtcpSDESPacketTest : public CRtcpPacketTest
+   	{
+public:
+	static CRtcpSDESPacketTest* NewL(TDes8& aPacket);
+	CRtcpSDESPacketTest(TDes8& aPacket); //Should really be private
+   
+   	~CRtcpSDESPacketTest();
+	TBool operator==(CRtcpSDESPacketTest& aPacket);
+	TBool operator!=(CRtcpSDESPacketTest& aPacket);
+	
+	void SetSSRC(TUint32 aSSRC);
+	void SetType(TSDESType aType);
+	void SetData(const TDesC8& aData);
+
+	TInt SROrRRLength() const;
+	
+
+	TUint32 SSRC();
+	TSDESType Type();
+	const TDesC8& Data();
+
+	CItem* NextL();
+	CItem* First();
+
+private:   
+   void ConstructL(TDes8& aPacket);
+
+private:
+	TInt iOffset;   
+	TInt iPktSize; //Assuming that there is no trailing BYE???
+	TInt iItemCount; 
+	CItem* iFirstItem;
+
+	const TUint8* iStartOfPkt;
+	TInt iCurrentOffset;
+  	};
+
+
+class RSdesItemManager
+	{
+public:
+	RSdesItemManager();
+	~RSdesItemManager();
+
+	TInt Open();
+	void Close();
+
+	TInt StoreL( const TDesC8& aItem, TInt aItemType );
+	TInt SegregateItemsL();
+	TInt CompareSentAndReceivedValues();
+
+	void SetRecvBuffer( CRtcpSDESPacketTest * aSdesPkt ) { iSdesPkt = aSdesPkt; }
+
+private:
+	RPointerArray<CItem> iArray;//Sent items list
+	TInt iCurrentItem;
+
+	RPointerArray<CItem> iSegregatedItemsArray;//received items list
+	TInt iSegregatedItemsArrayID;
+
+	CRtcpSDESPacketTest * iSdesPkt;
+	};
+
+#endif