[Sumover-dev] [svn commit] r4248 - vic/branches/cc/rtp

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Thu Aug 7 16:29:50 BST 2008


Author: soohyunc
Date: Thu Aug  7 16:29:49 2008
New Revision: 4248

Modified:
   vic/branches/cc/rtp/rtp.h
   vic/branches/cc/rtp/session.cpp
   vic/branches/cc/rtp/session.h

Log:
XR header and block contents separated. this is because we want to use "chunks"
as AckVec and the time stamp depending upon the block type (BT).


Modified: vic/branches/cc/rtp/rtp.h
==============================================================================
--- vic/branches/cc/rtp/rtp.h	(original)
+++ vic/branches/cc/rtp/rtp.h	Thu Aug  7 16:29:49 2008
@@ -132,13 +132,16 @@
  * RTCP Extended Report.
  * (RFC 3611)
  */
-struct rtcp_xr {
+struct rtcp_xr_hdr {
 	u_int32_t xr_flags;	/* BT:8 TS:8 LEN:16 */
-	u_int32_t xr_srcid;	/* SSRC of the RTP data packet being 
-				   reported upon by this report block */
-	u_int16_t xr_begin_seq;	/* first seqno that this block report */
-	u_int16_t xr_end_seq;	/* last seqno that this block report plus 1 */
-	u_int32_t xr_ackvec;	/* Ack vector bit chunk */
+};
+
+struct rtcp_xr_blk {
+	u_int32_t blk_flags; /*BT:8 rsvd:4 T:4 LEN:16 */
+	u_int32_t ssrc;	/* ssrc of the RTP data pkt being reported upon by this */
+	u_int16_t begin_seq; /* first seqno that this block report */
+	u_int16_t end_seq;	/* last seqno that this block report plus 1 */
+	u_int32_t chunk;	/* extended report chunks */
 };
 
 #define RTCP_PT_SR	200	/* sender report */

Modified: vic/branches/cc/rtp/session.cpp
==============================================================================
--- vic/branches/cc/rtp/session.cpp	(original)
+++ vic/branches/cc/rtp/session.cpp	Thu Aug  7 16:29:49 2008
@@ -613,7 +613,8 @@
 	sl.lts_ctrl(now);
 	int we_sent = 0;
 	rtcp_rr* rr;
-	rtcp_xr* xr;	// extended report
+	rtcp_xr_hdr* xrh;	// extended report header
+	rtcp_xr_blk* xrb;	// extended report block
 	Tcl& tcl = Tcl::instance();
 
 	/*
@@ -643,10 +644,12 @@
 	// if CC is turned on, we need XR report
 	if (is_cc_on()) {
 		flags |= RTCP_PT_XR;		// setting flags to XR
-		xr = (rtcp_xr*)(rh + 1);	// extended report
-		xr->xr_begin_seq = lastseq_;// this will be used for ackofack
-		xr->xr_end_seq = seqno_ + 1;// as defined in RFC3611 section 4.1
-		xr->xr_ackvec = get_ackvec();	// ackvec
+		xrh = (rtcp_xr_hdr*)(rh + 1);	// XR header
+		int xrlen = xrh->xr_flags << 16 >> 16;	// XR length
+		xrb = (rtcp_xr_blk*)(xrh + xrlen + 1);	// XR block
+		xrb->begin_seq = lastseq_;// this will be used for ackofack
+		xrb->end_seq = seqno_ + 1;// as defined in RFC3611 section 4.1
+		xrb->chunk = get_ackvec();	// ackvec
 	}
 
 	int nrr = 0;
@@ -1066,10 +1069,10 @@
 
 	s->layer(layer).lts_ctrl(unixtime());
 	int cnt = flags >> 8 & 0x1f;
-	parse_xr_records(ssrc, (rtcp_xr*)(rh + 1), cnt, ep, addr);
+	parse_xr_records(ssrc, (rtcp_xr_hdr*)(rh + 1), cnt, ep, addr);
 }
 
-void SessionManager::parse_xr_records(u_int32_t ssrc, rtcp_xr* r, int cnt,
+void SessionManager::parse_xr_records(u_int32_t ssrc, rtcp_xr_hdr* xrh, int cnt,
 				      const u_char* ep, Address & addr)
 {
 	debug_msg("XXX parse_xr_records\n");
@@ -1077,12 +1080,15 @@
 	UNUSED(ep);
 	UNUSED(addr);
 
+	rtcp_xr_blk* xrb;
+	int xrlen = xrh->xr_flags << 16 >> 16;
+	xrb = (rtcp_xr_blk*)(xrh + xrlen + 1);
 	/*
-	 * if AoA is received, then first trim ackvec and send a new ackvec
+	 * if AoA is received, trim ackvec and send a new ackvec
 	 * if AckVec is received, then parse it to TfwcSndr
 	 */
-	ackvec_ = r->xr_ackvec;
-	ackofack_ = r->xr_begin_seq;
+	ackvec_ = xrb->chunk;
+	ackofack_ = xrb->begin_seq;
 	tfwc_sndr_recv(ackvec_);	// parse AckVec
 }
 

Modified: vic/branches/cc/rtp/session.h
==============================================================================
--- vic/branches/cc/rtp/session.h	(original)
+++ vic/branches/cc/rtp/session.h	Thu Aug  7 16:29:49 2008
@@ -148,7 +148,7 @@
 		      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,
+	void parse_xr_records(u_int32_t ssrc, rtcp_xr_hdr* xrh, 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);



More information about the Sumover-dev mailing list