Index: net/third_party/udt/src/common.h |
=================================================================== |
--- net/third_party/udt/src/common.h (revision 78992) |
+++ net/third_party/udt/src/common.h (working copy) |
@@ -1,316 +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 08/01/2009 |
-*****************************************************************************/ |
- |
-#ifndef __UDT_COMMON_H__ |
-#define __UDT_COMMON_H__ |
- |
- |
-#ifndef WIN32 |
- #include <sys/time.h> |
- #include <sys/uio.h> |
- #include <pthread.h> |
-#else |
- #include <windows.h> |
-#endif |
-#include <cstdlib> |
-#include "udt.h" |
- |
- |
-#ifdef WIN32 |
- // Windows compability |
- typedef HANDLE pthread_t; |
- typedef HANDLE pthread_mutex_t; |
- typedef HANDLE pthread_cond_t; |
- typedef DWORD pthread_key_t; |
-#endif |
- |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-class CTimer |
-{ |
-public: |
- CTimer(); |
- ~CTimer(); |
- |
-public: |
- |
- // Functionality: |
- // Sleep for "interval" CCs. |
- // Parameters: |
- // 0) [in] interval: CCs to sleep. |
- // Returned value: |
- // None. |
- |
- void sleep(const uint64_t& interval); |
- |
- // Functionality: |
- // Seelp until CC "nexttime". |
- // Parameters: |
- // 0) [in] nexttime: next time the caller is waken up. |
- // Returned value: |
- // None. |
- |
- void sleepto(const uint64_t& nexttime); |
- |
- // Functionality: |
- // Stop the sleep() or sleepto() methods. |
- // Parameters: |
- // None. |
- // Returned value: |
- // None. |
- |
- void interrupt(); |
- |
- // Functionality: |
- // trigger the clock for a tick, for better granuality in no_busy_waiting timer. |
- // Parameters: |
- // None. |
- // Returned value: |
- // None. |
- |
- void tick(); |
- |
-public: |
- |
- // Functionality: |
- // Read the CPU clock cycle into x. |
- // Parameters: |
- // 0) [out] x: to record cpu clock cycles. |
- // Returned value: |
- // None. |
- |
- static void rdtsc(uint64_t &x); |
- |
- // Functionality: |
- // return the CPU frequency. |
- // Parameters: |
- // None. |
- // Returned value: |
- // CPU frequency. |
- |
- static uint64_t getCPUFrequency(); |
- |
- // Functionality: |
- // check the current time, 64bit, in microseconds. |
- // Parameters: |
- // None. |
- // Returned value: |
- // current time in microseconds. |
- |
- static uint64_t getTime(); |
- |
- // Functionality: |
- // trigger an event such as new connection, close, new data, etc. for "select" call. |
- // Parameters: |
- // None. |
- // Returned value: |
- // None. |
- |
- static void triggerEvent(); |
- |
- // Functionality: |
- // wait for an event to br triggered by "triggerEvent". |
- // Parameters: |
- // None. |
- // Returned value: |
- // None. |
- |
- static void waitForEvent(); |
- |
- // Functionality: |
- // sleep for a short interval. exact sleep time does not matter |
- // Parameters: |
- // None. |
- // Returned value: |
- // None. |
- |
- static void sleep(); |
- |
-private: |
- uint64_t m_ullSchedTime; // next schedulled time |
- |
- pthread_cond_t m_TickCond; |
- pthread_mutex_t m_TickLock; |
- |
- static pthread_cond_t m_EventCond; |
- static pthread_mutex_t m_EventLock; |
- |
-private: |
- static uint64_t s_ullCPUFrequency; // CPU frequency : clock cycles per microsecond |
- static uint64_t readCPUFrequency(); |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-class CGuard |
-{ |
-public: |
- CGuard(pthread_mutex_t& lock); |
- ~CGuard(); |
- |
-public: |
- static void enterCS(pthread_mutex_t& lock); |
- static void leaveCS(pthread_mutex_t& lock); |
- |
- static void createMutex(pthread_mutex_t& lock); |
- static void releaseMutex(pthread_mutex_t& lock); |
- |
- static void createCond(pthread_cond_t& cond); |
- static void releaseCond(pthread_cond_t& cond); |
- |
-private: |
- pthread_mutex_t& m_Mutex; // Alias name of the mutex to be protected |
- int m_iLocked; // Locking status |
- |
- CGuard& operator=(const CGuard&); |
-}; |
- |
- |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// UDT Sequence Number 0 - (2^31 - 1) |
- |
-// seqcmp: compare two seq#, considering the wraping |
-// seqlen: length from the 1st to the 2nd seq#, including both |
-// seqoff: offset from the 2nd to the 1st seq# |
-// incseq: increase the seq# by 1 |
-// decseq: decrease the seq# by 1 |
-// incseq: increase the seq# by a given offset |
- |
-class CSeqNo |
-{ |
-public: |
- inline static int seqcmp(const int32_t& seq1, const int32_t& seq2) |
- {return (abs(seq1 - seq2) < m_iSeqNoTH) ? (seq1 - seq2) : (seq2 - seq1);} |
- |
- inline static int seqlen(const int32_t& seq1, const int32_t& seq2) |
- {return (seq1 <= seq2) ? (seq2 - seq1 + 1) : (seq2 - seq1 + m_iMaxSeqNo + 2);} |
- |
- inline static int seqoff(const int32_t& seq1, const int32_t& seq2) |
- { |
- if (abs(seq1 - seq2) < m_iSeqNoTH) |
- return seq2 - seq1; |
- |
- if (seq1 < seq2) |
- return seq2 - seq1 - m_iMaxSeqNo - 1; |
- |
- return seq2 - seq1 + m_iMaxSeqNo + 1; |
- } |
- |
- inline static int32_t incseq(const int32_t seq) |
- {return (seq == m_iMaxSeqNo) ? 0 : seq + 1;} |
- |
- inline static int32_t decseq(const int32_t& seq) |
- {return (seq == 0) ? m_iMaxSeqNo : seq - 1;} |
- |
- inline static int32_t incseq(const int32_t& seq, const int32_t& inc) |
- {return (m_iMaxSeqNo - seq >= inc) ? seq + inc : seq - m_iMaxSeqNo + inc - 1;} |
- |
-public: |
- static const int32_t m_iSeqNoTH; // threshold for comparing seq. no. |
- static const int32_t m_iMaxSeqNo; // maximum sequence number used in UDT |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// UDT ACK Sub-sequence Number: 0 - (2^31 - 1) |
- |
-class CAckNo |
-{ |
-public: |
- inline static int32_t incack(const int32_t& ackno) |
- {return (ackno == m_iMaxAckSeqNo) ? 0 : ackno + 1;} |
- |
-public: |
- static const int32_t m_iMaxAckSeqNo; // maximum ACK sub-sequence number used in UDT |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// UDT Message Number: 0 - (2^29 - 1) |
- |
-class CMsgNo |
-{ |
-public: |
- inline static int msgcmp(const int32_t& msgno1, const int32_t& msgno2) |
- {return (abs(msgno1 - msgno2) < m_iMsgNoTH) ? (msgno1 - msgno2) : (msgno2 - msgno1);} |
- |
- inline static int msglen(const int32_t& msgno1, const int32_t& msgno2) |
- {return (msgno1 <= msgno2) ? (msgno2 - msgno1 + 1) : (msgno2 - msgno1 + m_iMaxMsgNo + 2);} |
- |
- inline static int msgoff(const int32_t& msgno1, const int32_t& msgno2) |
- { |
- if (abs(msgno1 - msgno2) < m_iMsgNoTH) |
- return msgno2 - msgno1; |
- |
- if (msgno1 < msgno2) |
- return msgno2 - msgno1 - m_iMaxMsgNo - 1; |
- |
- return msgno2 - msgno1 + m_iMaxMsgNo + 1; |
- } |
- |
- inline static int32_t incmsg(const int32_t& msgno) |
- {return (msgno == m_iMaxMsgNo) ? 0 : msgno + 1;} |
- |
-public: |
- static const int32_t m_iMsgNoTH; // threshold for comparing msg. no. |
- static const int32_t m_iMaxMsgNo; // maximum message number used in UDT |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-struct CIPAddress |
-{ |
- static bool ipcmp(const sockaddr* addr1, const sockaddr* addr2, const int& ver = AF_INET); |
- static void ntop(const sockaddr* addr, uint32_t ip[4], const int& ver = AF_INET); |
- static void pton(sockaddr* addr, const uint32_t ip[4], const int& ver = AF_INET); |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-struct CMD5 |
-{ |
- static void compute(const char* input, unsigned char result[16]); |
-}; |
- |
- |
-#endif |