Changeset 4234

Show
Ignore:
Timestamp:
08/05/08 14:29:31 (6 years ago)
Author:
soohyunc
Message:

o on-going ackvec implementation

Location:
vic/branches/cc
Files:
5 modified
2 moved

Legend:

Unmodified
Added
Removed
  • vic/branches/cc/Makefile.in

    r4218 r4234  
    153153        render/rgb-converter.o render/vw.o render/ppm.o \ 
    154154        @V_OBJ@ \ 
    155         cc/cc.o 
     155        cc/tfwc_sndr.o 
    156156 
    157157 
  • vic/branches/cc/cc/tfwc_sndr.cpp

    r4233 r4234  
    4343#include "module.h" 
    4444#include "transmitter.h" 
    45 #include "cc.h" 
     45#include "tfwc_sndr.h" 
    4646 
    47 CcManager::CcManager() : 
     47TfwcSndr::TfwcSndr() : 
    4848        seqno_(-1)  
    4949{} 
    5050 
    51 void CcManager::cc_parse_buf(pktbuf* pb) { 
     51void TfwcSndr::cc_parse_buf(pktbuf* pb) { 
    5252 
    5353        // get RTP hearder information 
     
    6060} 
    6161 
    62 u_int16_t CcManager::cc_get_seqno() { 
     62u_int16_t TfwcSndr::cc_get_seqno() { 
    6363        return seqno_; 
    6464} 
  • vic/branches/cc/cc/tfwc_sndr.h

    r4228 r4234  
    3434 */ 
    3535 
    36 #ifndef vic_cc_h 
    37 #define vic_cc_h 
     36#ifndef vic_tfwc_sndr_h 
     37#define vic_tfwc_sndr_h 
    3838 
    39 class CcManager { 
     39class TfwcSndr { 
    4040public: 
    41         CcManager(); 
     41        TfwcSndr(); 
    4242        void cc_parse_buf(pktbuf*);     // get pktbuf from transmitter module 
    4343        u_int16_t cc_get_seqno();               // return packet sequence number 
     
    4545 
    4646protected: 
    47         CcManager* ccman_; 
     47        TfwcSndr* tfwcsndr_; 
    4848private: 
    4949}; 
  • vic/branches/cc/rtp/rtp.h

    r3974 r4234  
    129129}; 
    130130 
     131/* 
     132 * RTCP Extended Report 
     133 * (RFC 3611) 
     134 */ 
     135struct rtcp_xr { 
     136        u_int32_t xr_flags;             /*BT:8 TS:8 LEN:16*/ 
     137        u_int32_t xr_ackvec;    /* Ack vector bit chunk */ 
     138}; 
     139 
    131140#define RTCP_PT_SR      200     /* sender report */ 
    132141#define RTCP_PT_RR      201     /* receiver report */ 
     
    142151#define RTCP_PT_BYE     203     /* end of participation */ 
    143152#define RTCP_PT_APP     204     /* application specific functions */ 
     153#define RTCP_PT_XR      207 /* extended report */ 
    144154 
    145155#define         RTCP_SDES_MIN   1 
  • vic/branches/cc/rtp/session.cpp

    r4233 r4234  
    5151#include "ntp-time.h" 
    5252#include "session.h" 
    53 #include "cc/cc.h" 
     53#include "cc/tfwc_sndr.h" 
    5454 
    5555/* added to support the mbus  
     
    615615        int we_sent = 0; 
    616616        rtcp_rr* rr; 
     617        rtcp_xr* xr;    // extended report 
    617618        Tcl& tcl = Tcl::instance(); 
    618619 
     
    636637                sr->sr_nb = htonl(sl.nb()); 
    637638                rr = (rtcp_rr*)(sr + 1); 
     639                xr = (rtcp_xr*)(rr + 1); 
    638640        } else { 
    639641                flags |= RTCP_PT_RR; 
    640642                rr = (rtcp_rr*)(rh + 1); 
     643                xr = (rtcp_xr*)(rr + 1);        // extended report 
    641644        } 
    642645        int nrr = 0; 
     
    658661                int received = sl.np() - sl.snp(); 
    659662                if (received == 0) { 
    660                         //                      if (u_int(now.tv_sec - sp->lts_ctrl().tv_sec) > inactive) 
     663                        //              if (u_int(now.tv_sec - sp->lts_ctrl().tv_sec) > inactive) 
    661664                        if (u_int(now.tv_sec - sl.lts_ctrl().tv_sec) > inactive) 
    662665                                --nsrc; 
     
    766769} 
    767770 
     771/* 
     772 * receive an RTP packet 
     773 */ 
    768774void SessionManager::recv(DataHandler* dh) 
    769775{ 
     
    799805 
    800806        // set bit vector 
    801         for (int i = lastseq_; i <= seqno_; i++) { 
     807        for (int i = lastseq_+1; i <= seqno_; i++) { 
    802808                        SET_BIT_VEC (ackvec_, 1); 
    803809        } 
     
    805811        // printing bit vector 
    806812        bool isThere; 
    807         printf("XXX received packet number: "); 
    808         for (int i = lastseq_; i <= seqno_; i++) { 
     813        debug_msg("XXX received ackvec:"); 
     814        for (int i = lastseq_+1; i <= seqno_; i++) { 
    809815                isThere = SEE_BIT_VEC (ackvec_, i, seqno_); 
    810                 printf(" %d: %s ", i, isThere ? "OK" : "NOK"); 
     816                printf(" %d... %s ", seqno_, isThere ? "Ok" : "NOk"); 
    811817        } 
    812818        printf("\n"); 
     
    10531059} 
    10541060 
     1061void SessionManager::parse_xr(rtcphdr* rh, int flags, u_char* ep, 
     1062                                                          Source* ps, Address & addr, int layer) 
     1063{ 
     1064        UNUSED(flags); 
     1065        UNUSED(ep); 
     1066        UNUSED(ps); 
     1067        UNUSED(addr); 
     1068        UNUSED(layer); 
     1069 
     1070        Source* s; 
     1071        u_int32_t ssrc = rh->rh_ssrc; 
     1072        if (ps->srcid() != ssrc) 
     1073                s = SourceManager::instance().lookup(ssrc, ssrc, addr); 
     1074        else 
     1075                s = ps; 
     1076 
     1077        s->layer(layer).lts_ctrl(unixtime()); 
     1078        int cnt = flags >> 8 & 0x1f; 
     1079        parse_xr_records(ssrc, (rtcp_xr*)(rh + 1), cnt, ep, addr); 
     1080} 
     1081 
     1082void SessionManager::parse_xr_records(u_int32_t ssrc, rtcp_xr* r, int cnt, 
     1083                                      const u_char* ep, Address & addr) 
     1084{ 
     1085         
     1086} 
     1087 
    10551088int SessionManager::sdesbody(u_int32_t* p, u_char* ep, Source* ps, 
    10561089                                                Address & addr, u_int32_t ssrc, int layer) 
     
    11631196        case RTP_VERSION << 14 | RTCP_PT_SR: 
    11641197        case RTP_VERSION << 14 | RTCP_PT_RR: 
     1198        case RTP_VERSION << 14 | RTCP_PT_XR: 
    11651199        case RTP_VERSION << 14 | RTCP_PT_BYE: 
    11661200                break; 
     
    12211255                        break; 
    12221256 
     1257                case RTCP_PT_XR: 
     1258                        parse_xr(rh, flags, ep, ps, addr, layer); 
     1259                        break; 
     1260 
    12231261                case RTCP_PT_SDES: 
    12241262                        parse_sdes(rh, flags, ep, ps, addr, ssrc, layer); 
     
    12351273                rh = (rtcphdr*)ep; 
    12361274        } 
    1237 } 
    1238  
     1275        return; 
     1276} 
     1277 
  • vic/branches/cc/rtp/session.h

    r4233 r4234  
    145145        void parse_rr(rtcphdr* rh, int flags, u_char* ep, 
    146146                      Source* ps, Address & addr, int layer); 
     147        void parse_xr(rtcphdr* rh, int flags, u_char* ep, 
     148                      Source* ps, Address & addr, int layer); 
    147149        void parse_rr_records(u_int32_t ssrc, rtcp_rr* r, int cnt, 
     150                              const u_char* ep, Address & addr); 
     151        void parse_xr_records(u_int32_t ssrc, rtcp_xr* r, int cnt, 
    148152                              const u_char* ep, Address & addr); 
    149153        int sdesbody(u_int32_t* p, u_char* ep, Source* ps, 
  • vic/branches/cc/rtp/transmitter.h

    r4233 r4234  
    5050#include "inet.h" 
    5151#include "pktbuf-rtp.h" 
    52 #include "cc/cc.h" 
     52#include "cc/tfwc_sndr.h" 
    5353 
    5454/* 
     
    5656 * the application level protocol. 
    5757 */ 
    58 class Transmitter : public TclObject, public Timer, public CcManager { 
     58class Transmitter : public TclObject, public Timer, public TfwcSndr { 
    5959    public: 
    6060        Transmitter();