diff options
Diffstat (limited to 'osnet/NativeSocketManager.hpp')
-rw-r--r-- | osnet/NativeSocketManager.hpp | 96 |
1 files changed, 23 insertions, 73 deletions
diff --git a/osnet/NativeSocketManager.hpp b/osnet/NativeSocketManager.hpp index 81d2e780..d6b014cb 100644 --- a/osnet/NativeSocketManager.hpp +++ b/osnet/NativeSocketManager.hpp @@ -25,8 +25,8 @@ * LLC. Start here: http://www.zerotier.com/ */ -#ifndef ZT_SOCKETMANAGER_HPP -#define ZT_SOCKETMANAGER_HPP +#ifndef ZT_NATIVESOCKETMANAGER_HPP +#define ZT_NATIVESOCKETMANAGER_HPP #include <stdio.h> #include <stdlib.h> @@ -34,14 +34,11 @@ #include <map> #include <stdexcept> -#include "Constants.hpp" - -#include "SharedPtr.hpp" -#include "InetAddress.hpp" -#include "Socket.hpp" -#include "Mutex.hpp" -#include "NonCopyable.hpp" -#include "Buffer.hpp" +#include "../node/Constants.hpp" +#include "../node/SharedPtr.hpp" +#include "../node/Mutex.hpp" +#include "../node/SocketManager.hpp" +#include "../node/Socket.hpp" #ifdef __WINDOWS__ #include <WinSock2.h> @@ -56,16 +53,19 @@ namespace ZeroTier { +class NativeSocket; +class NativeUdpSocket; +class NativeTcpSocket; + /** * Socket I/O multiplexer * * This wraps select(), epoll(), etc. and handles creation of Sockets. */ -class SocketManager : NonCopyable +class NativeSocketManager : public SocketManager { - friend class Socket; - friend class UdpSocket; - friend class TcpSocket; + friend class NativeUdpSocket; + friend class NativeTcpSocket; public: /** @@ -75,52 +75,18 @@ public: * @param arg Second argument to packetHandler() * @throws std::runtime_error Could not bind local port(s) or open socket(s) */ - SocketManager( + NativeSocketManager( int localUdpPort, int localTcpPort, void (*packetHandler)(const SharedPtr<Socket> &,void *,const InetAddress &,Buffer<ZT_SOCKET_MAX_MESSAGE_LEN> &), void *arg); - ~SocketManager(); - - /** - * Send a message to a remote peer - * - * @param to Destination address - * @param tcp Use TCP? - * @param autoConnectTcp If true, automatically initiate TCP connection if there is none - * @param msg Message to send - * @param msglen Length of message - */ - bool send(const InetAddress &to,bool tcp,bool autoConnectTcp,const void *msg,unsigned int msglen); - - /** - * Send a message to a remote peer via UDP (shortcut for setting both TCP params to false in send) - * - * @param to Destination address - * @param msg Message to send - * @param msglen Length of message - */ - inline bool sendUdp(const InetAddress &to,const void *msg,unsigned int msglen) { return send(to,false,false,msg,msglen); } + virtual ~NativeSocketManager(); - /** - * Perform I/O polling operation (e.g. select()) - * - * If called concurrently, one will block until the other completes. - * - * @param timeout Timeout in milliseconds, may return sooner if whack() is called - */ - void poll(unsigned long timeout); - - /** - * Cause current or next blocking poll() operation to timeout immediately - */ - void whack(); - - /** - * Close TCP sockets - */ - void closeTcpSockets(); + virtual bool send(const InetAddress &to,bool tcp,bool autoConnectTcp,const void *msg,unsigned int msglen); + virtual void poll(unsigned long timeout); + virtual void whack(); + virtual void closeTcpSockets(); private: // Called by socket implementations when a packet is received @@ -133,24 +99,11 @@ private: } // Used by TcpSocket to register/unregister for write availability notification - inline void startNotifyWrite(const Socket *sock) - throw() - { - _fdSetLock.lock(); - FD_SET(sock->_sock,&_writefds); - _fdSetLock.unlock(); - } - inline void stopNotifyWrite(const Socket *sock) - throw() - { - _fdSetLock.lock(); - FD_CLR(sock->_sock,&_writefds); - _fdSetLock.unlock(); - } + void _startNotifyWrite(const NativeSocket *sock); + void _stopNotifyWrite(const NativeSocket *sock); // Called in SocketManager destructor or in constructor cleanup before exception throwing - void _closeSockets() - throw(); + void _closeSockets(); // Called in SocketManager to recompute _nfds for select() based implementation void _updateNfds(); @@ -179,9 +132,6 @@ private: std::map< InetAddress,SharedPtr<Socket> > _tcpSockets; Mutex _tcpSockets_m; - void (*_packetHandler)(const SharedPtr<Socket> &,void *,const InetAddress &,Buffer<ZT_SOCKET_MAX_MESSAGE_LEN> &); - void *_arg; - Mutex _pollLock; }; |