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 | <!-- |
---|
10 | function 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 | } |
---|
22 | function 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 | } |
---|
46 | window.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 Page</span></a></li> |
---|
53 | <li><a href="pages.html"><span>Related 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 List</span></a></li> |
---|
62 | <li><a href="classes.html"><span>Class Index</span></a></li> |
---|
63 | <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> |
---|
64 | <li><a href="functions.html"><span>Class 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 <<a class="el" href="tcp_8h-source.html">tcp.h</a>></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 | </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"> </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 &)" --> |
---|
86 | </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> &)</td></tr> |
---|
87 | |
---|
88 | <tr><td class="mdescLeft"> </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 | </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"> </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="()" --> |
---|
94 | void </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"> </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)" --> |
---|
98 | void </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"> </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)" --> |
---|
102 | void </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"> </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 " --> |
---|
106 | unsigned </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"> </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> </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"> </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> </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"> </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> </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"> </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 " --> |
---|
122 | unsigned </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"> </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 &os, int detail=0) const " --> |
---|
126 | std::ostream & </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TCP__Receiver__Buffer.html#fba4ad5261d32f0847c398b6d2d367ca">info</a> (std::ostream &os, int detail=0) const </td></tr> |
---|
127 | |
---|
128 | <tr><td class="mdescLeft"> </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> </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"> </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="" --> |
---|
135 | std::list< <a class="el" href="classitpp_1_1TCP__Segment.html">TCP_Segment</a> > </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"> </td><td class="mdescRight">ADD DOCUMENTATION HERE. <br></td></tr> |
---|
138 | </table> |
---|
139 | <hr><a name="_details"></a><h2>Detailed Description</h2> |
---|
140 | TTCPReceiverBuffer 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> |
---|
141 | Data 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> |
---|
142 | Furthermore, 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> |
---|
145 | Kutter </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 |
---|
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> |
---|