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

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Thu Jan 22 18:32:43 GMT 2009


Author: soohyunc
Date: Thu Jan 22 18:32:43 2009
New Revision: 4357

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

Log:
o  because, we are now able to determine if i am a sender or receiver, 
   we are no longer needed two separate methods for sending XR packet.
   (e.g., no need send_xreport(...) and send_xreport_back(...) at the same time)

o  therefore, we removed send_xreport_back(..) and merged it to send_xreport(..)


Modified: vic/branches/cc/rtp/session.cpp
==============================================================================
--- vic/branches/cc/rtp/session.cpp	(original)
+++ vic/branches/cc/rtp/session.cpp	Thu Jan 22 18:32:43 2009
@@ -650,37 +650,62 @@
 	flags |= RTCP_PT_XR;
 
 	// declare XR packet
-	rtcp_xr* xr;
-	xr = (rtcp_xr*)(rh + 1);
+	rtcp_xr* xr = (rtcp_xr*)(rh + 1);
 
 	// ssrc of XR source (currently unused)
 	int xrssrc = 0;	
 	xr->ssrc = htonl(xrssrc);	// UNUSED
 
-	// this block is used for giving seqno and ackofack
-	if(bt == XR_BT_1) {
-		// set XR block flags (block type and length)
-		xr->xr_flags = htons(XR_BT_1 << 8);
-
-		// get current RTP data packet seqno from TfwcSndr
-		xr->begin_seq = htons(tfwc_sndr_get_seqno());
-		xr->end_seq = htons(tfwc_sndr_get_seqno() + 1);
+	// i am an RTP data sender, so i convey a packet seqno and ackofack
+	if (am_i_sender()) {
+		// this block is used for giving seqno and ackofack
+		if(bt == XR_BT_1) {
+			// set XR block flags (block type and length)
+			xr->xr_flags = htons(XR_BT_1 << 8);
+
+			// get current RTP data packet seqno from TfwcSndr
+			xr->begin_seq = htons(tfwc_sndr_get_seqno());
+			xr->end_seq = htons(tfwc_sndr_get_seqno() + 1);
 
-		// set ack of ack
-		xr->chunk = htons(tfwc_sndr_get_aoa());
+			// set ack of ack
+			xr->chunk = htons(tfwc_sndr_get_aoa());
 
-		//debug_msg("	SeqNo:		%d\n", tfwc_sndr_get_seqno());
-	} 
-	// this block is used for giving timestamp
-	else if(bt == XR_BT_3) {
-		// set XR block flags (block type and length)
-		xr->xr_flags = htons(XR_BT_3 << 8);
+			//debug_msg("	SeqNo:		%d\n", tfwc_sndr_get_seqno());
+		} 
+		// this block is used for giving timestamp
+		else if(bt == XR_BT_3) {
+			// set XR block flags (block type and length)
+			xr->xr_flags = htons(XR_BT_3 << 8);
 
-		// get timestamp from TfwcSndr
-		xr->chunk = htonl(tfwc_sndr_get_ts());
+			// get timestamp from TfwcSndr
+			xr->chunk = htonl(tfwc_sndr_get_ts());
 
-		//debug_msg("	TS:		%ld\n", tfwc_sndr_get_ts());
-	}
+			//debug_msg("	TS:		%ld\n", tfwc_sndr_get_ts());
+		}
+	} 
+	// i am an RTP data receiver, so i convey ackvec information
+	else {
+		// this block is used for giving ackvec
+		if (bt == XR_BT_1) {
+			// set XR block type
+			xr->xr_flags = htons(XR_BT_1 << 8);
+
+			// make 'begin_seq' equal to 'end_seq'
+			xr->begin_seq = htons(seqno_);
+			xr->end_seq = htons(seqno_);
+
+			// get ackvec from TfwcRcvr
+			xr->chunk = htons(tfwc_rcvr_getvec());
+		}
+		// this block is used for giving timiestamp echo
+		else if (bt == XR_BT_3) {
+			// set XR block type
+			xr->xr_flags = htons(XR_BT_3 << 8);
+	
+			// get timestamp echo from TfwcRcvr
+			xr->chunk = htonl(tfwc_rcvr_ts_echo());
+		}
+	} // end of if (am_i_sender())
 
 	++xr;
 
