]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/snomasks.h
Remove the Kiwi links from the readme.
[user/henk/code/inspircd.git] / include / snomasks.h
index c35fc92b7235d5ef5534ea6621c9efcfd9d7b758..e3859faba7c5787c175857feeaae785f196e204b 100644 (file)
@@ -1,76 +1,90 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
  *
- *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
+ *   Copyright (C) 2013-2014 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2013, 2017 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2012 Robby <robby@chatbelgie.be>
+ *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+ *   Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
+ *   Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
+ *   Copyright (C) 2008 Robin Burchell <robin+git@viroteck.net>
+ *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ *   Copyright (C) 2006, 2010 Craig Edwards <brain@inspircd.org>
  *
- * This program is free but copyrighted software; see
- *            the file COPYING for details.
+ * This file is part of InspIRCd.  InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
  *
- * ---------------------------------------------------
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef __SNOMASKS_H__
-#define __SNOMASKS_H__
 
-class Snomask : public Extensible
-{
- private:
-       InspIRCd *ServerInstance;
+#pragma once
 
- public:
-       char MySnomask;
+class SnomaskManager;
+class Snomask
+{
+       /** Description of this snomask, e.g.: OPER, ANNOUNCEMENT, XLINE
+        */
        std::string Description;
+
+       /** Information about the last sent message,
+        * used for sending "last message repeated X times" messages
+        */
        std::string LastMessage;
-       bool LastBlocked;
+       char LastLetter;
        unsigned int Count;
 
+       /** Log and send a message to all opers who have the given snomask set
+        * @param letter The target users of this message
+        * @param desc The description of this snomask, will be prepended to the message
+        * @param msg The message to send
+        */
+       static void Send(char letter, const std::string& desc, const std::string& msg);
+
+ public:
        /** Create a new Snomask
         */
-       Snomask(InspIRCd* Instance, char snomask, const std::string &description) : ServerInstance(Instance), MySnomask(snomask), Description(description), LastMessage(""), Count(0)
-       {
-       }
+       Snomask();
 
        /** Sends a message to all opers with this snomask.
+        * @param message The message to send
+        * @param letter The snomask character to send the message to.
         */
-       void SendMessage(const std::string &message);
+       void SendMessage(const std::string& message, char letter);
 
        /** Sends out the (last message repeated N times) message
         */
        void Flush();
-};
 
-/** A list of snomasks which are valid, and their descriptive texts
- */
-typedef std::map<char, Snomask *> SnoList;
+       /** Returns the description of this snomask
+        * @param letter The letter of this snomask. If uppercase, the description of the remote
+        * variant of this snomask will be returned (i.e.: "REMOTE" will be prepended to the description).
+        * @return The description of this snomask
+        */
+       std::string GetDescription(char letter) const;
 
-/** Snomask manager handles routing of SNOMASK (usermode +n) messages to opers.
+       friend class SnomaskManager;
+};
+
+/** Snomask manager handles routing of SNOMASK (usermode +s) messages to opers.
  * Modules and the core can enable and disable snomask characters. If they do,
  * then sending snomasks using these characters becomes possible.
  */
-class CoreExport SnomaskManager
+class CoreExport SnomaskManager : public fakederef<SnomaskManager>
 {
- private:
-       /** Creator/owner
-        */
-       InspIRCd* ServerInstance;
+       Snomask masks[26];
 
-       /** Currently active snomask list
-        */
-       SnoList SnoMasks;
-
-       /** Set up the default (core available) snomask chars
-        */
-       void SetupDefaults();
  public:
        /** Create a new SnomaskManager
         */
-       SnomaskManager(InspIRCd* Instance);
-
-       /** Delete SnomaskManager
-        */
-       ~SnomaskManager();
+       SnomaskManager();
 
        /** Enable a snomask.
         * @param letter The snomask letter to enable. Once enabled,
@@ -78,17 +92,8 @@ class CoreExport SnomaskManager
         * their list, and users may add this letter to their list.
         * @param description The descriptive text sent along with any
         * server notices, at the start of the notice, e.g. "GLOBOPS".
-        * @return True if the snomask was enabled, false if it already
-        * exists.
-        */
-       bool EnableSnomask(char letter, const std::string &description);
-
-       /** Disable a snomask.
-        * @param letter The snomask letter to disable.
-        * @return True if the snomask was disabled, false if it didn't
-        * exist.
         */
-       bool DisableSnomask(char letter);
+       void EnableSnomask(char letter, const std::string &description);
 
        /** Write to all users with a given snomask (local server only)
         * @param letter The snomask letter to write to
@@ -116,7 +121,6 @@ class CoreExport SnomaskManager
         */
        void WriteGlobalSno(char letter, const char* text, ...) CUSTOM_PRINTF(3, 4);
 
-
        /** Called once per 5 seconds from the mainloop, this flushes any cached
         * snotices. The way the caching works is as follows:
         * Calls to WriteToSnoMask write to a cache, if the call is the same as it was
@@ -127,11 +131,11 @@ class CoreExport SnomaskManager
         */
        void FlushSnotices();
 
-       /** Check if a snomask is enabled.
-        * @param letter The snomask letter to check.
-        * @return True if the snomask has been enabled.
+       /** Check whether a given character is an enabled (initialized) snomask.
+        * Valid snomask chars are lower- or uppercase letters and have a description.
+        * Snomasks are initialized with EnableSnomask().
+        * @param ch The character to check
+        * @return True if the given char is allowed to be set via +s.
         */
-       bool IsEnabled(char letter);
+       bool IsSnomaskUsable(char ch) const;
 };
-
-#endif