Index: net/third_party/udt/src/ccc.h |
=================================================================== |
--- net/third_party/udt/src/ccc.h (revision 78992) |
+++ net/third_party/udt/src/ccc.h (working copy) |
@@ -1,278 +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_CCC_H__ |
-#define __UDT_CCC_H__ |
- |
- |
-#include "udt.h" |
-#include "packet.h" |
- |
- |
-class UDT_API CCC |
-{ |
-friend class CUDT; |
- |
-public: |
- CCC(); |
- virtual ~CCC(); |
- |
-private: |
- CCC(const CCC&); |
- CCC& operator=(const CCC&) {return *this;} |
- |
-public: |
- |
- // Functionality: |
- // Callback function to be called (only) at the start of a UDT connection. |
- // note that this is different from CCC(), which is always called. |
- // Parameters: |
- // None. |
- // Returned value: |
- // None. |
- |
- virtual void init() {} |
- |
- // Functionality: |
- // Callback function to be called when a UDT connection is closed. |
- // Parameters: |
- // None. |
- // Returned value: |
- // None. |
- |
- virtual void close() {} |
- |
- // Functionality: |
- // Callback function to be called when an ACK packet is received. |
- // Parameters: |
- // 0) [in] ackno: the data sequence number acknowledged by this ACK. |
- // Returned value: |
- // None. |
- |
- virtual void onACK(const int32_t&) {} |
- |
- // Functionality: |
- // Callback function to be called when a loss report is received. |
- // Parameters: |
- // 0) [in] losslist: list of sequence number of packets, in the format describled in packet.cpp. |
- // 1) [in] size: length of the loss list. |
- // Returned value: |
- // None. |
- |
- virtual void onLoss(const int32_t*, const int&) {} |
- |
- // Functionality: |
- // Callback function to be called when a timeout event occurs. |
- // Parameters: |
- // None. |
- // Returned value: |
- // None. |
- |
- virtual void onTimeout() {} |
- |
- // Functionality: |
- // Callback function to be called when a data is sent. |
- // Parameters: |
- // 0) [in] seqno: the data sequence number. |
- // 1) [in] size: the payload size. |
- // Returned value: |
- // None. |
- |
- virtual void onPktSent(const CPacket*) {} |
- |
- // Functionality: |
- // Callback function to be called when a data is received. |
- // Parameters: |
- // 0) [in] seqno: the data sequence number. |
- // 1) [in] size: the payload size. |
- // Returned value: |
- // None. |
- |
- virtual void onPktReceived(const CPacket*) {} |
- |
- // Functionality: |
- // Callback function to Process a user defined packet. |
- // Parameters: |
- // 0) [in] pkt: the user defined packet. |
- // Returned value: |
- // None. |
- |
- virtual void processCustomMsg(const CPacket*) {} |
- |
-protected: |
- |
- // Functionality: |
- // Set periodical acknowldging and the ACK period. |
- // Parameters: |
- // 0) [in] msINT: the period to send an ACK. |
- // Returned value: |
- // None. |
- |
- void setACKTimer(const int& msINT); |
- |
- // Functionality: |
- // Set packet-based acknowldging and the number of packets to send an ACK. |
- // Parameters: |
- // 0) [in] pktINT: the number of packets to send an ACK. |
- // Returned value: |
- // None. |
- |
- void setACKInterval(const int& pktINT); |
- |
- // Functionality: |
- // Set RTO value. |
- // Parameters: |
- // 0) [in] msRTO: RTO in macroseconds. |
- // Returned value: |
- // None. |
- |
- void setRTO(const int& usRTO); |
- |
- // Functionality: |
- // Send a user defined control packet. |
- // Parameters: |
- // 0) [in] pkt: user defined packet. |
- // Returned value: |
- // None. |
- |
- void sendCustomMsg(CPacket& pkt) const; |
- |
- // Functionality: |
- // retrieve performance information. |
- // Parameters: |
- // None. |
- // Returned value: |
- // Pointer to a performance info structure. |
- |
- const CPerfMon* getPerfInfo(); |
- |
- // Functionality: |
- // Set user defined parameters. |
- // Parameters: |
- // 0) [in] param: the paramters in one buffer. |
- // 1) [in] size: the size of the buffer. |
- // Returned value: |
- // None. |
- |
- void setUserParam(const char* param, const int& size); |
- |
-private: |
- void setMSS(const int& mss); |
- void setMaxCWndSize(const int& cwnd); |
- void setBandwidth(const int& bw); |
- void setSndCurrSeqNo(const int32_t& seqno); |
- void setRcvRate(const int& rcvrate); |
- void setRTT(const int& rtt); |
- |
-protected: |
- const int32_t& m_iSYNInterval; // UDT constant parameter, SYN |
- |
- double m_dPktSndPeriod; // Packet sending period, in microseconds |
- double m_dCWndSize; // Congestion window size, in packets |
- |
- int m_iBandwidth; // estimated bandwidth, packets per second |
- double m_dMaxCWndSize; // maximum cwnd size, in packets |
- |
- int m_iMSS; // Maximum Packet Size, including all packet headers |
- int32_t m_iSndCurrSeqNo; // current maximum seq no sent out |
- int m_iRcvRate; // packet arrive rate at receiver side, packets per second |
- int m_iRTT; // current estimated RTT, microsecond |
- |
- char* m_pcParam; // user defined parameter |
- int m_iPSize; // size of m_pcParam |
- |
-private: |
- UDTSOCKET m_UDT; // The UDT entity that this congestion control algorithm is bound to |
- |
- int m_iACKPeriod; // Periodical timer to send an ACK, in milliseconds |
- int m_iACKInterval; // How many packets to send one ACK, in packets |
- |
- bool m_bUserDefinedRTO; // if the RTO value is defined by users |
- int m_iRTO; // RTO value, microseconds |
- |
- CPerfMon m_PerfInfo; // protocol statistics information |
-}; |
- |
-class CCCVirtualFactory |
-{ |
-public: |
- virtual ~CCCVirtualFactory() {} |
- |
- virtual CCC* create() = 0; |
- virtual CCCVirtualFactory* clone() = 0; |
-}; |
- |
-template <class T> |
-class CCCFactory: public CCCVirtualFactory |
-{ |
-public: |
- virtual ~CCCFactory() {} |
- |
- virtual CCC* create() {return new T;} |
- virtual CCCVirtualFactory* clone() {return new CCCFactory<T>;} |
-}; |
- |
-class CUDTCC: public CCC |
-{ |
-public: |
- CUDTCC(); |
- |
-public: |
- virtual void init(); |
- virtual void onACK(const int32_t&); |
- virtual void onLoss(const int32_t*, const int&); |
- virtual void onTimeout(); |
- |
-private: |
- int m_iRCInterval; // UDT Rate control interval |
- uint64_t m_LastRCTime; // last rate increase time |
- bool m_bSlowStart; // if in slow start phase |
- int32_t m_iLastAck; // last ACKed seq no |
- bool m_bLoss; // if loss happened since last rate increase |
- int32_t m_iLastDecSeq; // max pkt seq no sent out when last decrease happened |
- double m_dLastDecPeriod; // value of pktsndperiod when last decrease happened |
- int m_iNAKCount; // NAK counter |
- int m_iDecRandom; // random threshold on decrease by number of loss events |
- int m_iAvgNAKNum; // average number of NAKs per congestion |
- int m_iDecCount; // number of decreases in a congestion epoch |
-}; |
- |
-#endif |