X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Finspsocket.h;h=720489b7763dffa5e49d069752c496b5c87d94e4;hb=6c7a3ceb6c674a9af09da955ee0238e9291cf29a;hp=84716eae67ee0691b7597f0a3eb1775472b58ca3;hpb=3dc81ee1331d1b37ee85be9bf0d843e3b6827a2d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/inspsocket.h b/include/inspsocket.h index 84716eae6..720489b77 100644 --- a/include/inspsocket.h +++ b/include/inspsocket.h @@ -1,21 +1,32 @@ -/* +------------------------------------+ - * | Inspire Internet Relay Chat Daemon | - * +------------------------------------+ +/* + * InspIRCd -- Internet Relay Chat Daemon * - * InspIRCd: (C) 2002-2009 InspIRCd Development Team - * See: http://wiki.inspircd.org/Credits + * Copyright (C) 2009 Daniel De Graaf + * Copyright (C) 2007-2008 Robin Burchell + * Copyright (C) 2007 Dennis Friis + * Copyright (C) 2006-2007 Craig Edwards + * Copyright (C) 2006 Oliver Lupton * - * This program is free but copyrighted software; see - * the file COPYING for details. + * This file is part of InspIRCd. InspIRCd 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, version 2. * - * --------------------------------------------------- + * 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, see . */ -#ifndef __INSP_SOCKET_H__ -#define __INSP_SOCKET_H__ + +#pragma once #include "timer.h" +class IOHook; + /** * States which a socket may be in */ @@ -75,7 +86,6 @@ 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 @@ -84,7 +94,7 @@ class CoreExport SocketTimeout : public Timer /** Handle tick event */ - virtual void Tick(time_t now); + virtual bool Tick(time_t now); }; /** @@ -93,8 +103,9 @@ class CoreExport SocketTimeout : public Timer */ class CoreExport StreamSocket : public EventHandler { - /** Module that handles raw I/O for this socket, or NULL */ - Module *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; @@ -105,10 +116,10 @@ class CoreExport StreamSocket : public EventHandler protected: std::string recvq; public: - StreamSocket() : IOHook(NULL), sendq_len(0) {} - inline Module* GetIOHook() { return IOHook; } - inline void AddIOHook(Module* m) { IOHook = m; } - inline void DelIOHook() { IOHook = NULL; } + 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 */ @@ -139,14 +150,14 @@ 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 */ virtual void Close(); /** This ensures that close is called prior to destructor */ - virtual bool cull(); + virtual CullResult cull(); }; /** * BufferedSocket is an extendable socket class which modules @@ -185,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); @@ -219,4 +231,6 @@ class CoreExport BufferedSocket : public StreamSocket BufferedSocketError BeginConnect(const std::string &ipaddr, int aport, unsigned long maxtime, const std::string &connectbindip); }; -#endif +inline IOHook* StreamSocket::GetIOHook() const { return iohook; } +inline void StreamSocket::AddIOHook(IOHook* hook) { iohook = hook; } +inline void StreamSocket::DelIOHook() { iohook = NULL; }