]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/users.h
MODERR tidyups
[user/henk/code/inspircd.git] / include / users.h
index c35680dac304992fb15c0b92b07d531bf1a507a0..0cf786c761b80ed486544280fe69f81287ceb4f9 100644 (file)
@@ -177,21 +177,19 @@ public:
 
        /** Create a new connect class based on an existing connect class. This is required for std::vector (at least under windows).
         */
-       ConnectClass(const ConnectClass& source) : classbase(), type(source.type), name(source.name),
-               registration_timeout(source.registration_timeout), flood(source.flood), host(source.host),
-               pingtime(source.pingtime), pass(source.pass), threshold(source.threshold), sendqmax(source.sendqmax),
-               recvqmax(source.recvqmax), maxlocal(source.maxlocal), maxglobal(source.maxglobal), maxchans(source.maxchans),
-               port(source.port)
+       ConnectClass(const ConnectClass* source) : classbase(), type(source->type), name(source->name),
+               registration_timeout(source->registration_timeout), flood(source->flood), host(source->host),
+               pingtime(source->pingtime), pass(source->pass), threshold(source->threshold), sendqmax(source->sendqmax),
+               recvqmax(source->recvqmax), maxlocal(source->maxlocal), maxglobal(source->maxglobal), maxchans(source->maxchans),
+               port(source->port), RefCount(0), disabled(false), limit(0)
        {
-               this->RefCount = 0;
        }
 
        /** Create a new connect class with no settings.
         */
        ConnectClass() : type(CC_DENY), name("unnamed"), registration_timeout(0), flood(0), host(""), pingtime(0), pass(""),
-                       threshold(0), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0)
+                       threshold(0), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0), RefCount(0), disabled(false), limit(0)
        {
-               this->RefCount = 0;
        }
 
        /** Create a new connect class to ALLOW connections.
@@ -211,36 +209,44 @@ public:
                        const std::string &pas, unsigned int thres, unsigned long sendq, unsigned long recvq,
                        unsigned long maxl, unsigned long maxg, unsigned int maxc, int p = 0) :
                        type(CC_ALLOW), name(thename), registration_timeout(timeout), flood(fld), host(hst), pingtime(ping), pass(pas),
-                       threshold(thres), sendqmax(sendq), recvqmax(recvq), maxlocal(maxl), maxglobal(maxg), maxchans(maxc), port(p) { }
+                       threshold(thres), sendqmax(sendq), recvqmax(recvq), maxlocal(maxl), maxglobal(maxg), maxchans(maxc), port(p), RefCount(0), disabled(false), limit(0) { }
 
        /** Create a new connect class to DENY connections
         * @param thename Name of the connect class
         * @param hst The IP mask to deny
         */
        ConnectClass(const std::string &thename, const std::string &hst) : type(CC_DENY), name(thename), registration_timeout(0),
-                       flood(0), host(hst), pingtime(0), pass(""), threshold(0), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0), maxchans(0), port(0)
+                       flood(0), host(hst), pingtime(0), pass(""), threshold(0), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0), maxchans(0), port(0), RefCount(0), disabled(false), limit(0)
        {
-               this->RefCount = 0;
        }
 
        /* Create a new connect class based on another class
         * @param thename The name of the connect class
         * @param source Another connect class to inherit all but the name from
         */
-       ConnectClass(const std::string &thename, const ConnectClass &source) : type(source.type), name(thename),
-                               registration_timeout(source.registration_timeout), flood(source.flood), host(source.host),
-                               pingtime(source.pingtime), pass(source.pass), threshold(source.threshold), sendqmax(source.sendqmax),
-                               recvqmax(source.recvqmax), maxlocal(source.maxlocal), maxglobal(source.maxglobal), maxchans(source.maxchans),
-                               port(source.port)
+       ConnectClass(const std::string &thename, const ConnectClass* source) : type(source->type), name(thename),
+                               registration_timeout(source->registration_timeout), flood(source->flood), host(source->host),
+                               pingtime(source->pingtime), pass(source->pass), threshold(source->threshold), sendqmax(source->sendqmax),
+                               recvqmax(source->recvqmax), maxlocal(source->maxlocal), maxglobal(source->maxglobal), maxchans(source->maxchans),
+                               port(source->port), RefCount(0), disabled(false), limit(0)
        {
-               this->RefCount = 0;
+       }
+
+       void SetDisabled(bool t)
+       {
+               this->disabled = t;
+       }
+
+       bool GetDisabled()
+       {
+               return this->disabled;
        }
 
        /* Update an existing entry with new values
         */
        void Update(unsigned int timeout, unsigned int fld, const std::string &hst, unsigned int ping,
                                const std::string &pas, unsigned int thres, unsigned long sendq, unsigned long recvq,
-                               unsigned long maxl, unsigned long maxg, unsigned int maxc, int p)
+                               unsigned long maxl, unsigned long maxg, unsigned int maxc, int p, unsigned long limit)
        {
                if (timeout)
                        registration_timeout = timeout;
@@ -266,6 +272,8 @@ public:
                        maxchans = maxc;
                if (p)
                        port = p;
+
+               this->limit = limit;
        }
 
        /** Reference counter. Contains an int as to how many users are connected to this class. :)
@@ -274,6 +282,14 @@ public:
         */
        unsigned long RefCount;
 
+       /** If this is true, any attempt to set a user to this class will fail. Default false. This is really private, it's only in the public section thanks to the way this class is written
+        */
+       bool disabled;
+
+       /** How many users may be in this connect class before they are refused? (0 = disabled = default)
+        */
+       unsigned long limit;
+
        int GetMaxChans()
        {
                return maxchans;
@@ -374,29 +390,6 @@ public:
        {
                return maxglobal;
        }
-
-       bool operator== (ConnectClass &other)
-       {
-               return (other.GetName() == name);
-       }
-
-       void operator=(const ConnectClass & other)
-       {
-               type = other.type;
-               name = other.name;
-               registration_timeout = other.registration_timeout;
-               flood = other.flood;
-               host = other.host;
-               pingtime = other.pingtime;
-               pass = other.pass;
-               threshold = other.threshold;
-               sendqmax = other.sendqmax;
-               recvqmax = other.recvqmax;
-               maxlocal = other.maxlocal;
-               maxglobal = other.maxglobal;
-               maxchans = other.maxchans;
-               port = other.port;
-       }
 };
 
 /** Holds a complete list of all channels to which a user has been invited and has not yet joined.
@@ -405,7 +398,7 @@ typedef std::vector<irc::string> InvitedList;
 
 /** Holds a complete list of all allow and deny tags from the configuration file (connection classes)
  */
-typedef std::vector<ConnectClass> ClassVector;
+typedef std::vector<ConnectClass*> ClassVector;
 
 /** Typedef for the list of user-channel records for a user
  */
@@ -623,7 +616,7 @@ class CoreExport User : public connection
 
        /** Flood counters - lines received
         */
-       int lines_in;
+       unsigned int lines_in;
 
        /** Flood counters - time lines_in is due to be reset
         */
@@ -668,11 +661,7 @@ class CoreExport User : public connection
         */
        std::string WriteError;
 
-       /** This is true if the user matched an exception when they connected to the ircd.
-        * It isnt valid after this point, and you should not attempt to do anything with it
-        * after this point, because the eline might be removed at a later time, and/or no
-        * longer be applicable to this user. It is only used to save doing the eline lookup
-        * twice (instead we do it once and set this value).
+       /** This is true if the user matched an exception (E:Line). It is used to save time on ban checks.
         */
        bool exempt;