@@ -1143,7 +1168,6 @@
 void SessionManager::parse_xr(rtcphdr* rh, int flags, u_char* ep,
 							  Source* ps, Address & addr, int layer)
 {
-	//debug_msg("XXX parse_xr() called!\n");
 	Source* s;
 	u_int32_t ssrc = rh->rh_ssrc;	// RTCP's ssrc
 	if (ps->srcid() != ssrc)
@@ -1157,7 +1181,7 @@
 }
 
 void SessionManager::parse_xr_records(u_int32_t ssrc, rtcp_xr* xr, int cnt,
-				      const u_char* ep, Address & addr)
+				const u_char* ep, Address & addr)
 {
 	//printf("\tentering parse_xr_records()\n");
 	UNUSED(ssrc);
@@ -1265,77 +1289,14 @@
 {
 	// RTCP XR (block type 1)
 	// this block contains ackvec
-	send_xreport_back(ch, XR_BT_1, 0);
+	send_xreport(ch, XR_BT_1, 0);
 }
 
 void SessionManager::build_ts_echo_pkt(CtrlHandler* ch)
 {
 	// RTCP XR (block type 3)
 	// this block contains timestamp echo
-	send_xreport_back(ch, XR_BT_3, 0);
-}
-
-void SessionManager::send_xreport_back(CtrlHandler* ch, int bt, int bye)
-{
-	//printf("\tentering send_xreport_back()\n");
-	UNUSED(bye);
-
-	SourceManager& sm = SourceManager::instance();
-	Source& s = *sm.localsrc();
-	rtcphdr* rh = (rtcphdr*)pktbuf_;
-	rh->rh_ssrc = s.srcid();
-	int flags = RTP_VERSION << 14;	// RTCP flags
-	int layer = ch - ch_; //LLL
-	Source::Layer& sl = s.layer(layer);
-	timeval now = unixtime();
-	sl.lts_ctrl(now);
-
-	// set RTCP flag to  XR packet
-	flags |= RTCP_PT_XR;
-
-	// decalre XR packet
-	rtcp_xr* xr = (rtcp_xr *) (rh + 1);
-
-	// UNUSED
-	int xrssrc = 0;
-	xr->ssrc = htons(xrssrc);
-
-	// this block is used for giving ackvec
-	if (bt == XR_BT_1) {
-		// set XR block type
-		xr->xr_flags = htons(XR_BT_1 << 8);
-
-		// make 'begin_seq' equal to 'end_seq'
-		xr->begin_seq = htons(seqno_);
-		xr->end_seq = htons(seqno_);
-
-		// get ackvec from TfwcRcvr
-		xr->chunk = htons(tfwc_rcvr_getvec());
-	}
-	// this block is used for giving timiestamp echo
-	else if (bt == XR_BT_3) {
-		// set XR block type
-		xr->xr_flags = htons(XR_BT_3 << 8);
-	
-		// get timestamp echo from TfwcRcvr
-		xr->chunk = htonl(tfwc_rcvr_ts_echo());
-	}
-
-	++xr;
-
-	// XR report block length
-	int xrlen = sizeof(xr);
-	xr->xr_len = htons((xrlen >> 2) - 1);
-
-	// RTCP header flags
-	rh->rh_flags = htons(flags);
-
-	// RTCP packet length
-	int len = (u_char *)xr - pktbuf_;
-	rh->rh_len = htons((len >> 2) - 1);
-
-	// send XR report block (this is ackvec)
-	ch->send(pktbuf_, len);
+	send_xreport(ch, XR_BT_3, 0);
 }
 
 int SessionManager::sdesbody(u_int32_t* p, u_char* ep, Source* ps,

Modified: vic/branches/cc/rtp/session.h
==============================================================================
--- vic/branches/cc/rtp/session.h	(original)
+++ vic/branches/cc/rtp/session.h	Thu Jan 22 18:32:43 2009
@@ -139,7 +139,6 @@
 //	virtual void send_report();
 	virtual void send_report(CtrlHandler*, int bye, int app = 0);
 	virtual void send_xreport(CtrlHandler*, int bt, int bye);
-	virtual void send_xreport_back(CtrlHandler*, int bt, int bye);
 	void build_aoa_pkt(CtrlHandler* ch);
 	void build_ts_pkt(CtrlHandler* ch);
 	void build_ackv_pkt(CtrlHandler* ch);



More information about the Sumover-dev mailing list