]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/users.h
ListModeBase: Minor changes to original u_listmode code
[user/henk/code/inspircd.git] / include / users.h
index 2834efaaed4dca306f2f65c066bfd64f3a5ce400..b9807a1586e8ee862d8ba8d75646ed6433ee9cf6 100644 (file)
@@ -60,7 +60,7 @@ enum UserModes {
  */
 enum RegistrationState {
 
-#ifndef WIN32   // Burlex: This is already defined in win32, luckily it is still 0.
+#ifndef _WIN32   // Burlex: This is already defined in win32, luckily it is still 0.
        REG_NONE = 0,           /* Has sent nothing */
 #endif
 
@@ -267,10 +267,6 @@ class CoreExport User : public Extensible
         */
        time_t signon;
 
-       /** Time that the connection last sent a message, used to calculate idle time
-        */
-       time_t idle_lastmsg;
-
        /** Client address that the user is connected from.
         * Do not modify this value directly, use SetClientIP() to change it.
         * Port is not valid for remote users.
@@ -347,12 +343,6 @@ class CoreExport User : public Extensible
         */
        unsigned int registered:3;
 
-       /** True when DNS lookups are completed.
-        * The UserResolver classes res_forward and res_reverse will
-        * set this value once they complete.
-        */
-       unsigned int dns_done:1;
-
        /** Whether or not to send an snotice about this user's quitting
         */
        unsigned int quietquit:1;
@@ -364,27 +354,13 @@ class CoreExport User : public Extensible
         */
        unsigned int quitting:1;
 
-       /** Recursion fix: user is out of SendQ and will be quit as soon as possible.
-        * This can't be handled normally because QuitUser itself calls Write on other
-        * users, which could trigger their SendQ to overrun.
-        */
-       unsigned int quitting_sendq:1;
-
-       /** This is true if the user matched an exception (E:Line). It is used to save time on ban checks.
-        */
-       unsigned int exempt:1;
-
-       /** has the user responded to their previous ping?
-        */
-       unsigned int lastping:1;
-
        /** What type of user is this? */
        const unsigned int usertype:2;
 
        /** Get client IP string from sockaddr, using static internal buffer
         * @return The IP string
         */
-       const char* GetIPString();
+       const std::string& GetIPString();
 
        /** Get CIDR mask, using default range, for this user
         */
@@ -393,21 +369,15 @@ class CoreExport User : public Extensible
        /** Sets the client IP for this user
         * @return true if the conversion was successful
         */
-       virtual bool SetClientIP(const char* sip);
+       virtual bool SetClientIP(const char* sip, bool recheck_eline = true);
 
-       virtual void SetClientIP(const irc::sockets::sockaddrs& sa);
+       virtual void SetClientIP(const irc::sockets::sockaddrs& sa, bool recheck_eline = true);
 
        /** Constructor
         * @throw CoreException if the UID allocated to the user already exists
         */
        User(const std::string &uid, const std::string& srv, int objtype);
 
-       /** Check if the user matches a G or K line, and disconnect them if they do.
-        * @param doZline True if ZLines should be checked (if IP has changed since initial connect)
-        * Returns true if the user matched a ban, false else.
-        */
-       bool CheckLines(bool doZline = false);
-
        /** Returns the full displayed host of the user
         * This member function returns the hostname of the user as seen by other users
         * on the server, in nick!ident\@host form.
@@ -515,10 +485,6 @@ class CoreExport User : public Extensible
         */
        const std::string& MakeHostIP();
 
-       /** Add the user to WHOWAS system
-        */
-       void AddToWhoWas();
-
        /** Oper up the user using the given opertype.
         * This will also give the +o usermode.
         */
@@ -747,21 +713,25 @@ class CoreExport LocalUser : public User, public InviteBase
 
        UserIOHandler eh;
 
+       /** Position in UserManager::local_users
+        */
+       LocalUserList::iterator localuseriter;
+
        /** Stats counter for bytes inbound
         */
-       int bytes_in;
+       unsigned int bytes_in;
 
        /** Stats counter for bytes outbound
         */
-       int bytes_out;
+       unsigned int bytes_out;
 
        /** Stats counter for commands inbound
         */
-       int cmds_in;
+       unsigned int cmds_in;
 
        /** Stats counter for commands outbound
         */
-       int cmds_out;
+       unsigned int cmds_out;
 
        /** Password specified by the user when they registered (if any).
         * This is stored even if the \<connect> block doesnt need a password, so that
@@ -788,10 +758,34 @@ class CoreExport LocalUser : public User, public InviteBase
         */
        int GetServerPort();
 
+       /** Recursion fix: user is out of SendQ and will be quit as soon as possible.
+        * This can't be handled normally because QuitUser itself calls Write on other
+        * users, which could trigger their SendQ to overrun.
+        */
+       unsigned int quitting_sendq:1;
+
+       /** True when DNS lookups are completed.
+        * The UserResolver classes res_forward and res_reverse will
+        * set this value once they complete.
+        */
+       unsigned int dns_done:1;
+
+       /** has the user responded to their previous ping?
+        */
+       unsigned int lastping:1;
+
+       /** This is true if the user matched an exception (E:Line). It is used to save time on ban checks.
+        */
+       unsigned int exempt:1;
+
        /** Used by PING checking code
         */
        time_t nping;
 
+       /** Time that the connection last sent a message, used to calculate idle time
+        */
+       time_t idle_lastmsg;
+
        /** This value contains how far into the penalty threshold the user is.
         * This is used either to enable fake lag or for excess flood quits
         */
@@ -810,6 +804,12 @@ class CoreExport LocalUser : public User, public InviteBase
         */
        void StartDNSLookup();
 
+       /** Check if the user matches a G or K line, and disconnect them if they do.
+        * @param doZline True if ZLines should be checked (if IP has changed since initial connect)
+        * Returns true if the user matched a ban, false else.
+        */
+       bool CheckLines(bool doZline = false);
+
        /** Use this method to fully connect a user.
         * This will send the message of the day, check G/K/E lines, etc.
         */
@@ -821,9 +821,9 @@ class CoreExport LocalUser : public User, public InviteBase
         */
        void SetClass(const std::string &explicit_name = "");
 
-       bool SetClientIP(const char* sip);
+       bool SetClientIP(const char* sip, bool recheck_eline = true);
 
-       void SetClientIP(const irc::sockets::sockaddrs& sa);
+       void SetClientIP(const irc::sockets::sockaddrs& sa, bool recheck_eline = true);
 
        void SendText(const std::string& line);
        void Write(const std::string& text);