Index: net/third_party/udt/src/buffer.h |
=================================================================== |
--- net/third_party/udt/src/buffer.h (revision 78992) |
+++ net/third_party/udt/src/buffer.h (working copy) |
@@ -1,275 +0,0 @@ |
-/***************************************************************************** |
-Copyright (c) 2001 - 2009, The Board of Trustees of the University of Illinois. |
-All rights reserved. |
- |
-Redistribution and use in source and binary forms, with or without |
-modification, are permitted provided that the following conditions are |
-met: |
- |
-* Redistributions of source code must retain the above |
- copyright notice, this list of conditions and the |
- following disclaimer. |
- |
-* Redistributions in binary form must reproduce the |
- above copyright notice, this list of conditions |
- and the following disclaimer in the documentation |
- and/or other materials provided with the distribution. |
- |
-* Neither the name of the University of Illinois |
- nor the names of its contributors may be used to |
- endorse or promote products derived from this |
- software without specific prior written permission. |
- |
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-*****************************************************************************/ |
- |
-/***************************************************************************** |
-written by |
- Yunhong Gu, last updated 05/05/2009 |
-*****************************************************************************/ |
- |
-#ifndef __UDT_BUFFER_H__ |
-#define __UDT_BUFFER_H__ |
- |
- |
-#include "udt.h" |
-#include "list.h" |
-#include "queue.h" |
-#include <fstream> |
- |
-class CSndBuffer |
-{ |
-public: |
- CSndBuffer(const int& size = 32, const int& mss = 1500); |
- ~CSndBuffer(); |
- |
- // Functionality: |
- // Insert a user buffer into the sending list. |
- // Parameters: |
- // 0) [in] data: pointer to the user data block. |
- // 1) [in] len: size of the block. |
- // 2) [in] ttl: time to live in milliseconds |
- // 3) [in] order: if the block should be delivered in order, for DGRAM only |
- // Returned value: |
- // None. |
- |
- void addBuffer(const char* data, const int& len, const int& ttl = -1, const bool& order = false); |
- |
- // Functionality: |
- // Read a block of data from file and insert it into the sending list. |
- // Parameters: |
- // 0) [in] ifs: input file stream. |
- // 1) [in] len: size of the block. |
- // Returned value: |
- // actual size of data added from the file. |
- |
- int addBufferFromFile(std::fstream& ifs, const int& len); |
- |
- // Functionality: |
- // Find data position to pack a DATA packet from the furthest reading point. |
- // Parameters: |
- // 0) [out] data: the pointer to the data position. |
- // 1) [out] msgno: message number of the packet. |
- // Returned value: |
- // Actual length of data read. |
- |
- int readData(char** data, int32_t& msgno); |
- |
- // Functionality: |
- // Find data position to pack a DATA packet for a retransmission. |
- // Parameters: |
- // 0) [out] data: the pointer to the data position. |
- // 1) [in] offset: offset from the last ACK point. |
- // 2) [out] msgno: message number of the packet. |
- // 3) [out] msglen: length of the message |
- // Returned value: |
- // Actual length of data read. |
- |
- int readData(char** data, const int offset, int32_t& msgno, int& msglen); |
- |
- // Functionality: |
- // Update the ACK point and may release/unmap/return the user data according to the flag. |
- // Parameters: |
- // 0) [in] offset: number of packets acknowledged. |
- // Returned value: |
- // None. |
- |
- void ackData(const int& offset); |
- |
- // Functionality: |
- // Read size of data still in the sending list. |
- // Parameters: |
- // None. |
- // Returned value: |
- // Current size of the data in the sending list. |
- |
- int getCurrBufSize() const; |
- |
-private: |
- void increase(); |
- |
-private: |
- pthread_mutex_t m_BufLock; // used to synchronize buffer operation |
- |
- struct Block |
- { |
- char* m_pcData; // pointer to the data block |
- int m_iLength; // length of the block |
- |
- int32_t m_iMsgNo; // message number |
- uint64_t m_OriginTime; // original request time |
- int m_iTTL; // time to live (milliseconds) |
- |
- Block* m_pNext; // next block |
- } *m_pBlock, *m_pFirstBlock, *m_pCurrBlock, *m_pLastBlock; |
- |
- // m_pBlock: The head pointer |
- // m_pFirstBlock: The first block |
- // m_pCurrBlock: The current block |
- // m_pLastBlock: The last block (if first == last, buffer is empty) |
- |
- struct Buffer |
- { |
- char* m_pcData; // buffer |
- int m_iSize; // size |
- Buffer* m_pNext; // next buffer |
- } *m_pBuffer; // physical buffer |
- |
- int32_t m_iNextMsgNo; // next message number |
- |
- int m_iSize; // buffer size (number of packets) |
- int m_iMSS; // maximum seqment/packet size |
- |
- int m_iCount; // number of used blocks |
- |
-private: |
- CSndBuffer(const CSndBuffer&); |
- CSndBuffer& operator=(const CSndBuffer&); |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-class CRcvBuffer |
-{ |
-public: |
- CRcvBuffer(CUnitQueue* queue, const int& bufsize = 65536); |
- ~CRcvBuffer(); |
- |
- // Functionality: |
- // Write data into the buffer. |
- // Parameters: |
- // 0) [in] unit: pointer to a data unit containing new packet |
- // 1) [in] offset: offset from last ACK point. |
- // Returned value: |
- // 0 is success, -1 if data is repeated. |
- |
- int addData(CUnit* unit, int offset); |
- |
- // Functionality: |
- // Read data into a user buffer. |
- // Parameters: |
- // 0) [in] data: pointer to user buffer. |
- // 1) [in] len: length of user buffer. |
- // Returned value: |
- // size of data read. |
- |
- int readBuffer(char* data, const int& len); |
- |
- // Functionality: |
- // Read data directly into file. |
- // Parameters: |
- // 0) [in] file: C++ file stream. |
- // 1) [in] len: expected length of data to write into the file. |
- // Returned value: |
- // size of data read. |
- |
- int readBufferToFile(std::fstream& ofs, const int& len); |
- |
- // Functionality: |
- // Update the ACK point of the buffer. |
- // Parameters: |
- // 0) [in] len: size of data to be acknowledged. |
- // Returned value: |
- // 1 if a user buffer is fulfilled, otherwise 0. |
- |
- void ackData(const int& len); |
- |
- // Functionality: |
- // Query how many buffer space left for data receiving. |
- // Parameters: |
- // None. |
- // Returned value: |
- // size of available buffer space (including user buffer) for data receiving. |
- |
- int getAvailBufSize() const; |
- |
- // Functionality: |
- // Query how many data has been continuously received (for reading). |
- // Parameters: |
- // None. |
- // Returned value: |
- // size of valid (continous) data for reading. |
- |
- int getRcvDataSize() const; |
- |
- // Functionality: |
- // mark the message to be dropped from the message list. |
- // Parameters: |
- // 0) [in] msgno: message nuumer. |
- // Returned value: |
- // None. |
- |
- void dropMsg(const int32_t& msgno); |
- |
- // Functionality: |
- // read a message. |
- // Parameters: |
- // 0) [out] data: buffer to write the message into. |
- // 1) [in] len: size of the buffer. |
- // Returned value: |
- // actuall size of data read. |
- |
- int readMsg(char* data, const int& len); |
- |
- // Functionality: |
- // Query how many messages are available now. |
- // Parameters: |
- // None. |
- // Returned value: |
- // number of messages available for recvmsg. |
- |
- int getRcvMsgNum(); |
- |
-private: |
- bool scanMsg(int& start, int& end, bool& passack); |
- |
-private: |
- CUnit** m_pUnit; // pointer to the protocol buffer |
- int m_iSize; // size of the protocol buffer |
- CUnitQueue* m_pUnitQueue; // the shared unit queue |
- |
- int m_iStartPos; // the head position for I/O (inclusive) |
- int m_iLastAckPos; // the last ACKed position (exclusive) |
- // EMPTY: m_iStartPos = m_iLastAckPos FULL: m_iStartPos = m_iLastAckPos + 1 |
- int m_iMaxPos; // the furthest data position |
- |
- int m_iNotch; // the starting read point of the first unit |
- |
-private: |
- CRcvBuffer(); |
- CRcvBuffer(const CRcvBuffer&); |
- CRcvBuffer& operator=(const CRcvBuffer&); |
-}; |
- |
- |
-#endif |