[Sumover-dev] [svn commit] r4234 - in vic/branches/cc: . rtp

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Tue Aug 5 14:29:32 BST 2008


Author: soohyunc
Date: Tue Aug  5 14:29:31 2008
New Revision: 4234

Added:
   vic/branches/cc/cc/tfwc_sndr.cpp
      - copied, changed from r4233, /vic/branches/cc/cc/cc.cpp
   vic/branches/cc/cc/tfwc_sndr.h
      - copied, changed from r4230, /vic/branches/cc/cc/cc.h
Removed:
   vic/branches/cc/cc/cc.cpp
   vic/branches/cc/cc/cc.h
Modified:
   vic/branches/cc/Makefile.in
   vic/branches/cc/rtp/rtp.h
   vic/branches/cc/rtp/session.cpp
   vic/branches/cc/rtp/session.h
   vic/branches/cc/rtp/transmitter.h

Log:
o  on-going ackvec implementation


Modified: vic/branches/cc/Makefile.in
==============================================================================
--- vic/branches/cc/Makefile.in	(original)
+++ vic/branches/cc/Makefile.in	Tue Aug  5 14:29:31 2008
@@ -152,7 +152,7 @@
 	render/color-gray.o render/color-mono.o render/color-hist.o \
 	render/rgb-converter.o render/vw.o render/ppm.o \
 	@V_OBJ@ \
-	cc/cc.o
+	cc/tfwc_sndr.o
 
 
 OBJ3 =	cm0.o cm1.o huffcode.o version.o bv.o codec/pvh-huff.o \

Copied: vic/branches/cc/cc/tfwc_sndr.cpp (from r4233, /vic/branches/cc/cc/cc.cpp)
==============================================================================
--- /vic/branches/cc/cc/cc.cpp	(original)
+++ vic/branches/cc/cc/tfwc_sndr.cpp	Tue Aug  5 14:29:31 2008
@@ -42,13 +42,13 @@
 #include "vic_tcl.h"
 #include "module.h"
 #include "transmitter.h"
-#include "cc.h"
+#include "tfwc_sndr.h"
 
-CcManager::CcManager() :
+TfwcSndr::TfwcSndr() :
 	seqno_(-1) 
 {}
 
