]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/inspircd.h
If a user connects over 4in6 (YUCK) give them an ipv4 cloak
[user/henk/code/inspircd.git] / include / inspircd.h
index 5e9bed45dea9afd4b490a8ab979d239e95a19f07..ee02a32b5188e14853903cbbbcb28b025f83c425 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.
@@ -64,48 +65,55 @@ template<typename T> inline void DELETE(T* x)
 
 /** Template functions to convert any input type to std::string
  */
-template<typename N> std::string ConvNumeric(N in)
+template<typename T> inline std::string ConvNumeric(const T &in)
 {
+       if (in == 0) return "0";
        char res[MAXBUF];
        char* out = res;
-       long quotient = in;
+       T quotient = in;
        while (quotient) {
-               *out = "0123456789"[ std::abs( quotient % 10 ) ];
+               *out = "0123456789"[ std::abs( (long)quotient % 10 ) ];
                ++out;
                quotient /= 10;
        }
        if ( in < 0)
                *out++ = '-';
        *out = 0;
-       return std::reverse(res,out);
+       std::reverse(res,out);
+       return res;
 }
 
-template <int> inline std::string ConvToStr(const int in)
+inline std::string ConvToStr(const int in)
 {
        return ConvNumeric(in);
 }
 
-template <long> inline std::string ConvToStr(const long in)
+inline std::string ConvToStr(const long in)
 {
        return ConvNumeric(in);
 }
 
-template <unsigned long> inline std::string ConvToStr(const unsigned long in)
+inline std::string ConvToStr(const unsigned long in)
 {
        return ConvNumeric(in);
 }
 
-template <const char*> inline std::string ConvToStr(const char* in)
+inline std::string ConvToStr(const char* in)
 {
        return in;
 }
 
-template <bool> inline std::string ConvToStr(const long in)
+inline std::string ConvToStr(const bool in)
 {
        return (in ? "1" : "0");
 }
 
-template <typename T> inline std::string ConvToStr(const T &in)
+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();
@@ -289,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
         */
@@ -514,6 +522,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.
@@ -577,13 +589,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
@@ -622,7 +632,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
@@ -698,7 +708,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
@@ -1054,7 +1064,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);