]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/inspircd.h
Fix m_testcommand which tries to use an undefined pointer as ServerInstance
[user/henk/code/inspircd.git] / include / inspircd.h
index 64489aaf6a84f0a29af555fc7c4af233a089e6fd..1e51043226a014f4bccb208a166afca9cdec1be5 100644 (file)
@@ -2,14 +2,11 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
- *                    E-mail:
- *             <brain@chatspike.net>
- *               <Craig@chatspike.net>
- *     
- * Written by Craig Edwards, Craig McLure, and others.
+ *  InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ * See: http://www.inspircd.org/wiki/index.php/Credits
+ *
  * This program is free but copyrighted software; see
- *         the file COPYING for details.
+ *            the file COPYING for details.
  *
  * ---------------------------------------------------
  */
 #include "command_parse.h"
 #include "snomasks.h"
 
-/** Returned by some functions to indicate failure,
- * and the exit code of the program if it terminates.
+/** Returned by some functions to indicate failure.
  */
 #define ERROR -1
 
-/** Crucial defines
+/** Support for librodent -
+ * see http://www.chatspike.net/index.php?z=64
  */
-#define ETIREDGERBILS EAGAIN
+#define ETIREDHAMSTERS EAGAIN
 
 /** Debug levels for use with InspIRCd::Log()
  */
@@ -74,6 +71,32 @@ template<typename T> inline std::string ConvToStr(const T &in)
        return tmp.str();
 }
 
+template<typename T> inline long ConvToInt(const T &in)
+{
+       std::stringstream tmp;
+       if (!(tmp << in)) return 0;
+       return atoi(tmp.str().c_str());
+}
+
+/** Template function to convert integer to char, storing result in *res and
+ * also returning the pointer to res. Based on Stuart Lowe's C/C++ Pages.
+ */
+template<typename T, typename V, typename R> inline char* itoa(const T &in, V *res, R base)
+{
+       if (base < 2 || base > 16) { *res = 0; return res; }
+       char* out = res;
+       int quotient = in;
+       while (quotient) {
+               *out = "0123456789abcdef"[ std::abs( quotient % base ) ];
+               ++out;
+               quotient /= base;
+       }
+       if ( in < 0 && base == 10) *out++ = '-';
+       std::reverse( res, out );
+       *out = 0;
+       return res;
+}
+
 /** This class contains various STATS counters
  * It is used by the InspIRCd class, which internally
  * has an instance of it.
@@ -119,6 +142,14 @@ class serverstats : public classbase
         */
        unsigned long BoundPortCount;
 
+       /** Cpu usage at last sample
+        */
+       timeval LastCPU;
+
+       /** Time last sample was read
+        */
+       timeval LastSampled;
+
        /** The constructor initializes all the counts to zero
         */
        serverstats()
@@ -355,6 +386,12 @@ class InspIRCd : public classbase
        int time_delta;
 
  public:
+
+       /** Number of unregistered users online right now.
+        * (Unregistered means before USER/NICK/dns)
+        */
+       int unregistered_count;
+
         /** List of server names we've seen.
         */
        servernamelist servernames;
@@ -390,11 +427,11 @@ class InspIRCd : public classbase
 
        /** Client list, a hash_map containing all clients, local and remote
         */
-       user_hash clientlist;
+       user_hash* clientlist;
 
        /** Channel list, a hash_map containing all channels
         */
-       chan_hash chanlist;
+       chan_hash* chanlist;
 
        /** Local client list, a vector containing only local clients
         */
@@ -464,6 +501,10 @@ class InspIRCd : public classbase
 
        void AddGlobalClone(userrec* user);
 
+       /** Number of users with a certain mode set on them
+        */
+       int ModeCount(const char mode);
+
        /** Get the time offset in seconds
         * @return The current time delta (in seconds)
         */
@@ -593,6 +634,8 @@ class InspIRCd : public classbase
         */
        void OpenLog(char** argv, int argc);
 
+       void CloseLog();
+
        /** Convert a user to a pseudoclient, disconnecting the real user
         * @param user The user to convert
         * @param message The quit message to display when exiting the user
@@ -643,6 +686,7 @@ class InspIRCd : public classbase
 
        /** Causes the server to exit immediately
         * @param The exit code to give to the operating system
+        * (See the ExitStatus enum for valid values)
         */
        static void Exit(int status);
 
@@ -684,7 +728,7 @@ class InspIRCd : public classbase
        /** Send an error notice to all local users, opered and unopered
         * @param s The error string to send
         */
-       void SendError(const char *s);
+       void SendError(const std::string &s);
 
        /** For use with Module::Prioritize().
         * When the return value of this function is returned from
@@ -1101,6 +1145,26 @@ class InspIRCd : public classbase
 
        void SendWhoisLine(userrec* user, userrec* dest, int numeric, const char* format, ...);
 
+       /** Restart the server.
+        * This function will not return. If an error occurs,
+        * it will throw an instance of CoreException.
+        * @param reason The restart reason to show to all clients
+        * @throw CoreException An instance of CoreException indicating the error from execv().
+        */
+       void Restart(const std::string &reason);
+
+       /** Prepare the ircd for restart or shutdown.
+        * This function unloads all modules which can be unloaded,
+        * closes all open sockets, and closes the logfile.
+        */
+       void Cleanup();
+
+       /** This copies the user and channel hash_maps into new hash maps.
+        * This frees memory used by the hash_map allocator (which it neglects
+        * to free, most of the time, using tons of ram)
+        */
+       void RehashUsersAndChans();
+
        /** Begin execution of the server.
         * NOTE: this function NEVER returns. Internally,
         * after performing some initialisation routines,