Changeset 4825

Show
Ignore:
Timestamp:
05/11/10 16:21:55 (4 years ago)
Author:
soohyunc
Message:

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.

Location:
vic/branches/cc/rtp
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • vic/branches/cc/rtp/session.cpp

    r4817 r4825  
    131131void CtrlHandler::dispatch(int) 
    132132{ 
    133         sm_->recv(this); 
     133        int i = 0; int cc = 0; 
     134        while((cc = sm_->recv(this)) > 0) { 
     135        //fprintf(stderr, "\tackvec reception: now: %f cc[%d]: %d\n",  
     136        //sm_->tx_get_now(), ++i, cc); 
     137        } 
    134138} 
    135139 
     
    456460        // debug_msg("L %d,",pb->layer); 
    457461 
     462        int i = 0; int cc = 0; 
     463 
    458464        // receive XR before sending 
    459         recv_xreport(ch_, pb, recv_by_ch); 
     465        while ((cc = recv_xreport(ch_, pb, recv_by_ch)) > 0) { 
     466        //fprintf(stderr, "\tackvec reception: now: %f cc[%d]: %d\n",  
     467        //tx_get_now(), ++i, cc); 
     468        } 
    460469        // print RTP seqno 
    461470        print_rtp_seqno(pb); 
     
    491500void SessionManager::tx_data_only(pktbuf* pb, bool recv_by_ch)  
    492501{ 
     502        int i = 0; int cc = 0; 
     503 
    493504        // receive XR before sending 
    494         recv_xreport(ch_, pb, recv_by_ch); 
     505        while ((cc = recv_xreport(ch_, pb, recv_by_ch)) > 0) { 
     506        //fprintf(stderr, "\tackvec reception: now: %f cc[%d]: %d\n", 
     507        //tx_get_now(), ++i, cc); 
     508        } 
    495509        // print RTP seqno 
    496510        print_rtp_seqno(pb); 
     
    14341448 
    14351449// receive XR (AckVec) 
    1436 void SessionManager::recv_xreport(CtrlHandler *ch, pktbuf* pb, bool recv_by_ch) { 
     1450int SessionManager::recv_xreport(CtrlHandler *ch, pktbuf* pb, bool recv_by_ch) { 
    14371451        // timestamp for XR reception 
    14381452        recv_ts_ = tx_get_now(); 
     
    14431457        // return when no RTCP arrived in the socket buffer 
    14441458        if (cc <= 0) 
    1445                 return; 
     1459                return cc; 
    14461460 
    14471461        rtcphdr* rh = (rtcphdr *)pktbuf_; 
     
    14501464                SourceManager& sm = SourceManager::instance(); 
    14511465                if (rh->rh_ssrc == (*sm.localsrc()).srcid()) 
    1452                 return; 
     1466                return 0; 
    14531467        } 
    14541468        if (cc < int(sizeof(*rh))) { 
    14551469                ++nrunt_; 
    1456                 return; 
     1470                return 0; 
    14571471        } 
    14581472 
     
    14661480        case RTP_VERSION << 14 | RTCP_PT_BYE: 
    14671481                debug_msg("warning: detected wrong RTCP packet types!\n"); 
    1468                 return; 
     1482                return 0; 
    14691483        default: 
    14701484                ++badversion_; 
    1471                 return; 
     1485                return 0; 
    14721486        } 
    14731487 
     
    14831497        u_int32_t ssrc = rh->rh_ssrc; 
    14841498        Source* ps = SourceManager::instance().lookup(ssrc, ssrc, addr); 
    1485         if (ps == 0) return; 
     1499        if (ps == 0) return 0; 
    14861500 
    14871501        int layer = ch - ch_; 
     
    14971511                if (ep > epack) { 
    14981512                        ps->badsesslen(1); 
    1499                         return; 
     1513                        return 0; 
    15001514                } 
    15011515                // bad version 
     
    15031517                if (flags >> 14 != RTP_VERSION) { 
    15041518                        ps->badsessver(1); 
    1505                         return; 
     1519                        return 0; 
    15061520                } 
    15071521 
     
    15201534                        rtcp_pkt_id = RTCP_PT_SDES; 
    15211535                        debug_msg("warning: wrong RTCP packet type! %d\n", rtcp_pkt_id); 
    1522                         return; 
     1536                        return 0; 
    15231537                default: 
    15241538                        ps->badsessopt(1); 
     
    15271541                rh = (rtcphdr *)ep; 
    15281542        } 
    1529         return; 
     1543        return (cc); 
    15301544} 
    15311545 
     
    16591673 * Receive an rtcp packet (from the control port). 
    16601674 */ 
    1661 void SessionManager::recv(CtrlHandler* ch) 
     1675int SessionManager::recv(CtrlHandler* ch) 
    16621676{ 
    16631677        // timestamp for XR reception  
     
    16671681        int cc = ch->recv(pktbuf_, 2 * RTP_MTU, srcp); 
    16681682        if (cc <= 0) 
    1669                 return; 
     1683                return (cc); 
    16701684 
    16711685        rtcphdr* rh = (rtcphdr*)pktbuf_; 
     
    16751689                SourceManager& sm = SourceManager::instance(); 
    16761690                if (rh->rh_ssrc == (*sm.localsrc()).srcid()) 
    1677                         return; 
     1691                        return 0; 
    16781692        } 
    16791693 
    16801694        if (cc < int(sizeof(*rh))) { 
    16811695                ++nrunt_; 
    1682                 return; 
     1696                return 0; 
    16831697        } 
    16841698 
     
    17001714                 */ 
    17011715                ++badversion_; 
    1702                 return; 
     1716                return 0; 
    17031717        } 
    17041718        /* 
     
    17181732        Source* ps = SourceManager::instance().lookup(ssrc, ssrc, addr); 
    17191733        if (ps == 0) 
    1720                 return; 
     1734                return 0; 
    17211735         
    17221736        int layer = ch - ch_; 
     
    17321746                if (ep > epack) { 
    17331747                        ps->badsesslen(1); 
    1734                         return; 
     1748                        return 0; 
    17351749                } 
    17361750                u_int flags = ntohs(rh->rh_flags); 
    17371751                if (flags >> 14 != RTP_VERSION) { 
    17381752                        ps->badsessver(1); 
    1739                         return; 
     1753                        return 0; 
    17401754                } 
    17411755                switch (flags & 0xff) { 
     
    17671781                rh = (rtcphdr*)ep; 
    17681782        } 
    1769         return; 
    1770 } 
     1783        return (cc); 
     1784} 
  • vic/branches/cc/rtp/session.h

    r4817 r4825  
    133133        virtual ~SessionManager(); 
    134134        virtual int command(int argc, const char*const* argv); 
    135         virtual void recv(CtrlHandler*); 
     135        virtual int recv(CtrlHandler*); 
    136136        virtual void recv(DataHandler*); 
    137137        virtual void announce(CtrlHandler*); //LLL 
     
    148148 
    149149        // receive XR 
    150         void recv_xreport(CtrlHandler*, pktbuf*, bool); 
     150        int recv_xreport(CtrlHandler*, pktbuf*, bool); 
    151151 
    152152        void build_aoa_pkt(CtrlHandler* ch);