-void CcManager::cc_parse_buf(pktbuf* pb) {
+void TfwcSndr::cc_parse_buf(pktbuf* pb) {
 
 	// get RTP hearder information
 	rtphdr* rh =(rtphdr*) pb->data;
@@ -59,6 +59,6 @@
 	debug_msg("sent seqno:		%d\n", seqno_);
 }
 
-u_int16_t CcManager::cc_get_seqno() {
+u_int16_t TfwcSndr::cc_get_seqno() {
 	return seqno_;
 }

Copied: vic/branches/cc/cc/tfwc_sndr.h (from r4230, /vic/branches/cc/cc/cc.h)
==============================================================================
--- /vic/branches/cc/cc/cc.h	(original)
+++ vic/branches/cc/cc/tfwc_sndr.h	Tue Aug  5 14:29:31 2008
@@ -33,18 +33,18 @@
  * $Id$
  */
 
-#ifndef vic_cc_h
-#define vic_cc_h
+#ifndef vic_tfwc_sndr_h
+#define vic_tfwc_sndr_h
 
-class CcManager {
+class TfwcSndr {
 public:
-	CcManager();
+	TfwcSndr();
 	void cc_parse_buf(pktbuf*);	// get pktbuf from transmitter module
 	u_int16_t cc_get_seqno();		// return packet sequence number
 	u_int16_t seqno_;			// packet sequence number
 
 protected:
-	CcManager* ccman_;
+	TfwcSndr* tfwcsndr_;
 private:
 };
 

Modified: vic/branches/cc/rtp/rtp.h
==============================================================================
--- vic/branches/cc/rtp/rtp.h	(original)
+++ vic/branches/cc/rtp/rtp.h	Tue Aug  5 14:29:31 2008
@@ -128,6 +128,15 @@
 	u_int32_t rr_dlsr;	/* time from recpt of last rr to xmit time */
 };
 
+/*
+ * RTCP Extended Report
+ * (RFC 3611)
+ */
+struct rtcp_xr {
+	u_int32_t xr_flags;		/*BT:8 TS:8 LEN:16*/
+	u_int32_t xr_ackvec;	/* Ack vector bit chunk */
+};
+
 #define RTCP_PT_SR	200	/* sender report */
 #define RTCP_PT_RR	201	/* receiver report */
 #define RTCP_PT_SDES	202	/* source description */
@@ -141,6 +150,7 @@
 #define 	RTCP_SDES_PRIV	8	/* private SDES extensions */
 #define RTCP_PT_BYE	203	/* end of participation */
 #define RTCP_PT_APP	204	/* application specific functions */
+#define RTCP_PT_XR	207 /* extended report */
 
 #define		RTCP_SDES_MIN	1
 #define		RTCP_SDES_MAX	7

Modified: vic/branches/cc/rtp/session.cpp
==============================================================================
--- vic/branches/cc/rtp/session.cpp	(original)
+++ vic/branches/cc/rtp/session.cpp	Tue Aug  5 14:29:31 2008
@@ -50,7 +50,7 @@
 #include "timer.h"
 #include "ntp-time.h"
 #include "session.h"
-#include "cc/cc.h"
+#include "cc/tfwc_sndr.h"
 
 /* added to support the mbus 
 #include "mbus_handler.h"*/
@@ -614,6 +614,7 @@
 	sl.lts_ctrl(now);
 	int we_sent = 0;
 	rtcp_rr* rr;
+	rtcp_xr* xr;	// extended report
 	Tcl& tcl = Tcl::instance();
 
 	/*
@@ -635,9 +636,11 @@
 		sr->sr_np = htonl(sl.np());
 		sr->sr_nb = htonl(sl.nb());
 		rr = (rtcp_rr*)(sr + 1);
+		xr = (rtcp_xr*)(rr + 1);
 	} else {
 		flags |= RTCP_PT_RR;
 		rr = (rtcp_rr*)(rh + 1);
+		xr = (rtcp_xr*)(rr + 1);	// extended report
 	}
 	int nrr = 0;
 	int nsrc = 0;
@@ -657,7 +660,7 @@
 		//		int received = sp->np() - sp->snp();
 		int received = sl.np() - sl.snp();
 		if (received == 0) {
-			//			if (u_int(now.tv_sec - sp->lts_ctrl().tv_sec) > inactive)
+			//		if (u_int(now.tv_sec - sp->lts_ctrl().tv_sec) > inactive)
 			if (u_int(now.tv_sec - sl.lts_ctrl().tv_sec) > inactive)
 				--nsrc;
 			continue;
@@ -765,6 +768,9 @@
 	return (8);
 }
 
+/*
+ * receive an RTP packet
+ */
 void SessionManager::recv(DataHandler* dh)
 {
 	int layer = dh - dh_;
@@ -798,16 +804,16 @@
 	} // now, loopback packets ignored (if disabled) 
 
 	// set bit vector
-	for (int i = lastseq_; i <= seqno_; i++) {
+	for (int i = lastseq_+1; i <= seqno_; i++) {
 			SET_BIT_VEC (ackvec_, 1);
 	}
 
 	// printing bit vector
 	bool isThere;
-	printf("XXX received packet number: ");
-	for (int i = lastseq_; i <= seqno_; i++) {
+	debug_msg("XXX received ackvec:");
+	for (int i = lastseq_+1; i <= seqno_; i++) {
 		isThere = SEE_BIT_VEC (ackvec_, i, seqno_);
-		printf(" %d: %s ", i, isThere ? "OK" : "NOK");
+		printf(" %d... %s ", seqno_, isThere ? "Ok" : "NOk");
 	}
 	printf("\n");
 	lastseq_ = seqno_;
@@ -1052,6 +1058,33 @@
 	parse_rr_records(ssrc, (rtcp_rr*)(rh + 1), cnt, ep, addr);
 }
 
+void SessionManager::parse_xr(rtcphdr* rh, int flags, u_char* ep,
+							  Source* ps, Address & addr, int layer)
+{
+	UNUSED(flags);
+	UNUSED(ep);
+	UNUSED(ps);
+	UNUSED(addr);
+	UNUSED(layer);
+
+	Source* s;
+	u_int32_t ssrc = rh->rh_ssrc;
+	if (ps->srcid() != ssrc)
+		s = SourceManager::instance().lookup(ssrc, ssrc, addr);
+	else
+		s = ps;
+
+	s->layer(layer).lts_ctrl(unixtime());
+	int cnt = flags >> 8 & 0x1f;
+	parse_xr_records(ssrc, (rtcp_xr*)(rh + 1), cnt, ep, addr);
+}
+
+void SessionManager::parse_xr_records(u_int32_t ssrc, rtcp_xr* r, int cnt,
+				      const u_char* ep, Address & addr)
+{
+	
+}
+
 int SessionManager::sdesbody(u_int32_t* p, u_char* ep, Source* ps,
 						Address & addr, u_int32_t ssrc, int layer)
 {
@@ -1162,6 +1195,7 @@
 	switch(ntohs(rh->rh_flags) & 0xc0ff) {
 	case RTP_VERSION << 14 | RTCP_PT_SR:
 	case RTP_VERSION << 14 | RTCP_PT_RR:
+	case RTP_VERSION << 14 | RTCP_PT_XR:
 	case RTP_VERSION << 14 | RTCP_PT_BYE:
 		break;
 	default:
@@ -1220,6 +1254,10 @@
 			parse_rr(rh, flags, ep, ps, addr, layer);
 			break;
 
+		case RTCP_PT_XR:
+			parse_xr(rh, flags, ep, ps, addr, layer);
+			break;
+
 		case RTCP_PT_SDES:
 			parse_sdes(rh, flags, ep, ps, addr, ssrc, layer);
 			break;
@@ -1234,5 +1272,6 @@
 		}
 		rh = (rtcphdr*)ep;
 	}
+	return;
 }
 

Modified: vic/branches/cc/rtp/session.h
==============================================================================
--- vic/branches/cc/rtp/session.h	(original)
+++ vic/branches/cc/rtp/session.h	Tue Aug  5 14:29:31 2008
@@ -144,8 +144,12 @@
 		      Source* ps, Address & addr, int layer);
 	void parse_rr(rtcphdr* rh, int flags, u_char* ep,
 		      Source* ps, Address & addr, int layer);
+	void parse_xr(rtcphdr* rh, int flags, u_char* ep,
+		      Source* ps, Address & addr, int layer);
 	void parse_rr_records(u_int32_t ssrc, rtcp_rr* r, int cnt,
 			      const u_char* ep, Address & addr);
+	void parse_xr_records(u_int32_t ssrc, rtcp_xr* r, int cnt,
+			      const u_char* ep, Address & addr);
 	int sdesbody(u_int32_t* p, u_char* ep, Source* ps,
 		     Address & addr, u_int32_t ssrc, int layer);
 	void parse_sdes(rtcphdr* rh, int flags, u_char* ep, Source* ps,

Modified: vic/branches/cc/rtp/transmitter.h
==============================================================================
--- vic/branches/cc/rtp/transmitter.h	(original)
+++ vic/branches/cc/rtp/transmitter.h	Tue Aug  5 14:29:31 2008
@@ -49,13 +49,13 @@
 #include "rtp.h"
 #include "inet.h"
 #include "pktbuf-rtp.h"
-#include "cc/cc.h"
+#include "cc/tfwc_sndr.h"
 
 /*
  * The base object for performing the outbound path of
  * the application level protocol.
  */
-class Transmitter : public TclObject, public Timer, public CcManager {
+class Transmitter : public TclObject, public Timer, public TfwcSndr {
     public:
 	Transmitter();
 	virtual void timeout();



More information about the Sumover-dev mailing list