[Sumover-dev] [svn commit] r4825 - vic/branches/cc/rtp
sumover-dev at cs.ucl.ac.uk
sumover-dev at cs.ucl.ac.uk
Tue May 11 16:21:55 BST 2010
Author: soohyunc
Date: Tue May 11 16:21:55 2010
New Revision: 4825
Modified:
vic/branches/cc/rtp/session.cpp
vic/branches/cc/rtp/session.h
Log:
retrieve XR as much as it can, and also as fast as it can.
in order to do so, changed return type as (int) for both
"SessionManager::recv(CtrlHandler* ch)" and
"SessionManager::recv_xreport(CtrlHandler* , pktbuf*, bool)".
if it returns greater than 0, then it means there are still XR in the control
channel to retrieve.
Modified: vic/branches/cc/rtp/session.cpp
==============================================================================
--- vic/branches/cc/rtp/session.cpp (original)
+++ vic/branches/cc/rtp/session.cpp Tue May 11 16:21:55 2010
@@ -130,7 +130,11 @@
void CtrlHandler::dispatch(int)
{
- sm_->recv(this);
+ int i = 0; int cc = 0;
+ while((cc = sm_->recv(this)) > 0) {
+ //fprintf(stderr, "\tackvec reception: now: %f cc[%d]: %d\n",
+ //sm_->tx_get_now(), ++i, cc);
+ }
}
CtrlHandler::CtrlHandler()
@@ -455,8 +459,13 @@
// dh_[.net()->send(mh_);
// debug_msg("L %d,",pb->layer);
+ int i = 0; int cc = 0;
+
// receive XR before sending
- recv_xreport(ch_, pb, recv_by_ch);
+ while ((cc = recv_xreport(ch_, pb, recv_by_ch)) > 0) {
+ //fprintf(stderr, "\tackvec reception: now: %f cc[%d]: %d\n",
+ //tx_get_now(), ++i, cc);
+ }
// print RTP seqno
print_rtp_seqno(pb);
@@ -490,8 +499,13 @@
void SessionManager::tx_data_only(pktbuf* pb, bool recv_by_ch)
{
+ int i = 0; int cc = 0;
+
// receive XR before sending
- recv_xreport(ch_, pb, recv_by_ch);
+ while ((cc = recv_xreport(ch_, pb, recv_by_ch)) > 0) {
+ //fprintf(stderr, "\tackvec reception: now: %f cc[%d]: %d\n",
+ //tx_get_now(), ++i, cc);
+ }
// print RTP seqno
print_rtp_seqno(pb);
@@ -1433,7 +1447,7 @@
}
// receive XR (AckVec)
-void SessionManager::recv_xreport(CtrlHandler *ch, pktbuf* pb, bool recv_by_ch) {
+int SessionManager::recv_xreport(CtrlHandler *ch, pktbuf* pb, bool recv_by_ch) {
// timestamp for XR reception
recv_ts_ = tx_get_now();
@@ -1442,18 +1456,18 @@
// return when no RTCP arrived in the socket buffer
if (cc <= 0)
- return;
+ return cc;
rtcphdr* rh = (rtcphdr *)pktbuf_;
// ignore loopback packets
if (!loopback_) {
SourceManager& sm = SourceManager::instance();
if (rh->rh_ssrc == (*sm.localsrc()).srcid())
- return;
+ return 0;
}
if (cc < int(sizeof(*rh))) {
++nrunt_;
- return;
+ return 0;
}
// filter out junk report and other types of RTCP packet.
@@ -1465,10 +1479,10 @@
case RTP_VERSION << 14 | RTCP_PT_RR:
case RTP_VERSION << 14 | RTCP_PT_BYE:
debug_msg("warning: detected wrong RTCP packet types!\n");
- return;
+ return 0;
default:
++badversion_;
- return;
+ return 0;
}
// we're safe to assume that this is XR packet.
@@ -1482,7 +1496,7 @@
// -- note: sdes record does not contain the ssrc of the sender.
u_int32_t ssrc = rh->rh_ssrc;
Source* ps = SourceManager::instance().lookup(ssrc, ssrc, addr);
- if (ps == 0) return;
+ if (ps == 0) return 0;
int layer = ch - ch_;
int rtcp_pkt_id;
@@ -1496,13 +1510,13 @@
// bad length
if (ep > epack) {
ps->badsesslen(1);
- return;
+ return 0;
}
// bad version
u_int flags = ntohs(rh->rh_flags);
if (flags >> 14 != RTP_VERSION) {
ps->badsessver(1);
- return;
+ return 0;
}
switch (flags & 0xff) {
@@ -1519,14 +1533,14 @@
case RTCP_PT_SDES:
rtcp_pkt_id = RTCP_PT_SDES;
debug_msg("warning: wrong RTCP packet type! %d\n", rtcp_pkt_id);
- return;
+ return 0;
default:
ps->badsessopt(1);
break;
}
rh = (rtcphdr *)ep;
}
- return;
+ return (cc);
}
// send AckVec
@@ -1658,7 +1672,7 @@
/*
* Receive an rtcp packet (from the control port).
*/
-void SessionManager::recv(CtrlHandler* ch)
+int SessionManager::recv(CtrlHandler* ch)
{
// timestamp for XR reception
recv_ts_ = tx_get_now();
@@ -1666,7 +1680,7 @@
Address * srcp;
int cc = ch->recv(pktbuf_, 2 * RTP_MTU, srcp);
if (cc <= 0)
- return;
+ return (cc);
rtcphdr* rh = (rtcphdr*)pktbuf_;
@@ -1674,12 +1688,12 @@
if (!loopback_) {
SourceManager& sm = SourceManager::instance();
if (rh->rh_ssrc == (*sm.localsrc()).srcid())
- return;
+ return 0;
}
if (cc < int(sizeof(*rh))) {
++nrunt_;
- return;
+ return 0;
}
/*
@@ -1699,7 +1713,7 @@
* don't put something other than SR,RR,XR,BYE first.
*/
++badversion_;
- return;
+ return 0;
}
/*
* at this point we think the packet's valid. Update our average
@@ -1717,7 +1731,7 @@
u_int32_t ssrc = rh->rh_ssrc;
Source* ps = SourceManager::instance().lookup(ssrc, ssrc, addr);
if (ps == 0)
- return;
+ return 0;
int layer = ch - ch_;
/*
@@ -1731,12 +1745,12 @@
u_char* ep = (u_char*)rh + len;
if (ep > epack) {
ps->badsesslen(1);
- return;
+ return 0;
}
u_int flags = ntohs(rh->rh_flags);
if (flags >> 14 != RTP_VERSION) {
ps->badsessver(1);
- return;
+ return 0;
}
switch (flags & 0xff) {
@@ -1766,5 +1780,5 @@
}
rh = (rtcphdr*)ep;
}
- return;
+ return (cc);
}
Modified: vic/branches/cc/rtp/session.h
==============================================================================
--- vic/branches/cc/rtp/session.h (original)
+++ vic/branches/cc/rtp/session.h Tue May 11 16:21:55 2010
@@ -132,7 +132,7 @@
SessionManager();
virtual ~SessionManager();
virtual int command(int argc, const char*const* argv);
- virtual void recv(CtrlHandler*);
+ virtual int recv(CtrlHandler*);
virtual void recv(DataHandler*);
virtual void announce(CtrlHandler*); //LLL
// virtual void send_bye();
@@ -147,7 +147,7 @@
u_int32_t xrssrc);
// receive XR
- void recv_xreport(CtrlHandler*, pktbuf*, bool);
+ int recv_xreport(CtrlHandler*, pktbuf*, bool);
void build_aoa_pkt(CtrlHandler* ch);
void build_ts_pkt(CtrlHandler* ch);
More information about the Sumover-dev
mailing list