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

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Tue May 11 02:01:19 BST 2010


Author: soohyunc
Date: Tue May 11 02:01:19 2010
New Revision: 4817

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

Log:
We thought Vic is trying to retrieve XR (ackvec) before sending packets, if XR
is already available to pick up. However, this did not happend every time, so
fixed it to retrieve XR on *every* data packet send mothod.

So, then, we also needed to modify to set if new ack has been retrieved in a 
right place.


This commit is in conjunction with Revision 4814.




Modified: vic/branches/cc/rtp/session.cpp
==============================================================================
--- vic/branches/cc/rtp/session.cpp	(original)
+++ vic/branches/cc/rtp/session.cpp	Tue May 11 02:01:19 2010
@@ -456,9 +456,7 @@
 	// debug_msg("L %d,",pb->layer);
 
 	// receive XR before sending
-	if(!recv_by_ch)
-	recv_xreport(ch_, pb);
-
+	recv_xreport(ch_, pb, recv_by_ch);
 	// print RTP seqno
 	print_rtp_seqno(pb);
 
@@ -474,29 +472,26 @@
 
 	// Using loop_layer for now to restrict transmission as well
 	if (pb->layer < loop_layer_) {
-	//	if ( pb->layer <0 ) exit(1);
-		Network* n = dh_[pb->layer].net();
-		if (n != 0)
-			n->send(pb);
+	  Network* n = dh_[pb->layer].net();
+	  if (n != 0)
+		n->send(pb);
 
-		// send an RTCP XR (aoa) packet 
-		switch (cc_type_) {
+	  // send an RTCP XR (aoa) packet 
+	  switch (cc_type_) {
 		case WBCC:
 		  ch_->send_aoa();
 		  break;
 		case RBCC:
 		  ch_->send_aoa();
 		  break;
-		}
+	  }
 	}
 }
 
 void SessionManager::tx_data_only(pktbuf* pb, bool recv_by_ch) 
 {
 	// receive XR before sending
-	if(recv_by_ch)
-	recv_xreport(ch_, pb);
-
+	recv_xreport(ch_, pb, recv_by_ch);
 	// print RTP seqno
 	print_rtp_seqno(pb);
 
@@ -1387,7 +1382,13 @@
 		  // SO_TIMESTAMP
 		  //so_rtime = ch_[0].net()->recv_so_time();
 		  //sender_xr_ts_info(so_rtime);
+
+		  // if this XR reception is called not because of ack clock,
+		  // then this XR reception is called just before sending packet,
+		  // hence, mark it that we have retrieved a new ack
+		  if(!recv_by_ch)
 		  set_new_ack();
+
 		  switch (cc_type_) {
 			case WBCC:
 			// TFWC sender (getting AckVec)
@@ -1432,7 +1433,7 @@
 }
 
 // receive XR (AckVec)
-void SessionManager::recv_xreport(CtrlHandler *ch, pktbuf* pb) {
+void SessionManager::recv_xreport(CtrlHandler *ch, pktbuf* pb, bool recv_by_ch) {
 	// timestamp for XR reception
 	recv_ts_ = tx_get_now();
 
@@ -1507,7 +1508,7 @@
 		switch (flags & 0xff) {
 		case RTCP_PT_XR:
 			rtcp_pkt_id = RTCP_PT_XR;
-			parse_xr(rh, flags, ep, ps, addr, layer, 0, pb);
+			parse_xr(rh, flags, ep, ps, addr, layer, !(recv_by_ch), pb);
 			break;
 		case RTCP_PT_SR:
 			rtcp_pkt_id = RTCP_PT_SR;

Modified: vic/branches/cc/rtp/session.h
==============================================================================
--- vic/branches/cc/rtp/session.h	(original)
+++ vic/branches/cc/rtp/session.h	Tue May 11 02:01:19 2010
@@ -147,7 +147,7 @@
 		u_int32_t xrssrc);
 
 	// receive XR
-	void recv_xreport(CtrlHandler*, pktbuf*);
+	void recv_xreport(CtrlHandler*, pktbuf*, bool);
 
 	void build_aoa_pkt(CtrlHandler* ch);
 	void build_ts_pkt(CtrlHandler* ch);

Modified: vic/branches/cc/rtp/transmitter.cpp
==============================================================================
--- vic/branches/cc/rtp/transmitter.cpp	(original)
+++ vic/branches/cc/rtp/transmitter.cpp	Tue May 11 02:01:19 2010
@@ -328,21 +328,11 @@
 	switch (cwnd_mode_) {
 	case BYM:
 	{
-	  int len = 0;
-	  int num_acked = 0;
-	  // number of acked bytes
- 	  if (new_ack())
-	  num_acked += tfwc_sndr_.b_jacked();
-
-	  if(pb->len < tfwc_sndr_.b_magic() + num_acked - len) {
-		len += pb->len;
+	  if(pb->len < tfwc_sndr_.b_magic()) {
 		// move head pointer
 		head_ = pb->next;
 		// call Transmitter::output_data_only w/ XR reception
 		output_data_only(pb, XR_RECV);
-
-		// and, reset status
-		reset_new_ack();
 	  }
 	}
 	break;
@@ -391,6 +381,10 @@
 	  int len = 0;
 	  int num_acked = 0;
 
+	  // this output called upon ack clock
+	  if(recv_by_ch)
+	  num_acked = tfwc_sndr_.b_jacked();
+
 	  while(pb->len < tfwc_sndr_.b_magic() + num_acked - len) {
 		len += pb->len;
 		// move head pointer
@@ -401,7 +395,6 @@
 		// number of acked bytes
 		if (new_ack())
 		num_acked += tfwc_sndr_.b_jacked();
-		// and, reset status
 		reset_new_ack();
 
 		if (head_ != 0)
@@ -555,7 +548,7 @@
 //	pb->release() is called by decoder in loopback;
 }
 
-void Transmitter::output_data_only(pktbuf* pb, bool flag) 
+void Transmitter::output_data_only(pktbuf* pb, bool flag)
 {
 	tx_data_only(pb, flag);
 	loopback(pb);



More information about the Sumover-dev mailing list