]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/inspircd.h
Make error reporting work properly, it seemed to loose errors.
[user/henk/code/inspircd.git] / include / inspircd.h
index 0e53ce1c400b0b2af6df42acf97572de0fa94d74..d9918aa737087fd0b466d47e99936c59bcc6f544 100644 (file)
@@ -25,6 +25,7 @@
 #include "socketengine.h"
 #include "command_parse.h"
 #include "snomasks.h"
+#include "cull_list.h"
 
 /** Returned by some functions to indicate failure.
  */
@@ -47,7 +48,7 @@ enum DebugLevel
 };
 
 /**
- * This define is used in place of strcmp when we 
+ * This define is used in place of strcmp when we
  * want to check if a char* string contains only one
  * letter. Pretty fast, its just two compares and an
  * addition.
@@ -62,9 +63,57 @@ template<typename T> inline void DELETE(T* x)
        x = NULL;
 }
 
-/** Template function to convert any input type to std::string
+/** Template functions to convert any input type to std::string
  */
-template<typename T> inline std::string ConvToStr(const T &in)
+template<typename T> inline std::string ConvNumeric(const T &in)
+{
+       if (in == 0) return "0";
+       char res[MAXBUF];
+       char* out = res;
+       T quotient = in;
+       while (quotient) {
+               *out = "0123456789"[ std::abs( (long)quotient % 10 ) ];
+               ++out;
+               quotient /= 10;
+       }
+       if ( in < 0)
+               *out++ = '-';
+       *out = 0;
+       std::reverse(res,out);
+       return res;
+}
+
+inline std::string ConvToStr(const int in)
+{
+       return ConvNumeric(in);
+}
+
+inline std::string ConvToStr(const long in)
+{
+       return ConvNumeric(in);
+}
+
+inline std::string ConvToStr(const unsigned long in)
+{
+       return ConvNumeric(in);
+}
+
+inline std::string ConvToStr(const char* in)
+{
+       return in;
+}
+
+inline std::string ConvToStr(const bool in)
+{
+       return (in ? "1" : "0");
+}
+
+inline std::string ConvToStr(char in)
+{
+       return std::string(in,1);
+}
+
+template <class T> inline std::string ConvToStr(const T &in)
 {
        std::stringstream tmp;
        if (!(tmp << in)) return std::string();
@@ -248,7 +297,7 @@ class InspIRCd : public classbase
        /** Holds a string describing the last module error to occur
         */
        char MODERR[MAXBUF];
+
        /** Remove a ModuleFactory pointer
         * @param j Index number of the ModuleFactory to remove
         */
@@ -259,10 +308,6 @@ class InspIRCd : public classbase
         */
        void EraseModule(int j);
 
-       /** Build the ISUPPORT string by triggering all modules On005Numeric events
-        */
-       void BuildISupport();
-
        /** Move a given module to a specific slot in the list
         * @param modulename The module name to relocate
         * @param slot The slot to move the module into
@@ -387,6 +432,12 @@ class InspIRCd : public classbase
 
  public:
 
+       std::map<InspSocket*,InspSocket*> SocketCull;
+
+       /** Build the ISUPPORT string by triggering all modules On005Numeric events
+        */
+       void BuildISupport();
+
        /** Number of unregistered users online right now.
         * (Unregistered means before USER/NICK/dns)
         */
@@ -400,6 +451,10 @@ class InspIRCd : public classbase
         */
        time_t startup_time;
 
+       /** Config file pathname specified on the commandline or via ./configure
+        */
+       char ConfigFileName[MAXBUF];
+
        /** Mode handler, handles mode setting and removal
         */
        ModeParser* Modes;
@@ -473,6 +528,10 @@ class InspIRCd : public classbase
         */
        time_t next_call;
 
+       /** Global cull list, will be processed on next iteration
+        */
+       CullList GlobalCulls;
+
        /** Get the current time
         * Because this only calls time() once every time around the mainloop,
         * it is much faster than calling time() directly.
@@ -536,13 +595,11 @@ class InspIRCd : public classbase
 
        /** Binds a socket on an already open file descriptor
         * @param sockfd A valid file descriptor of an open socket
-        * @param client A sockaddr to use as temporary storage
-        * @param server A sockaddr to use as temporary storage
         * @param port The port number to bind to
         * @param addr The address to bind to (IP only)
         * @return True if the port was bound successfully
         */
-       bool BindSocket(int sockfd, insp_sockaddr client, insp_sockaddr server, int port, char* addr);
+       bool BindSocket(int sockfd, int port, char* addr, bool dolisten = true);
 
        /** Adds a server name to the list of servers we've seen
         * @param The servername to add
@@ -581,7 +638,7 @@ class InspIRCd : public classbase
         * @param text The text to send
         */
        void WriteOpers(const std::string &text);
-       
+
        /** Find a nickname in the nick hash
         * @param nick The nickname to find
         * @return A pointer to the user, or NULL if the user does not exist
@@ -657,7 +714,7 @@ class InspIRCd : public classbase
 
        /** Send text to all users with a specific set of modes
         * @param modes The modes to check against, without a +, e.g. 'og'
-        * @param flags one of WM_OR or WM_AND. If you specify WM_OR, any one of the 
+        * @param flags one of WM_OR or WM_AND. If you specify WM_OR, any one of the
         * mode characters in the first parameter causes receipt of the message, and
         * if you specify WM_OR, all the modes must be present.
         * @param text The text format string to send
@@ -676,12 +733,19 @@ class InspIRCd : public classbase
         */
        static void Rehash(int status);
 
-       /** Causes the server to exit immediately
+       /** Causes the server to exit after unloading modules and
+        * closing all open file descriptors.
+        *
         * @param The exit code to give to the operating system
         * (See the ExitStatus enum for valid values)
         */
        static void Exit(int status);
 
+       /** Causes the server to exit immediately with exit code 0.
+        * The status code is required for signal handlers, and ignored.
+        */
+       static void QuickExit(int status);
+
        /** Return a count of users, unknown and known connections
         * @return The number of users
         */
@@ -1013,7 +1077,7 @@ class InspIRCd : public classbase
         bool DelELine(const std::string &hostmask);
 
        /** Return true if the given parameter is a valid nick!user\@host mask
-        * @param mask A nick!user\@host masak to match against 
+        * @param mask A nick!user\@host masak to match against
         * @return True i the mask is valid
         */
         bool IsValidMask(const std::string &mask);
@@ -1080,6 +1144,11 @@ class InspIRCd : public classbase
         */
        bool ULine(const char* server);
 
+       /** Returns true if the uline is 'silent' (doesnt generate
+        * remote connect notices etc).
+        */
+       bool SilentULine(const char* server);
+
        /** Returns the subversion revision ID of this ircd
         * @return The revision ID or an empty string
         */
@@ -1169,6 +1238,15 @@ class InspIRCd : public classbase
         */
        void RehashUsersAndChans();
 
+       /** Resets the cached max bans value on all channels.
+        * Called by rehash.
+        */
+       void ResetMaxBans();
+
+       /** Return a time_t as a human-readable string.
+        */
+       std::string TimeString(time_t curtime);
+
        /** Begin execution of the server.
         * NOTE: this function NEVER returns. Internally,
         * after performing some initialisation routines,