Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(174)

Side by Side Diff: net/third_party/udt/src/buffer.h

Issue 6708091: Remove UDT. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/third_party/udt/src/api.cpp ('k') | net/third_party/udt/src/buffer.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*****************************************************************************
2 Copyright (c) 2001 - 2009, The Board of Trustees of the University of Illinois.
3 All rights reserved.
4
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are
7 met:
8
9 * Redistributions of source code must retain the above
10 copyright notice, this list of conditions and the
11 following disclaimer.
12
13 * Redistributions in binary form must reproduce the
14 above copyright notice, this list of conditions
15 and the following disclaimer in the documentation
16 and/or other materials provided with the distribution.
17
18 * Neither the name of the University of Illinois
19 nor the names of its contributors may be used to
20 endorse or promote products derived from this
21 software without specific prior written permission.
22
23 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
24 IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26 PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
27 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 *****************************************************************************/
35
36 /*****************************************************************************
37 written by
38 Yunhong Gu, last updated 05/05/2009
39 *****************************************************************************/
40
41 #ifndef __UDT_BUFFER_H__
42 #define __UDT_BUFFER_H__
43
44
45 #include "udt.h"
46 #include "list.h"
47 #include "queue.h"
48 #include <fstream>
49
50 class CSndBuffer
51 {
52 public:
53 CSndBuffer(const int& size = 32, const int& mss = 1500);
54 ~CSndBuffer();
55
56 // Functionality:
57 // Insert a user buffer into the sending list.
58 // Parameters:
59 // 0) [in] data: pointer to the user data block.
60 // 1) [in] len: size of the block.
61 // 2) [in] ttl: time to live in milliseconds
62 // 3) [in] order: if the block should be delivered in order, for DGRAM only
63 // Returned value:
64 // None.
65
66 void addBuffer(const char* data, const int& len, const int& ttl = -1, const b ool& order = false);
67
68 // Functionality:
69 // Read a block of data from file and insert it into the sending list.
70 // Parameters:
71 // 0) [in] ifs: input file stream.
72 // 1) [in] len: size of the block.
73 // Returned value:
74 // actual size of data added from the file.
75
76 int addBufferFromFile(std::fstream& ifs, const int& len);
77
78 // Functionality:
79 // Find data position to pack a DATA packet from the furthest reading p oint.
80 // Parameters:
81 // 0) [out] data: the pointer to the data position.
82 // 1) [out] msgno: message number of the packet.
83 // Returned value:
84 // Actual length of data read.
85
86 int readData(char** data, int32_t& msgno);
87
88 // Functionality:
89 // Find data position to pack a DATA packet for a retransmission.
90 // Parameters:
91 // 0) [out] data: the pointer to the data position.
92 // 1) [in] offset: offset from the last ACK point.
93 // 2) [out] msgno: message number of the packet.
94 // 3) [out] msglen: length of the message
95 // Returned value:
96 // Actual length of data read.
97
98 int readData(char** data, const int offset, int32_t& msgno, int& msglen);
99
100 // Functionality:
101 // Update the ACK point and may release/unmap/return the user data acco rding to the flag.
102 // Parameters:
103 // 0) [in] offset: number of packets acknowledged.
104 // Returned value:
105 // None.
106
107 void ackData(const int& offset);
108
109 // Functionality:
110 // Read size of data still in the sending list.
111 // Parameters:
112 // None.
113 // Returned value:
114 // Current size of the data in the sending list.
115
116 int getCurrBufSize() const;
117
118 private:
119 void increase();
120
121 private:
122 pthread_mutex_t m_BufLock; // used to synchronize buffer operation
123
124 struct Block
125 {
126 char* m_pcData; // pointer to the data block
127 int m_iLength; // length of the block
128
129 int32_t m_iMsgNo; // message number
130 uint64_t m_OriginTime; // original request time
131 int m_iTTL; // time to live (milliseconds)
132
133 Block* m_pNext; // next block
134 } *m_pBlock, *m_pFirstBlock, *m_pCurrBlock, *m_pLastBlock;
135
136 // m_pBlock: The head pointer
137 // m_pFirstBlock: The first block
138 // m_pCurrBlock: The current block
139 // m_pLastBlock: The last block (if first == last, buffer is empty)
140
141 struct Buffer
142 {
143 char* m_pcData; // buffer
144 int m_iSize; // size
145 Buffer* m_pNext; // next buffer
146 } *m_pBuffer; // physical buffer
147
148 int32_t m_iNextMsgNo; // next message number
149
150 int m_iSize; // buffer size (number of packets)
151 int m_iMSS; // maximum seqment/packet size
152
153 int m_iCount; // number of used blocks
154
155 private:
156 CSndBuffer(const CSndBuffer&);
157 CSndBuffer& operator=(const CSndBuffer&);
158 };
159
160 ////////////////////////////////////////////////////////////////////////////////
161
162 class CRcvBuffer
163 {
164 public:
165 CRcvBuffer(CUnitQueue* queue, const int& bufsize = 65536);
166 ~CRcvBuffer();
167
168 // Functionality:
169 // Write data into the buffer.
170 // Parameters:
171 // 0) [in] unit: pointer to a data unit containing new packet
172 // 1) [in] offset: offset from last ACK point.
173 // Returned value:
174 // 0 is success, -1 if data is repeated.
175
176 int addData(CUnit* unit, int offset);
177
178 // Functionality:
179 // Read data into a user buffer.
180 // Parameters:
181 // 0) [in] data: pointer to user buffer.
182 // 1) [in] len: length of user buffer.
183 // Returned value:
184 // size of data read.
185
186 int readBuffer(char* data, const int& len);
187
188 // Functionality:
189 // Read data directly into file.
190 // Parameters:
191 // 0) [in] file: C++ file stream.
192 // 1) [in] len: expected length of data to write into the file.
193 // Returned value:
194 // size of data read.
195
196 int readBufferToFile(std::fstream& ofs, const int& len);
197
198 // Functionality:
199 // Update the ACK point of the buffer.
200 // Parameters:
201 // 0) [in] len: size of data to be acknowledged.
202 // Returned value:
203 // 1 if a user buffer is fulfilled, otherwise 0.
204
205 void ackData(const int& len);
206
207 // Functionality:
208 // Query how many buffer space left for data receiving.
209 // Parameters:
210 // None.
211 // Returned value:
212 // size of available buffer space (including user buffer) for data rece iving.
213
214 int getAvailBufSize() const;
215
216 // Functionality:
217 // Query how many data has been continuously received (for reading).
218 // Parameters:
219 // None.
220 // Returned value:
221 // size of valid (continous) data for reading.
222
223 int getRcvDataSize() const;
224
225 // Functionality:
226 // mark the message to be dropped from the message list.
227 // Parameters:
228 // 0) [in] msgno: message nuumer.
229 // Returned value:
230 // None.
231
232 void dropMsg(const int32_t& msgno);
233
234 // Functionality:
235 // read a message.
236 // Parameters:
237 // 0) [out] data: buffer to write the message into.
238 // 1) [in] len: size of the buffer.
239 // Returned value:
240 // actuall size of data read.
241
242 int readMsg(char* data, const int& len);
243
244 // Functionality:
245 // Query how many messages are available now.
246 // Parameters:
247 // None.
248 // Returned value:
249 // number of messages available for recvmsg.
250
251 int getRcvMsgNum();
252
253 private:
254 bool scanMsg(int& start, int& end, bool& passack);
255
256 private:
257 CUnit** m_pUnit; // pointer to the protocol buffer
258 int m_iSize; // size of the protocol buffer
259 CUnitQueue* m_pUnitQueue; // the shared unit queue
260
261 int m_iStartPos; // the head position for I/O (inclusive)
262 int m_iLastAckPos; // the last ACKed position (exclusive)
263 // EMPTY: m_iStartPos = m_iLastAckPos FULL: m_iStartPos = m_iLastAckPos + 1
264 int m_iMaxPos; // the furthest data position
265
266 int m_iNotch; // the starting read point of the first unit
267
268 private:
269 CRcvBuffer();
270 CRcvBuffer(const CRcvBuffer&);
271 CRcvBuffer& operator=(const CRcvBuffer&);
272 };
273
274
275 #endif
OLDNEW
« no previous file with comments | « net/third_party/udt/src/api.cpp ('k') | net/third_party/udt/src/buffer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698