X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=include%2Finspsocket.h;h=32f2dab1a7d9861d7080be243aaa2bb2ccb81737;hb=5d67a5fff127bf95bca69b436ef7f645f2fe3281;hp=f61bf133dc15de957cfe63bd7fa04802a21c5c65;hpb=531fb6fed282b6d32d94d1e99ffdd1599dde2713;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/inspsocket.h b/include/inspsocket.h index f61bf133d..32f2dab1a 100644 --- a/include/inspsocket.h +++ b/include/inspsocket.h @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -56,11 +56,6 @@ enum BufferedSocketError class BufferedSocket; class InspIRCd; -using irc::sockets::insp_sockaddr; -using irc::sockets::insp_inaddr; -using irc::sockets::insp_ntoa; -using irc::sockets::insp_aton; - /** Used to time out socket connections */ class CoreExport SocketTimeout : public Timer @@ -69,12 +64,15 @@ class CoreExport SocketTimeout : public Timer /** BufferedSocket the class is attached to */ BufferedSocket* sock; + /** Server instance creating the timeout class */ InspIRCd* ServerInstance; + /** File descriptor of class this is attached to */ int sfd; + public: /** Create a socket timeout class * @param fd File descriptor of BufferedSocket @@ -84,6 +82,7 @@ class CoreExport SocketTimeout : public Timer * @param now The current time */ SocketTimeout(int fd, InspIRCd* Instance, BufferedSocket* thesock, long secs_from_now, time_t now) : Timer(secs_from_now, now), sock(thesock), ServerInstance(Instance), sfd(fd) { }; + /** Handle tick event */ virtual void Tick(time_t now); @@ -94,11 +93,9 @@ class CoreExport SocketTimeout : public Timer * can use for TCP socket support. It is fully integrated * into InspIRCds socket loop and attaches its sockets to * the core's instance of the SocketEngine class, meaning - * that any sockets you create have the same power and - * abilities as a socket created by the core itself. - * To use BufferedSocket, you must inherit a class from it, - * and use the BufferedSocket constructors to establish connections - * and bindings. + * that all use is fully asynchronous. + * + * To use BufferedSocket, you must inherit a class from it. */ class CoreExport BufferedSocket : public EventHandler { @@ -110,16 +107,12 @@ class CoreExport BufferedSocket : public EventHandler /** Instance we were created by */ - InspIRCd* Instance; + InspIRCd* ServerInstance; /** Timeout class or NULL */ SocketTimeout* Timeout; - /** Timeout length - */ - unsigned long timeout_val; - /** Socket output buffer (binary safe) */ std::deque outbuffer; @@ -139,12 +132,6 @@ class CoreExport BufferedSocket : public EventHandler */ BufferedSocketState state; - /** - * This value is true if the - * socket has timed out. - */ - bool timeout; - /** * The IP address being connected * to stored in string form for @@ -159,6 +146,7 @@ class CoreExport BufferedSocket : public EventHandler socklen_t length; /** Flushes the write buffer + * @returns true if the writing failed, false if it was successful */ bool FlushWriteBuffer(); @@ -168,7 +156,7 @@ class CoreExport BufferedSocket : public EventHandler * more information without application-level queueing * which was required in older software. */ - void SetQueues(int nfd); + void SetQueues(); /** When the socket has been marked as closing, this flag * will be set to true, then the next time the socket is @@ -176,12 +164,6 @@ class CoreExport BufferedSocket : public EventHandler */ bool ClosePending; - /** Set to true when we're waiting for a write event. - * If this is true and a write event comes in, we - * call the write instead of the read method. - */ - bool WaitingForWriteEvent; - /** * Bind to an address * @param ip IP to bind to @@ -189,6 +171,10 @@ class CoreExport BufferedSocket : public EventHandler */ bool BindAddr(const std::string &ip); + /** (really) Try bind to a given IP setup. For internal use only. + */ + bool DoBindMagic(const std::string ¤t_ip); + /** * The default constructor does nothing * and should not be used. @@ -254,15 +240,25 @@ class CoreExport BufferedSocket : public EventHandler virtual bool OnDataReady(); /** - * When it is ok to write to the socket, and a + * When it is ok to write to the socket, and a * write event was requested, this method is - * triggered. Within this method you should call + * triggered. + * + * Within this method you should call * write() or send() etc, to send data to the - * other end of the socket. Further write events - * will not be triggered unless you call WantWrite(). + * other end of the socket. + * + * Further write events will not be triggered + * unless you call SocketEngine::WantWrite(). + * + * The default behaviour of this method is to + * flush the write buffer, respecting the IO + * hooking modules. + * + * XXX: this used to be virtual, ask us if you need it to be so. * @return false to close the socket */ - virtual bool OnWriteReady(); + bool OnWriteReady(); /** * When an outbound connection fails, and the @@ -313,27 +309,14 @@ class CoreExport BufferedSocket : public EventHandler */ void SetState(BufferedSocketState s); - /** - * Call this to receive the next write event - * that comes along for this fd to the OnWriteReady - * method. - */ - void WantWrite(); - /** * Returns the current socket state. */ BufferedSocketState GetState(); - /** - * Only the core should call this function. - * When called, it is assumed the socket is ready - * to read data, and the method call routes the - * event to the various methods of BufferedSocket - * for you to handle. This can also cause the - * socket's state to change. + /** Mark a socket as being connected and call appropriate events. */ - bool Poll(); + bool InternalMarkConnected(); /** * This method causes the socket to close, and may @@ -352,8 +335,9 @@ class CoreExport BufferedSocket : public EventHandler /** * This method attempts to connect to a hostname. * This method is asyncronous. + * @param maxtime Number of seconds to wait, if connecting, before the connection times out and an OnTimeout() event is generated */ - virtual bool DoConnect(); + virtual bool DoConnect(unsigned long maxtime); /** Handle event from EventHandler parent class */ @@ -365,4 +349,3 @@ class CoreExport BufferedSocket : public EventHandler }; #endif -