aboutsummaryrefslogtreecommitdiff
path: root/dep/include/sockets/Socket.h
diff options
context:
space:
mode:
Diffstat (limited to 'dep/include/sockets/Socket.h')
-rw-r--r--dep/include/sockets/Socket.h95
1 files changed, 0 insertions, 95 deletions
diff --git a/dep/include/sockets/Socket.h b/dep/include/sockets/Socket.h
index 8a7fdc9d2fd..cb1c2fb3c29 100644
--- a/dep/include/sockets/Socket.h
+++ b/dep/include/sockets/Socket.h
@@ -4,25 +4,20 @@
**/
/*
Copyright (C) 2004-2007 Anders Hedstrom
-
This software is made available under the terms of the GNU GPL.
-
If you would like to use this library in a closed-source application,
a separate license agreement is available. For information about
the closed-source license agreement for the C++ sockets library,
please visit http://www.alhem.net/Sockets/license.html and/or
email license@alhem.net.
-
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
-
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
@@ -30,30 +25,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef _SOCKETS_Socket_H
#define _SOCKETS_Socket_H
#include "sockets-config.h"
-
#include <string>
#include <vector>
#include <list>
#ifdef HAVE_OPENSSL
#include <openssl/ssl.h>
#endif
-
#include "socket_include.h"
#include <time.h>
#include "SocketAddress.h"
#include "Thread.h"
-
#ifdef SOCKETS_NAMESPACE
namespace SOCKETS_NAMESPACE {
#endif
-
class ISocketHandler;
class SocketAddress;
class IFile;
-
/** \defgroup basic Basic sockets */
/** Socket base class.
\ingroup basic */
@@ -68,9 +58,7 @@ class Socket
public:
SocketThread(Socket *p);
~SocketThread();
-
void Run();
-
private:
Socket *GetSocket() const { return m_socket; }
SocketThread(const SocketThread& s) : m_socket(s.GetSocket()) {}
@@ -78,7 +66,6 @@ class Socket
Socket *m_socket;
};
#endif // ENABLE_DETACH
-
#ifdef ENABLE_TRIGGERS
public:
/** Data pass class from source to destination. */
@@ -87,15 +74,12 @@ public:
public:
TriggerData() : m_src(NULL) {}
virtual ~TriggerData() {}
-
Socket *GetSource() const { return m_src; }
void SetSource(Socket *x) { m_src = x; }
-
private:
Socket *m_src;
};
#endif // ENABLE_TRIGGERS
-
/** Socket mode flags. */
/*
enum {
@@ -104,20 +88,17 @@ public:
SOCK_CLOSE = 0x02, ///< Close and delete flag
SOCK_DISABLE_READ = 0x04, ///< Disable checking for read events
SOCK_CONNECTED = 0x08, ///< Socket is connected (tcp/udp)
-
SOCK_ERASED_BY_HANDLER = 0x10, ///< Set by handler before delete
// HAVE_OPENSSL
SOCK_ENABLE_SSL = 0x20, ///< Enable SSL for this TcpSocket
SOCK_SSL = 0x40, ///< ssl negotiation mode (TcpSocket)
SOCK_SSL_SERVER = 0x80, ///< True if this is an incoming ssl TcpSocket connection
-
// ENABLE_IPV6
SOCK_IPV6 = 0x0100, ///< This is an ipv6 socket if this one is true
// ENABLE_POOL
SOCK_CLIENT = 0x0200, ///< only client connections are pooled
SOCK_RETAIN = 0x0400, ///< keep connection on close
SOCK_LOST = 0x0800, ///< connection lost
-
// ENABLE_SOCKS4
SOCK_SOCKS4 = 0x1000, ///< socks4 negotiation mode (TcpSocket)
// ENABLE_DETACH
@@ -125,38 +106,30 @@ public:
SOCK_DETACHED = 0x4000, ///< Socket has been detached
// StreamSocket
STREAMSOCK_CONNECTING = 0x8000, ///< Flag indicating connection in progress
-
STREAMSOCK_FLUSH_BEFORE_CLOSE = 0x010000L, ///< Send all data before closing (default true)
STREAMSOCK_CALL_ON_CONNECT = 0x020000L, ///< OnConnect will be called next ISocketHandler cycle if true
STREAMSOCK_RETRY_CONNECT = 0x040000L, ///< Try another connection attempt next ISocketHandler cycle
STREAMSOCK_LINE_PROTOCOL = 0x080000L, ///< Line protocol mode flag
-
};
*/
-
public:
/** "Default" constructor */
Socket(ISocketHandler&);
-
virtual ~Socket();
-
/** Socket class instantiation method. Used when a "non-standard" constructor
* needs to be used for the socket class. Note: the socket class still needs
* the "default" constructor with one ISocketHandler& as input parameter.
*/
virtual Socket *Create() { return NULL; }
-
/** Returns reference to sockethandler that owns the socket.
If the socket is detached, this is a reference to the slave sockethandler.
*/
ISocketHandler& Handler() const;
-
/** Returns reference to sockethandler that owns the socket.
This one always returns the reference to the original sockethandler,
even if the socket is detached.
*/
ISocketHandler& MasterHandler() const;
-
/** Called by ListenSocket after accept but before socket is added to handler.
* CTcpSocket uses this to create its ICrypt member variable.
* The ICrypt member variable is created by a virtual method, therefore
@@ -165,83 +138,59 @@ public:
* or ssl (port 443).
*/
virtual void Init();
-
/** Create a socket file descriptor.
\param af Address family AF_INET / AF_INET6 / ...
\param type SOCK_STREAM / SOCK_DGRAM / ...
\param protocol "tcp" / "udp" / ... */
SOCKET CreateSocket(int af,int type,const std::string& protocol = "");
-
/** Assign this socket a file descriptor created
by a call to socket() or otherwise. */
void Attach(SOCKET s);
-
/** Return file descriptor assigned to this socket. */
SOCKET GetSocket();
-
/** Close connection immediately - internal use.
\sa SetCloseAndDelete */
virtual int Close();
-
/** Add file descriptor to sockethandler fd_set's. */
void Set(bool bRead,bool bWrite,bool bException = true);
-
/** Returns true when socket file descriptor is valid
and socket is not about to be closed. */
virtual bool Ready();
-
/** Returns pointer to ListenSocket that created this instance
* on an incoming connection. */
Socket *GetParent();
-
/** Used by ListenSocket to set parent pointer of newly created
* socket instance. */
void SetParent(Socket *);
-
/** Get listening port from ListenSocket<>. */
virtual port_t GetPort();
-
/** Set socket non-block operation. */
bool SetNonblocking(bool);
-
/** Set socket non-block operation. */
bool SetNonblocking(bool, SOCKET);
-
/** Total lifetime of instance. */
time_t Uptime();
-
/** Set address/port of last connect() call. */
void SetClientRemoteAddress(SocketAddress&);
-
/** Get address/port of last connect() call. */
std::auto_ptr<SocketAddress> GetClientRemoteAddress();
-
/** Common interface for SendBuf used by Tcp and Udp sockets. */
virtual void SendBuf(const char *,size_t,int = 0);
-
/** Common interface for Send used by Tcp and Udp sockets. */
virtual void Send(const std::string&,int = 0);
-
/** Outgoing traffic counter. */
virtual uint64_t GetBytesSent(bool clear = false);
-
/** Incoming traffic counter. */
virtual uint64_t GetBytesReceived(bool clear = false);
-
// LIST_TIMEOUT
-
/** Enable timeout control. 0=disable timeout check. */
void SetTimeout(time_t secs);
-
/** Check timeout. \return true if time limit reached */
bool Timeout(time_t tnow);
-
/** Used by ListenSocket. ipv4 and ipv6 */
void SetRemoteAddress(SocketAddress&);
-
/** \name Event callbacks */
//@{
-
/** Called when there is something to be read from the file descriptor. */
virtual void OnRead();
/** Called when there is room for another write on the file descriptor. */
@@ -279,7 +228,6 @@ public:
/** Connection timeout. */
virtual void OnConnectTimeout();
//@}
-
/** \name Socket mode flags, set/reset */
//@{
/** Set delete by handler true when you want the sockethandler to
@@ -288,43 +236,34 @@ public:
/** Check delete by handler flag.
\return true if this instance should be deleted by the sockethandler */
bool DeleteByHandler();
-
// LIST_CLOSE - conditional event queue
-
/** Set close and delete to terminate the connection. */
void SetCloseAndDelete(bool = true);
/** Check close and delete flag.
\return true if this socket should be closed and the instance removed */
bool CloseAndDelete();
-
/** Return number of seconds since socket was ordered to close. \sa SetCloseAndDelete */
time_t TimeSinceClose();
-
/** Ignore read events for an output only socket. */
void DisableRead(bool x = true);
/** Check ignore read events flag.
\return true if read events should be ignored */
bool IsDisableRead();
-
/** Set connected status. */
void SetConnected(bool = true);
/** Check connected status.
\return true if connected */
bool IsConnected();
-
/** Connection lost - error while reading/writing from a socket - TcpSocket only. */
void SetLost();
/** Check connection lost status flag, used by TcpSocket only.
\return true if there was an error while r/w causing the socket to close */
bool Lost();
-
/** Set flag indicating the socket is being actively deleted by the sockethandler. */
void SetErasedByHandler(bool x = true);
/** Get value of flag indicating socket is deleted by sockethandler. */
bool ErasedByHandler();
-
//@}
-
/** \name Information about remote connection */
//@{
/** Returns address of remote end. */
@@ -344,7 +283,6 @@ public:
/** ipv4 and ipv6(not implemented) */
std::string GetRemoteHostname();
//@}
-
/** Returns local port number for bound socket file descriptor. */
port_t GetSockPort();
/** Returns local ipv4 address for bound socket file descriptor. */
@@ -366,10 +304,8 @@ public:
checked with an #ifdef below.
This might cause a compile error on other operating systems. */
// --------------------------------------------------------------------------
-
// IP options
//@{
-
bool SetIpOptions(const void *p, socklen_t len);
bool SetIpTOS(unsigned char tos);
unsigned char IpTOS();
@@ -381,7 +317,6 @@ public:
bool SetMulticastLoop(bool x = true);
bool IpAddMembership(struct ip_mreq&);
bool IpDropMembership(struct ip_mreq&);
-
#ifdef IP_PKTINFO
bool SetIpPktinfo(bool x = true);
#endif
@@ -416,11 +351,9 @@ public:
bool IpDropMembership(struct ip_mreqn&);
#endif
//@}
-
// SOCKET options
/** @name Socket Options */
//@{
-
bool SoAcceptconn();
bool SetSoBroadcast(bool x = true);
bool SetSoDebug(bool x = true);
@@ -439,7 +372,6 @@ public:
int SoType();
bool SetSoReuseaddr(bool x = true);
bool SetSoKeepalive(bool x = true);
-
#ifdef SO_BSDCOMPAT
bool SetSoBsdcompat(bool x = true);
#endif
@@ -468,10 +400,8 @@ public:
bool SetSoNosigpipe(bool x = true);
#endif
//@}
-
// TCP options in TcpSocket.h/TcpSocket.cpp
-
#ifdef HAVE_OPENSSL
/** @name SSL Support */
//@{
@@ -506,7 +436,6 @@ public:
virtual SSL *GetSsl() { return NULL; }
//@}
#endif // HAVE_OPENSSL
-
#ifdef ENABLE_IPV6
/** Enable ipv6 for this socket. */
void SetIpv6(bool x = true);
@@ -514,7 +443,6 @@ public:
\return true if this is an ipv6 socket */
bool IsIpv6();
#endif
-
#ifdef ENABLE_POOL
/** @name Connection Pool */
//@{
@@ -542,7 +470,6 @@ public:
void CopyConnection(Socket *sock);
//@}
#endif // ENABLE_POOL
-
#ifdef ENABLE_SOCKS4
/** \name Socks4 support */
//@{
@@ -558,7 +485,6 @@ public:
bool Socks4();
/** Set flag indicating Socks4 handshaking in progress */
void SetSocks4(bool x = true);
-
/** Set socks4 server host address to use */
void SetSocks4Host(ipaddr_t a);
/** Set socks4 server hostname to use. */
@@ -578,7 +504,6 @@ public:
const std::string& GetSocks4Userid();
//@}
#endif // ENABLE_SOCKS4
-
#ifdef ENABLE_RESOLVER
/** \name Asynchronous Resolver */
//@{
@@ -613,7 +538,6 @@ public:
virtual void OnResolveFailed(int id);
//@}
#endif // ENABLE_RESOLVER
-
#ifdef ENABLE_DETACH
/** \name Thread Support */
//@{
@@ -621,15 +545,12 @@ public:
socket is ready for operation again.
\sa ResolvSocket */
virtual void OnDetached();
-
// LIST_DETACH
-
/** Internal use. */
void SetDetach(bool x = true);
/** Check detach flag.
\return true if the socket should detach to its own thread */
bool IsDetach();
-
/** Internal use. */
void SetDetached(bool x = true);
/** Check detached flag.
@@ -644,10 +565,8 @@ public:
void DetachSocket();
//@}
#endif // ENABLE_DETACH
-
/** Write traffic to an IFile. Socket will not delete this object. */
void SetTrafficMonitor(IFile *p) { m_traffic_monitor = p; }
-
#ifdef ENABLE_TRIGGERS
/** \name Triggers */
//@{
@@ -661,21 +580,16 @@ public:
virtual void OnCancelled(int id);
//@}
#endif
-
protected:
/** default constructor not available */
Socket() : m_handler(m_handler) {}
/** copy constructor not available */
Socket(const Socket& s) : m_handler(s.m_handler) {}
-
/** assignment operator not available. */
Socket& operator=(const Socket& ) { return *this; }
-
/** All traffic will be written to this IFile, if set. */
IFile *GetTrafficMonitor() { return m_traffic_monitor; }
-
// unsigned long m_flags; ///< boolean flags, replacing old 'bool' members
-
private:
ISocketHandler& m_handler; ///< Reference of ISocketHandler in control of this socket
SOCKET m_socket; ///< File descriptor
@@ -693,35 +607,29 @@ private:
time_t m_timeout_start; ///< Set by SetTimeout
time_t m_timeout_limit; ///< Defined by SetTimeout
bool m_bLost; ///< connection lost
-
#ifdef _WIN32
static WSAInitializer m_winsock_init; ///< Winsock initialization singleton class
#endif
-
#ifdef HAVE_OPENSSL
bool m_b_enable_ssl; ///< Enable SSL for this TcpSocket
bool m_b_ssl; ///< ssl negotiation mode (TcpSocket)
bool m_b_ssl_server; ///< True if this is an incoming ssl TcpSocket connection
#endif
-
#ifdef ENABLE_IPV6
bool m_ipv6; ///< This is an ipv6 socket if this one is true
#endif
-
#ifdef ENABLE_POOL
int m_socket_type; ///< Type of socket, from socket() call
std::string m_socket_protocol; ///< Protocol, from socket() call
bool m_bClient; ///< only client connections are pooled
bool m_bRetain; ///< keep connection on close
#endif
-
#ifdef ENABLE_SOCKS4
bool m_bSocks4; ///< socks4 negotiation mode (TcpSocket)
ipaddr_t m_socks4_host; ///< socks4 server address
port_t m_socks4_port; ///< socks4 server port number
std::string m_socks4_userid; ///< socks4 server usedid
#endif
-
#ifdef ENABLE_DETACH
bool m_detach; ///< Socket ordered to detach flag
bool m_detached; ///< Socket has been detached
@@ -729,12 +637,9 @@ static WSAInitializer m_winsock_init; ///< Winsock initialization singleton cla
ISocketHandler *m_slave_handler; ///< Actual sockethandler while detached
#endif
};
-
#ifdef SOCKETS_NAMESPACE
}
#endif
-
#endif // _SOCKETS_Socket_H
-