X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=include%2Fsocketengine.h;h=c04ae6c70d9383d37822a0a62eef6433b98b69e7;hb=8e735c8f3ab15db211259d5d8436884ab33fea44;hp=95688117ebbeeb777176076768ba4087411d0986;hpb=297f19c005bc386a689dcd33b95e8b249920705b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/socketengine.h b/include/socketengine.h index 95688117e..c04ae6c70 100644 --- a/include/socketengine.h +++ b/include/socketengine.h @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * InspIRCd: (C) 2002-2008 InspIRCd Development Team * See: http://www.inspircd.org/wiki/index.php/Credits * * This program is free but copyrighted software; see @@ -38,6 +38,7 @@ enum EventType }; class InspIRCd; +class Module; /** This class is a basic I/O handler class. * Any object which wishes to receive basic I/O events @@ -68,7 +69,28 @@ class CoreExport EventHandler : public Extensible * other forms of IPC. */ int fd; + + /** Pointer to the module which has hooked the given EventHandler for IO events. + */ + Module *IOHook; public: + + /** Return the current hooker of IO events for this socket, or NULL. + * @return Hooker module, if set, or NULL. + */ + Module *GetIOHook(); + + /** Set a module as hooking IO events on this socket. + * @param IOHooker The module hooking IO + * @return True if the hook could be added, false otherwise. + */ + bool AddIOHook(Module *IOHooker); + + /** Remove IO hooking from a module + * @return True if hooking was successfully removed, false otherwise. + */ + bool DelIOHook(); + /** Get the current file descriptor * @return The file descriptor of this handler */ @@ -84,7 +106,7 @@ class CoreExport EventHandler : public Extensible /** Constructor */ - EventHandler() {} + EventHandler(); /** Destructor */ @@ -166,9 +188,22 @@ protected: int CurrentSetSize; /** Reference table, contains all current handlers */ - EventHandler* ref[MAX_DESCRIPTORS]; + EventHandler** ref; + + int MAX_DESCRIPTORS; + + size_t indata; + size_t outdata; + time_t lastempty; + + void UpdateStats(size_t len_in, size_t len_out); public: + double TotalEvents; + double ReadEvents; + double WriteEvents; + double ErrorEvents; + /** Constructor. * The constructor transparently initializes * the socket engine which the ircd is using. @@ -353,7 +388,7 @@ public: */ virtual int Shutdown(EventHandler* fd, int how); - /** Abstraction for BSD sockets shutdownt(2). + /** Abstraction for BSD sockets shutdown(2). * This function should emulate its namesake system call exactly. * @return This method should return exactly the same values as the system call it emulates. */ @@ -388,6 +423,10 @@ public: * the shell or operating system on fatal error. */ virtual void RecoverFromFork(); + + /** Get data transfer statistics, kilobits per second in and out and total. + */ + void GetStats(float &kbitpersec_in, float &kbitpersec_out, float &kbitpersec_total); }; #endif