| Index: net/third_party/udt/src/api.h
|
| ===================================================================
|
| --- net/third_party/udt/src/api.h (revision 78992)
|
| +++ net/third_party/udt/src/api.h (working copy)
|
| @@ -1,261 +0,0 @@
|
| -/*****************************************************************************
|
| -Copyright (c) 2001 - 2010, 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 09/28/2010
|
| -*****************************************************************************/
|
| -
|
| -#ifndef __UDT_API_H__
|
| -#define __UDT_API_H__
|
| -
|
| -
|
| -#include <map>
|
| -#include <vector>
|
| -#include "udt.h"
|
| -#include "packet.h"
|
| -#include "queue.h"
|
| -#include "cache.h"
|
| -#include "epoll.h"
|
| -
|
| -class CUDT;
|
| -
|
| -class CUDTSocket
|
| -{
|
| -public:
|
| - CUDTSocket();
|
| - ~CUDTSocket();
|
| -
|
| - UDTSTATUS m_Status; // current socket state
|
| -
|
| - uint64_t m_TimeStamp; // time when the socket is closed
|
| -
|
| - int m_iIPversion; // IP version
|
| - sockaddr* m_pSelfAddr; // pointer to the local address of the socket
|
| - sockaddr* m_pPeerAddr; // pointer to the peer address of the socket
|
| -
|
| - UDTSOCKET m_SocketID; // socket ID
|
| - UDTSOCKET m_ListenSocket; // ID of the listener socket; 0 means this is an independent socket
|
| -
|
| - UDTSOCKET m_PeerID; // peer socket ID
|
| - int32_t m_iISN; // initial sequence number, used to tell different connection from same IP:port
|
| -
|
| - CUDT* m_pUDT; // pointer to the UDT entity
|
| -
|
| - std::set<UDTSOCKET>* m_pQueuedSockets; // set of connections waiting for accept()
|
| - std::set<UDTSOCKET>* m_pAcceptSockets; // set of accept()ed connections
|
| -
|
| - pthread_cond_t m_AcceptCond; // used to block "accept" call
|
| - pthread_mutex_t m_AcceptLock; // mutex associated to m_AcceptCond
|
| -
|
| - unsigned int m_uiBackLog; // maximum number of connections in queue
|
| -
|
| - int m_iMuxID; // multiplexer ID
|
| -
|
| -private:
|
| - CUDTSocket(const CUDTSocket&);
|
| - CUDTSocket& operator=(const CUDTSocket&);
|
| -};
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -class CUDTUnited
|
| -{
|
| -friend class CUDT;
|
| -
|
| -public:
|
| - CUDTUnited();
|
| - ~CUDTUnited();
|
| -
|
| -public:
|
| -
|
| - // Functionality:
|
| - // initialize the UDT library.
|
| - // Parameters:
|
| - // None.
|
| - // Returned value:
|
| - // 0 if success, otherwise -1 is returned.
|
| -
|
| - int startup();
|
| -
|
| - // Functionality:
|
| - // release the UDT library.
|
| - // Parameters:
|
| - // None.
|
| - // Returned value:
|
| - // 0 if success, otherwise -1 is returned.
|
| -
|
| - int cleanup();
|
| -
|
| - // Functionality:
|
| - // Create a new UDT socket.
|
| - // Parameters:
|
| - // 0) [in] af: IP version, IPv4 (AF_INET) or IPv6 (AF_INET6).
|
| - // 1) [in] type: socket type, SOCK_STREAM or SOCK_DGRAM
|
| - // Returned value:
|
| - // The new UDT socket ID, or INVALID_SOCK.
|
| -
|
| - UDTSOCKET newSocket(const int& af, const int& type);
|
| -
|
| - // Functionality:
|
| - // Create a new UDT connection.
|
| - // Parameters:
|
| - // 0) [in] listen: the listening UDT socket;
|
| - // 1) [in] peer: peer address.
|
| - // 2) [in/out] hs: handshake information from peer side (in), negotiated value (out);
|
| - // Returned value:
|
| - // If the new connection is successfully created: 1 success, 0 already exist, -1 error.
|
| -
|
| - int newConnection(const UDTSOCKET listen, const sockaddr* peer, CHandShake* hs);
|
| -
|
| - // Functionality:
|
| - // look up the UDT entity according to its ID.
|
| - // Parameters:
|
| - // 0) [in] u: the UDT socket ID.
|
| - // Returned value:
|
| - // Pointer to the UDT entity.
|
| -
|
| - CUDT* lookup(const UDTSOCKET u);
|
| -
|
| - // Functionality:
|
| - // Check the status of the UDT socket.
|
| - // Parameters:
|
| - // 0) [in] u: the UDT socket ID.
|
| - // Returned value:
|
| - // UDT socket status, or NONEXIST if not found.
|
| -
|
| - UDTSTATUS getStatus(const UDTSOCKET u);
|
| -
|
| - // socket APIs
|
| -
|
| - int bind(const UDTSOCKET u, const sockaddr* name, const int& namelen);
|
| - int bind(const UDTSOCKET u, UDPSOCKET udpsock);
|
| - int listen(const UDTSOCKET u, const int& backlog);
|
| - UDTSOCKET accept(const UDTSOCKET listen, sockaddr* addr, int* addrlen);
|
| - int connect(const UDTSOCKET u, const sockaddr* name, const int& namelen);
|
| - int close(const UDTSOCKET u);
|
| - int getpeername(const UDTSOCKET u, sockaddr* name, int* namelen);
|
| - int getsockname(const UDTSOCKET u, sockaddr* name, int* namelen);
|
| - int select(ud_set* readfds, ud_set* writefds, ud_set* exceptfds, const timeval* timeout);
|
| - int selectEx(const std::vector<UDTSOCKET>& fds, std::vector<UDTSOCKET>* readfds, std::vector<UDTSOCKET>* writefds, std::vector<UDTSOCKET>* exceptfds, int64_t msTimeOut);
|
| - int epoll_create();
|
| - int epoll_add_usock(const int eid, const UDTSOCKET u, const int* events = NULL);
|
| - int epoll_add_ssock(const int eid, const SYSSOCKET s, const int* events = NULL);
|
| - int epoll_remove_usock(const int eid, const UDTSOCKET u, const int* events = NULL);
|
| - int epoll_remove_ssock(const int eid, const SYSSOCKET s, const int* events = NULL);
|
| - int epoll_wait(const int eid, std::set<UDTSOCKET>* readfds, std::set<UDTSOCKET>* writefds, int64_t msTimeOut, std::set<SYSSOCKET>* lrfds = NULL, std::set<SYSSOCKET>* lwfds = NULL);
|
| - int epoll_release(const int eid);
|
| -
|
| - // Functionality:
|
| - // record the UDT exception.
|
| - // Parameters:
|
| - // 0) [in] e: pointer to a UDT exception instance.
|
| - // Returned value:
|
| - // None.
|
| -
|
| - void setError(CUDTException* e);
|
| -
|
| - // Functionality:
|
| - // look up the most recent UDT exception.
|
| - // Parameters:
|
| - // None.
|
| - // Returned value:
|
| - // pointer to a UDT exception instance.
|
| -
|
| - CUDTException* getError();
|
| -
|
| -private:
|
| - std::map<UDTSOCKET, CUDTSocket*> m_Sockets; // stores all the socket structures
|
| -
|
| - pthread_mutex_t m_ControlLock; // used to synchronize UDT API
|
| -
|
| - pthread_mutex_t m_IDLock; // used to synchronize ID generation
|
| - UDTSOCKET m_SocketID; // seed to generate a new unique socket ID
|
| -
|
| - std::map<int64_t, std::set<UDTSOCKET> > m_PeerRec;// record sockets from peers to avoid repeated connection request, int64_t = (socker_id << 30) + isn
|
| -
|
| -private:
|
| - pthread_key_t m_TLSError; // thread local error record (last error)
|
| - #ifndef WIN32
|
| - static void TLSDestroy(void* e) {if (NULL != e) delete (CUDTException*)e;}
|
| - #else
|
| - std::map<DWORD, CUDTException*> m_mTLSRecord;
|
| - void checkTLSValue();
|
| - pthread_mutex_t m_TLSLock;
|
| - #endif
|
| -
|
| -private:
|
| - CUDTSocket* locate(const UDTSOCKET u);
|
| - CUDTSocket* locate(const sockaddr* peer, const UDTSOCKET& id, const int32_t& isn);
|
| - void updateMux(CUDTSocket* s, const sockaddr* addr = NULL, const UDPSOCKET* = NULL);
|
| - void updateMux(CUDTSocket* s, const CUDTSocket* ls);
|
| -
|
| -private:
|
| - std::map<int, CMultiplexer> m_mMultiplexer; // UDP multiplexer
|
| - pthread_mutex_t m_MultiplexerLock;
|
| -
|
| -private:
|
| - CCache* m_pCache; // UDT network information cache
|
| -
|
| -private:
|
| - volatile bool m_bClosing;
|
| - pthread_mutex_t m_GCStopLock;
|
| - pthread_cond_t m_GCStopCond;
|
| -
|
| - pthread_mutex_t m_InitLock;
|
| - int m_iInstanceCount; // number of startup() called by application
|
| - bool m_bGCStatus; // if the GC thread is working (true)
|
| -
|
| - pthread_t m_GCThread;
|
| - #ifndef WIN32
|
| - static void* garbageCollect(void*);
|
| - #else
|
| - static DWORD WINAPI garbageCollect(LPVOID);
|
| - #endif
|
| -
|
| - std::map<UDTSOCKET, CUDTSocket*> m_ClosedSockets; // temporarily store closed sockets
|
| -
|
| - void checkBrokenSockets();
|
| - void removeSocket(const UDTSOCKET u);
|
| -
|
| -private:
|
| - CEPoll m_EPoll; // handling epoll data structures and events
|
| -
|
| -private:
|
| - CUDTUnited(const CUDTUnited&);
|
| - CUDTUnited& operator=(const CUDTUnited&);
|
| -};
|
| -
|
| -#endif
|
|
|