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

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Wed Feb 3 13:04:49 GMT 2010


Author: soohyunc
Date: Wed Feb  3 13:04:49 2010
New Revision: 4587

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

Log:
separated rtp/session.[h,cpp] for TFWC and TFRC,
using simple switch-case statement.



Modified: vic/branches/cc/rtp/session.cpp
==============================================================================
--- vic/branches/cc/rtp/session.cpp	(original)
+++ vic/branches/cc/rtp/session.cpp	Wed Feb  3 13:04:49 2010
@@ -462,11 +462,15 @@
 		if (n != 0)
 			n->send(pb);
 
-		// if CC is on, send an RTCP XR (aoa) packet 
+		// if window-based CC is on, send an RTCP XR (aoa) packet 
 		// upon every RTP data packet transmission.
-		if(is_cc_on()) {
+		switch (cc_type_) {
+		case WBCC:
 			ch_[0].send_aoa();	// send ack of ack
 			//ch_[0].send_ts();	// send time stamp
+			break;
+		case RBCC:
+			break;
 		}
 	}
 }
@@ -662,15 +666,16 @@
 				// this block is used for giving ackofack
 				// set AckofAck
 				chunks[num_chunks-1] = tfwc_sndr_get_aoa();
+
+				// send_Xreport (sender's report)
+				// - just sending ackofack information
+				send_Xreport(ch, XR_BT_1, 0, 0, 0, 0, chunks, num_chunks, 0);
 				break;
 
 			case RBCC:
+				// for TFRC, no action needed here.
 				break;
 			}
-
-			// send_Xreport (sender's report)
-			// - just sending ackofack information
-			send_Xreport(ch, XR_BT_1, 0, 0, 0, 0, chunks, num_chunks, 0);
 		}
 		else if (bt == XR_BT_3) {
 			/*XXX*/
@@ -1016,13 +1021,21 @@
 		// retrieve RTP seqno
 		rtphdr* rh = (rtphdr*)pb->data;
 		seqno = ntohs(rh->rh_seqno);
-		// pass seqno to tfwc receiver to build up AckVec
-		tfwc_rcvr_recv_seqno(seqno);
-		printf("\n\treceived seqno: %d\n\n", seqno);
-
-		// send receiver side XR report (AckVec)
-		ch_[0].send_ackv();
-		//ch_[0].send_ts_echo();
+
+		switch (cc_type_) {
+		case WBCC:
+			// pass seqno to tfwc receiver to build up AckVec
+			tfwc_rcvr_recv_seqno(seqno);
+			printf("\n\treceived seqno: %d\n\n", seqno);
+
+			// send receiver side XR report (AckVec)
+			ch_[0].send_ackv();
+			//ch_[0].send_ts_echo();
+			break;
+		case RBCC:
+			ch_[0].send_p();
+			break;
+		}
 	}
 	
 	//bp += sizeof(*rh);
@@ -1300,21 +1313,35 @@
 			printf(">>> parse_xr - i_am_sender\n");
 			printf("    [%s +%d] beg:%d, end:%d, xr1len:%d (xrlen:%d)\n", 
 					__FILE__,__LINE__,begin, end, ntohs(xr1->xr_len), xrlen);
+			
+			switch (cc_type_) {
+			case WBCC:
+				// TFWC sender (getting AckVec)
+				tfwc_sndr_recv(xr->BT, begin, end, chunk);
+				// we need to call Transmitter::output(pb) to make Ack driven
+				cc_tfwc_output();
+				break;
 
-			// TFWC sender (getting AckVec)
-			tfwc_sndr_recv(xr->BT, begin, end, chunk);
-
-			// we need to call Transmitter::output(pb) to make Ack driven
-			cc_tfwc_output();
+			case RBCC:
+				break;
+			}
 		}
 		// i am an RTP data receiver, so receive ackofack 
 		else {
-			printf(">>> parse_xr - i_am_receiver\n");
-			printf("    [%s +%d] chunk[0]:%d\n", 
+			switch (cc_type_) {
+			case WBCC:
+				printf(">>> parse_xr - i_am_receiver\n");
+				printf("    [%s +%d] chunk[0]:%d\n", 
 					__FILE__,__LINE__, ntohs(chunk[0]));
 
-			// TFWC receiver (getting ackofack)
-			tfwc_rcvr_recv_aoa(xr->BT, chunk);
+				// TFWC receiver (getting ackofack)
+				tfwc_rcvr_recv_aoa(xr->BT, chunk);
+				break;
+
+			case RBCC:
+				// do nothing
+				break;
+			}
 		} // end of XR block type 1
 	} else {
 		// XXX
@@ -1323,18 +1350,31 @@
 	printf("-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-\n");
 }
 
+
+// send AckVec 
+// (TFWC data receiver side)
 void CtrlHandler::send_ackv()
 {
 	i_am_receiver();
 	sm_->build_ackv_pkt(this);
 }
 
+// send loss event rate 
+// (TFRC data receiver side)
+void CtrlHandler::send_p() {
+	i_am_receiver();
+	sm_->build_p_pkt(this);
+}
+
+// send timestamp echo
 void CtrlHandler::send_ts_echo()
 {
 	i_am_receiver();
 	sm_->build_ts_echo_pkt(this);
 }
 
+// build AckVec packet 
+// (TFWC data receiver side)
 void SessionManager::build_ackv_pkt(CtrlHandler* ch)
 {
 	// RTCP XR (block type 1)
@@ -1342,6 +1382,14 @@
 	build_xreport(ch, XR_BT_1);
 }
 
+// build loss event rate report packet
+// (TFRC data receiver side)
+void SessionManager::build_p_pkt(CtrlHandler* ch)
+{
+	// this block conveys loss event rate
+	build_xreport (ch, XR_BT_1);
+}
+
 void SessionManager::build_ts_echo_pkt(CtrlHandler* ch)
 {
 	// RTCP XR (block type 3)

Modified: vic/branches/cc/rtp/session.h
==============================================================================
--- vic/branches/cc/rtp/session.h	(original)
+++ vic/branches/cc/rtp/session.h	Wed Feb  3 13:04:49 2010
@@ -105,6 +105,7 @@
 	void send_aoa();	// send ackofack (TfwcSndr side)
 	void send_ts();		// send timestamp (TfwcSndr side)
 	void send_ackv();
+	void send_p();
 	void send_ts_echo();
 
 	// i am an RTP data sender/receiver
@@ -148,6 +149,7 @@
 	void build_aoa_pkt(CtrlHandler* ch);
 	void build_ts_pkt(CtrlHandler* ch);
 	void build_ackv_pkt(CtrlHandler* ch);
+	void build_p_pkt(CtrlHandler* ch);
 	void build_ts_echo_pkt(CtrlHandler* ch);
 
 	// am i a data sender?



More information about the Sumover-dev mailing list