root/doc/html/classitpp_1_1TCP__Receiver__Buffer.html @ 354

Revision 353, 12.4 kB (checked in by smidl, 15 years ago)

doc

Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3<title>mixpp: itpp::TCP_Receiver_Buffer Class Reference</title>
4<link href="tabs.css" rel="stylesheet" type="text/css">
5<link href="doxygen.css" rel="stylesheet" type="text/css">
6</head><body>
7<!-- Generated by Doxygen 1.5.8 -->
8<script type="text/javascript">
9<!--
10function changeDisplayState (e){
11  var num=this.id.replace(/[^[0-9]/g,'');
12  var button=this.firstChild;
13  var sectionDiv=document.getElementById('dynsection'+num);
14  if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){
15    sectionDiv.style.display='block';
16    button.src='open.gif';
17  }else{
18    sectionDiv.style.display='none';
19    button.src='closed.gif';
20  }
21}
22function initDynSections(){
23  var divs=document.getElementsByTagName('div');
24  var sectionCounter=1;
25  for(var i=0;i<divs.length-1;i++){
26    if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){
27      var header=divs[i];
28      var section=divs[i+1];
29      var button=header.firstChild;
30      if (button!='IMG'){
31        divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild);
32        button=document.createElement('img');
33        divs[i].insertBefore(button,divs[i].firstChild);
34      }
35      header.style.cursor='pointer';
36      header.onclick=changeDisplayState;
37      header.id='dynheader'+sectionCounter;
38      button.src='closed.gif';
39      section.id='dynsection'+sectionCounter;
40      section.style.display='none';
41      section.style.marginLeft='14px';
42      sectionCounter++;
43    }
44  }
45}
46window.onload = initDynSections;
47-->
48</script>
49<div class="navigation" id="top">
50  <div class="tabs">
51    <ul>
52      <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
53      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
54      <li><a href="modules.html"><span>Modules</span></a></li>
55      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
56      <li><a href="files.html"><span>Files</span></a></li>
57    </ul>
58  </div>
59  <div class="tabs">
60    <ul>
61      <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
62      <li><a href="classes.html"><span>Class&nbsp;Index</span></a></li>
63      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
64      <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
65    </ul>
66  </div>
67  <div class="navpath"><b>itpp</b>::<a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html">TCP_Receiver_Buffer</a>
68  </div>
69</div>
70<div class="contents">
71<h1>itpp::TCP_Receiver_Buffer Class Reference<br>
72<small>
73[<a class="el" href="group__protocol.html">Protocols Module</a>]</small>
74</h1><!-- doxytag: class="itpp::TCP_Receiver_Buffer" --><code>#include &lt;<a class="el" href="tcp_8h-source.html">tcp.h</a>&gt;</code>
75<p>
76
77<p>
78<a href="classitpp_1_1TCP__Receiver__Buffer-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
79<tr><td></td></tr>
80<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
81<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="59342d3b7bfea3d39c6e8250f3655c77"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::TCP_Receiver_Buffer" ref="59342d3b7bfea3d39c6e8250f3655c77" args="()" -->
82&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#59342d3b7bfea3d39c6e8250f3655c77">TCP_Receiver_Buffer</a> ()</td></tr>
83
84<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">ADD DOCUMENTATION HERE. <br></td></tr>
85<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cbf80fad9c2ec5ad0111e3362b038cf6"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::TCP_Receiver_Buffer" ref="cbf80fad9c2ec5ad0111e3362b038cf6" args="(const TCP_Receiver_Buffer &amp;)" -->
86&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#cbf80fad9c2ec5ad0111e3362b038cf6">TCP_Receiver_Buffer</a> (const <a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html">TCP_Receiver_Buffer</a> &amp;)</td></tr>
87
88<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">ADD DOCUMENTATION HERE. <br></td></tr>
89<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="769ffd3c7e2100898d2a1ea2916a3011"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::~TCP_Receiver_Buffer" ref="769ffd3c7e2100898d2a1ea2916a3011" args="()" -->
90&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#769ffd3c7e2100898d2a1ea2916a3011">~TCP_Receiver_Buffer</a> ()</td></tr>
91
92<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">ADD DOCUMENTATION HERE. <br></td></tr>
93<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f13e62167676e2041919162c46f45e70"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::reset" ref="f13e62167676e2041919162c46f45e70" args="()" -->
94void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#f13e62167676e2041919162c46f45e70">reset</a> ()</td></tr>
95
96<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">clears internal list structure <br></td></tr>
97<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f7047da0b210859f97482fbb8610c9eb"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::write" ref="f7047da0b210859f97482fbb8610c9eb" args="(TCP_Segment newBlock)" -->
98void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#f7047da0b210859f97482fbb8610c9eb">write</a> (<a class="el" href="classitpp_1_1TCP__Segment.html">TCP_Segment</a> newBlock)</td></tr>
99
100<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">add segment to the queue <br></td></tr>
101<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="32afd95a20f00d16654eb246f11c1e76"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::read" ref="32afd95a20f00d16654eb246f11c1e76" args="(unsigned noOfBytes)" -->
102void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#32afd95a20f00d16654eb246f11c1e76">read</a> (unsigned noOfBytes)</td></tr>
103
104<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">read up to "noOfBytes" bytes from queue <br></td></tr>
105<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c1506205ce876c839d4c477cf29c0d28"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::first_block_size" ref="c1506205ce876c839d4c477cf29c0d28" args="() const " -->
106unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#c1506205ce876c839d4c477cf29c0d28">first_block_size</a> () const </td></tr>
107
108<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">size of first complete block <br></td></tr>
109<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9c64cbc6c944a611a7bc1946db93082e"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::first_byte" ref="g9c64cbc6c944a611a7bc1946db93082e" args="() const " -->
110<a class="el" href="classitpp_1_1Sequence__Number.html">Sequence_Number</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__protocol.html#g9c64cbc6c944a611a7bc1946db93082e">first_byte</a> () const </td></tr>
111
112<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">first byte stored or missing <br></td></tr>
113<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcfed25ee9a35dcd9860eb817dac466b4"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::last_byte" ref="gcfed25ee9a35dcd9860eb817dac466b4" args="() const " -->
114<a class="el" href="classitpp_1_1Sequence__Number.html">Sequence_Number</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__protocol.html#gcfed25ee9a35dcd9860eb817dac466b4">last_byte</a> () const </td></tr>
115
116<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">highest byte received (+1) <br></td></tr>
117<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g516a93b62f601031d00a1bdfb982fd56"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::next_expected" ref="g516a93b62f601031d00a1bdfb982fd56" args="() const " -->
118<a class="el" href="classitpp_1_1Sequence__Number.html">Sequence_Number</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__protocol.html#g516a93b62f601031d00a1bdfb982fd56">next_expected</a> () const </td></tr>
119
120<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">first byte missing <br></td></tr>
121<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4a901fe92f4513569c337796dd5551d2"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::window" ref="4a901fe92f4513569c337796dd5551d2" args="() const " -->
122unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#4a901fe92f4513569c337796dd5551d2">window</a> () const </td></tr>
123
124<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">ADD DOCUMENTATION HERE. <br></td></tr>
125<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fba4ad5261d32f0847c398b6d2d367ca"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::info" ref="fba4ad5261d32f0847c398b6d2d367ca" args="(std::ostream &amp;os, int detail=0) const " -->
126std::ostream &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#fba4ad5261d32f0847c398b6d2d367ca">info</a> (std::ostream &amp;os, int detail=0) const </td></tr>
127
128<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">print info <br></td></tr>
129<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
130<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="44bfe4a22a27117bf7af1384d9d63578"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::fFirstByte" ref="44bfe4a22a27117bf7af1384d9d63578" args="" -->
131<a class="el" href="classitpp_1_1Sequence__Number.html">Sequence_Number</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#44bfe4a22a27117bf7af1384d9d63578">fFirstByte</a></td></tr>
132
133<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">first byte stored or missing <br></td></tr>
134<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ddd625dbb86178976ecb5010f1b0896b"></a><!-- doxytag: member="itpp::TCP_Receiver_Buffer::fBufList" ref="ddd625dbb86178976ecb5010f1b0896b" args="" -->
135std::list&lt; <a class="el" href="classitpp_1_1TCP__Segment.html">TCP_Segment</a> &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#ddd625dbb86178976ecb5010f1b0896b">fBufList</a></td></tr>
136
137<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">ADD DOCUMENTATION HERE. <br></td></tr>
138</table>
139<hr><a name="_details"></a><h2>Detailed Description</h2>
140TTCPReceiverBuffer is an important part of TTCPReceiver. It is much more complex than the buffer model at the sender side as it has to keep track of out of order segments. The segments received are combined if possible and the resulting non-contiguous segments are stored in a linked list. Moreover TTCPReceiverBuffer stores the smallest sequence number that has not (yet) been read out by the TCP receiver ("first byte").<p>
141Data is written to the buffer by TTCPReceiver using method Write and read out using method Read. Before reading data the TCP receiver has to check whether a data block in the stream is available by calling FirstBlockSize.<p>
142Furthermore, TTCPReceiver requires information from TTCPReceiverBuffer, e.g. about the next sequence number that is missing in the stream (NextExpected) or the receiver window that can be advertised to the sender (Window).<p>
143<dl class="see" compact><dt><b>See also:</b></dt><dd>TTCPReceiver </dd></dl>
144<dl class="author" compact><dt><b>Author:</b></dt><dd>Bodamer <p>
145Kutter </dd></dl>
146<hr>The documentation for this class was generated from the following file:<ul>
147<li><a class="el" href="tcp_8h-source.html">tcp.h</a></ul>
148</div>
149<hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 2 10:02:19 2009 for mixpp by&nbsp;
150<a href="http://www.doxygen.org/index.html">
151<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
152</body>
153</html>
Note: See TracBrowser for help on using the browser.