#include <rcvbuf.h>
Collaboration diagram for RcvBuffer:

Public Member Functions | |
| RcvBuffer () | |
| void | add_pkt (int, double) |
| int | exists_pkt (int) |
| void | print () |
Public Attributes | |
| int | nextpkt_ |
| int | maxpkt_ |
| int | pkts_recovered_ |
| int | duplicates_ |
| double | delay_sum_ |
| double | max_delay_ |
| double | min_delay_ |
Protected Attributes | |
| Gap * | gap_ |
| Gap * | tail_ |
|
|
Definition at line 35 of file rcvbuf.cc. References delay_sum_, duplicates_, gap_, max_delay_, maxpkt_, min_delay_, nextpkt_, pkts_recovered_, and tail_.
00036 {
00037 nextpkt_ = 0;
00038 maxpkt_ = -1;
00039 duplicates_ = 0;
00040 delay_sum_ = 0.0;
00041 max_delay_ = 0.0;
00042 min_delay_ = 1e6;
00043 pkts_recovered_ = 0;
00044 tail_ = gap_ = 0;
00045 }
|
|
||||||||||||
|
Definition at line 50 of file rcvbuf.cc. References delay_sum_, duplicates_, Gap::end_, exists_pkt(), gap_, max_delay_, maxpkt_, min_delay_, Gap::next_, nextpkt_, pkts_recovered_, Gap::start_, tail_, and Gap::time_. Referenced by LmsReceiver::recv().
00051 {
00052 Gap *g, *pg;
00053
00054 if (exists_pkt (i))
00055 {
00056 duplicates_++;
00057 return;
00058 }
00059 // common case first: got what we expected
00060 if (i == nextpkt_)
00061 {
00062 nextpkt_++;
00063 if (i == maxpkt_ + 1)
00064 maxpkt_++;
00065 return;
00066 }
00067 // new gap
00068 if (i > nextpkt_)
00069 {
00070 g = new Gap;
00071 g->start_ = nextpkt_;
00072 g->end_ = i-1;
00073 g->time_ = tnow;
00074 g->next_ = 0;
00075
00076 if (!gap_)
00077 gap_ = tail_ = g;
00078 else {
00079 tail_->next_ = g;
00080 tail_ = g;
00081 }
00082 nextpkt_ = i+1;
00083 return;
00084 }
00085
00086 // i < nextpkt_ (a retransmission)
00087
00088 pkts_recovered_++;
00089
00090 // is packet part of the first gap?
00091 if (gap_->start_ <= i && i <= gap_->end_)
00092 {
00093 double d = tnow - gap_->time_;
00094
00095 if (d > max_delay_)
00096 max_delay_ = d;
00097 if (d < min_delay_)
00098 min_delay_ = d;
00099 delay_sum_ += d;
00100 if (i == maxpkt_ + 1)
00101 {
00102 maxpkt_++;
00103 if (++gap_->start_ > gap_->end_)
00104 {
00105 g = gap_;
00106 gap_ = gap_->next_;
00107 if (gap_)
00108 maxpkt_ = gap_->start_ - 1;
00109 else {
00110 maxpkt_ = nextpkt_ - 1;
00111 tail_ = 0;
00112 }
00113 delete g;
00114 }
00115 return;
00116 }
00117 g = gap_;
00118 }
00119 else {
00120 double d;
00121
00122 // locate gap this packet belongs to
00123 pg = gap_;
00124 g = gap_->next_;
00125 while (!(i >= g->start_ && i <= g->end_))
00126 {
00127 pg = g;
00128 g = g->next_;
00129 }
00130 d = tnow - g->time_;
00131 delay_sum_ += d;
00132 if (d > max_delay_) max_delay_ = d;
00133 if (d < min_delay_) min_delay_ = d;
00134
00135 // first packet in gap
00136 if (g->start_ == i)
00137 {
00138 if (++g->start_ > g->end_)
00139 {
00140 pg->next_ = g->next_;
00141 if (tail_ == g)
00142 tail_ = pg;
00143 delete g;
00144 }
00145 return;
00146 }
00147 }
00148 // last packet in gap
00149 if (g->end_ == i)
00150 {
00151 g->end_--;
00152 return;
00153 }
00154 // a packet in the middle of gap
00155 pg = new Gap;
00156 pg->start_ = i+1;
00157 pg->end_ = g->end_;
00158 pg->time_ = g->time_;
00159 pg->next_ = g->next_;
00160
00161 g->next_ = pg;
00162 g->end_ = i-1;
00163 if (tail_ == g)
00164 tail_ = pg;
00165 }
|
Here is the call graph for this function:

|
|
Definition at line 171 of file rcvbuf.cc. References Gap::end_, gap_, maxpkt_, Gap::next_, nextpkt_, and Gap::start_. Referenced by add_pkt(), LmsReceiver::handle_lms_pkt(), and LmsReceiver::recv().
|
|
|
Definition at line 183 of file rcvbuf.cc. References Gap::end_, gap_, maxpkt_, Gap::next_, nextpkt_, and Gap::start_.
|
|
|
Definition at line 44 of file rcvbuf.h. Referenced by add_pkt(), LmsReceiver::print_all_stats(), LmsReceiver::print_stats(), and RcvBuffer(). |
|
|
Definition at line 43 of file rcvbuf.h. Referenced by add_pkt(), LmsReceiver::print_all_stats(), LmsReceiver::print_stats(), and RcvBuffer(). |
|
|
Definition at line 49 of file rcvbuf.h. Referenced by add_pkt(), exists_pkt(), print(), and RcvBuffer(). |
|
|
Definition at line 45 of file rcvbuf.h. Referenced by add_pkt(), LmsReceiver::print_all_stats(), LmsReceiver::print_stats(), and RcvBuffer(). |
|
|
Definition at line 41 of file rcvbuf.h. Referenced by add_pkt(), exists_pkt(), print(), LmsReceiver::print_stats(), and RcvBuffer(). |
|
|
Definition at line 46 of file rcvbuf.h. Referenced by add_pkt(), LmsReceiver::print_all_stats(), LmsReceiver::print_stats(), and RcvBuffer(). |
|
|
Definition at line 40 of file rcvbuf.h. Referenced by add_pkt(), exists_pkt(), print(), LmsReceiver::print_stats(), RcvBuffer(), and LmsReceiver::recv(). |
|
|
Definition at line 42 of file rcvbuf.h. Referenced by add_pkt(), LmsReceiver::print_all_stats(), LmsReceiver::print_stats(), and RcvBuffer(). |
|
|
Definition at line 50 of file rcvbuf.h. Referenced by add_pkt(), and RcvBuffer(). |
1.3.3