ucommon
|
00001 // Copyright (C) 1999-2005 Open Source Telecom Corporation. 00002 // Copyright (C) 2006-2014 David Sugar, Tycho Softworks. 00003 // 00004 // This program is free software; you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation; either version 2 of the License, or 00007 // (at your option) any later version. 00008 // 00009 // This program is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU Lesser General Public License 00015 // along with this program. If not, see <http://www.gnu.org/licenses/>. 00016 // 00017 // As a special exception, you may use this file as part of a free software 00018 // library without restriction. Specifically, if other files instantiate 00019 // templates or use macros or inline functions from this file, or you compile 00020 // this file and link it with other files to produce an executable, this 00021 // file does not by itself cause the resulting executable to be covered by 00022 // the GNU General Public License. This exception does not however 00023 // invalidate any other reasons why the executable file might be covered by 00024 // the GNU General Public License. 00025 // 00026 // This exception applies only to the code released under the name GNU 00027 // Common C++. If you copy code from other releases into a copy of GNU 00028 // Common C++, as the General Public License permits, the exception does 00029 // not apply to the code that you add in this way. To avoid misleading 00030 // anyone as to the status of such modified files, you must delete 00031 // this exception notice from them. 00032 // 00033 // If you write modifications of your own for GNU Common C++, it is your choice 00034 // whether to permit this exception to apply to your modifications. 00035 // If you do not wish that, delete this exception notice. 00036 // 00037 00043 #ifndef COMMONCPP_DCCP_H_ 00044 #define COMMONCPP_DCCP_H_ 00045 00046 #include <cstdio> 00047 00048 #ifndef COMMONCPP_CONFIG_H_ 00049 #include <commoncpp/config.h> 00050 #endif 00051 00052 #ifndef COMMONCPP_STRING_H_ 00053 #include <commoncpp/string.h> 00054 #endif 00055 00056 #ifndef COMMONCPP_ADDRESS_H_ 00057 #include <commoncpp/address.h> 00058 #endif 00059 00060 #ifndef COMMONCPP_SOCKET_H_ 00061 #include <commoncpp/socket.h> 00062 #endif 00063 00064 namespace ost { 00065 00092 class __EXPORT DCCPSocket : public Socket 00093 { 00094 union { 00095 struct sockaddr_in ipv4; 00096 #ifdef CCXX_IPV6 00097 struct sockaddr_in6 ipv6; 00098 #endif 00099 } peer; 00100 00101 Family family; 00102 00103 public: 00115 virtual bool onAccept(const IPV4Host &ia, tpport_t port); 00116 #ifdef CCXX_IPV6 00117 virtual bool onAccept(const IPV6Host &ia, tpport_t port); 00118 #endif 00119 00120 virtual IPV4Host getIPV4Sender(tpport_t *port = NULL) const; 00121 00122 #ifdef CCXX_IPV6 00123 virtual IPV6Host getIPV6Sender(tpport_t *port = NULL) const; 00124 #endif 00125 00137 DCCPSocket(const IPV4Address &bind, tpport_t port, unsigned backlog = 5); 00138 #ifdef CCXX_IPV6 00139 DCCPSocket(const IPV6Address &bind, tpport_t port, unsigned backlog = 5); 00140 #endif 00141 00151 DCCPSocket(const char *name, Family family = IPV4, unsigned backlog = 5); 00152 00156 DCCPSocket(Family family = IPV4); 00157 00161 DCCPSocket(DCCPSocket& server, timeout_t timeout = 0); 00162 00166 void reject(void); 00167 00171 void disconnect(void); 00172 00176 bool setCCID(uint8_t ccid); 00177 00181 int getTxCCID(); 00182 00186 int getRxCCID(); 00187 00191 size_t available(); 00192 00200 void connect(const IPV4Host &host, tpport_t port, timeout_t timeout = 0); 00201 #ifdef CCXX_IPV6 00202 void connect(const IPV6Host &host, tpport_t port, timeout_t timeout = 0); 00203 #endif 00204 00208 void connect(const char *name); 00209 00215 inline bool isPendingConnection(timeout_t timeout = TIMEOUT_INF) /* not const -- jfc */ 00216 {return Socket::isPending(Socket::pendingInput, timeout);} 00217 00221 virtual ~DCCPSocket(); 00222 }; 00223 00224 } // namespace ost 00225 00226 #endif