]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_xline/core_xline.h
Add User::WriteRemoteNumeric() and switch code using SendText() to send numerics...
[user/henk/code/inspircd.git] / src / coremods / core_xline / core_xline.h
index c2e1714104d30a6db6d35bda362608863192875e..d4ad498a0a52f8fcb19cd36fcd519760cf8f59ae 100644 (file)
 
 #include "inspircd.h"
 
+class InsaneBan
+{
+ public:
+       class MatcherBase
+       {
+        public:
+               virtual long Run(const std::string& mask) = 0;
+       };
+
+       template <typename T>
+       class Matcher : public MatcherBase
+       {
+        public:
+               long Run(const std::string& mask)
+               {
+                       long matches = 0;
+                       const T* c = static_cast<T*>(this);
+                       const user_hash& users = ServerInstance->Users->GetUsers();
+                       for (user_hash::const_iterator i = users.begin(); i != users.end(); ++i)
+                       {
+                               if (c->Check(i->second, mask))
+                                       matches++;
+                       }
+                       return matches;
+               }
+       };
+
+       class IPHostMatcher : public Matcher<IPHostMatcher>
+       {
+        public:
+               bool Check(User* user, const std::string& mask) const;
+       };
+
+       /** Check if the given mask matches too many users according to the config, send an announcement if yes
+        * @param mask A mask to match against
+        * @param test The test that determines if a user matches the mask or not
+        * @param user A user whose nick will be included in the announcement if one is made
+        * @param bantype Type of the ban being set, will be used in the announcement if one is made
+        * @param confkey Name of the config key (inside the insane tag) which if false disables any checking
+        * @return True if the given mask matches too many users, false if not
+        */
+       static bool MatchesEveryone(const std::string& mask, MatcherBase& test, User* user, const char* bantype, const char* confkey);
+};
+
 /** Handle /ELINE.
  */
 class CommandEline : public Command
@@ -76,6 +120,12 @@ class CommandKline : public Command
  */
 class CommandQline : public Command
 {
+       class NickMatcher : public InsaneBan::Matcher<NickMatcher>
+       {
+        public:
+               bool Check(User* user, const std::string& mask) const;
+       };
+
  public:
        /** Constructor for qline.
         */
@@ -94,6 +144,12 @@ class CommandQline : public Command
  */
 class CommandZline : public Command
 {
+       class IPMatcher : public InsaneBan::Matcher<IPMatcher>
+       {
+        public:
+               bool Check(User* user, const std::string& mask) const;
+       };
+
  public:
        /** Constructor for zline.
         */