]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/socketengine.h
Update make help, configure, and fix build of empty m_* directories
[user/henk/code/inspircd.git] / include / socketengine.h
index 6f5d4131ba06e8c814b08bde67e70ea32a0209a7..a191ff12d7c00fd6db2b317037feab1b157c5ac7 100644 (file)
@@ -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.
@@ -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
         */
@@ -152,7 +174,7 @@ class CoreExport EventHandler : public Extensible
  * have to be aware of which SocketEngine derived
  * class they are using.
  */
-class CoreExport SocketEngine : public Extensible
+class CoreExport SocketEngine
 {
 protected:
        /** Owner/Creator
@@ -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.
@@ -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