[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