X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Finspsocket.h;h=1bcfbea096d7c5ec079f3eac221ca1be29c72ca7;hb=b9006ce3cba742ca2a22d601ba1a63a47b0402c9;hp=f00d6a96ae744c2463d10f684414b7895d3c6de9;hpb=553a8da754c8cd308bad2008018849714e70f9b7;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/inspsocket.h b/include/inspsocket.h index f00d6a96a..1bcfbea09 100644 --- a/include/inspsocket.h +++ b/include/inspsocket.h @@ -21,11 +21,12 @@ */ -#ifndef INSPSOCKET_H -#define INSPSOCKET_H +#pragma once #include "timer.h" +class IOHook; + /** * States which a socket may be in */ @@ -85,16 +86,15 @@ class CoreExport SocketTimeout : public Timer public: /** Create a socket timeout class * @param fd File descriptor of BufferedSocket - * @pram Instance server instance to attach to * @param thesock BufferedSocket to attach to * @param secs_from_now Seconds from now to time out * @param now The current time */ - SocketTimeout(int fd, BufferedSocket* thesock, long secs_from_now, time_t now) : Timer(secs_from_now, now), sock(thesock), sfd(fd) { } + SocketTimeout(int fd, BufferedSocket* thesock, long secs_from_now) : Timer(secs_from_now), sock(thesock), sfd(fd) { } /** Handle tick event */ - virtual void Tick(time_t now); + virtual bool Tick(time_t now); }; /** @@ -103,8 +103,9 @@ class CoreExport SocketTimeout : public Timer */ class CoreExport StreamSocket : public EventHandler { - /** Module that handles raw I/O for this socket, or NULL */ - reference IOHook; + /** The IOHook that handles raw I/O for this socket, or NULL */ + IOHook* iohook; + /** Private send queue. Note that individual strings may be shared */ std::deque sendq; @@ -115,10 +116,10 @@ class CoreExport StreamSocket : public EventHandler protected: std::string recvq; public: - StreamSocket() : sendq_len(0) {} - inline Module* GetIOHook(); - inline void AddIOHook(Module* m); - inline void DelIOHook(); + StreamSocket() : iohook(NULL), sendq_len(0) {} + IOHook* GetIOHook() const; + void AddIOHook(IOHook* hook); + void DelIOHook(); /** Handle event from socket engine. * This will call OnDataReady if there is *new* data in recvq */ @@ -149,7 +150,7 @@ class CoreExport StreamSocket : public EventHandler */ bool GetNextLine(std::string& line, char delim = '\n'); /** Useful for implementing sendq exceeded */ - inline const size_t getSendQSize() const { return sendq_len; } + inline size_t getSendQSize() const { return sendq_len; } /** * Close the socket, remove from socket engine, etc @@ -195,9 +196,10 @@ class CoreExport BufferedSocket : public StreamSocket * This will create a socket, register with socket engine, and start the asynchronous * connection process. If an error is detected at this point (such as out of file descriptors), * OnError will be called; otherwise, the state will become CONNECTING. - * @param dest Address to connect to - * @param bind Address to bind to (if NULL, no bind will be done) - * @param timeout Time to wait for connection + * @param ipaddr Address to connect to + * @param aport Port to connect on + * @param maxtime Time to wait for connection + * @param connectbindip Address to bind to (if NULL, no bind will be done) */ void DoConnect(const std::string &ipaddr, int aport, unsigned long maxtime, const std::string &connectbindip); @@ -229,9 +231,6 @@ class CoreExport BufferedSocket : public StreamSocket BufferedSocketError BeginConnect(const std::string &ipaddr, int aport, unsigned long maxtime, const std::string &connectbindip); }; -#include "modules.h" - -inline Module* StreamSocket::GetIOHook() { return IOHook; } -inline void StreamSocket::AddIOHook(Module* m) { IOHook = m; } -inline void StreamSocket::DelIOHook() { IOHook = NULL; } -#endif +inline IOHook* StreamSocket::GetIOHook() const { return iohook; } +inline void StreamSocket::AddIOHook(IOHook* hook) { iohook = hook; } +inline void StreamSocket::DelIOHook() { iohook = NULL; }