]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/uid.h
Use IsCTCP in blockcolor for ignoring CTCPs.
[user/henk/code/inspircd.git] / include / uid.h
index 288e5d1334d30c8cfdfcd0460152502792de63b2..c00161cac2104a533df6dc2762b8c390552ee5c7 100644 (file)
@@ -1,21 +1,59 @@
-/*       +------------------------------------+
- *       | 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, 2019 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2013 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2012 Robby <robby@chatbelgie.be>
+ *   Copyright (C) 2010 Craig Edwards <brain@inspircd.org>
+ *   Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
  *
- * 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/>.
  */
 
-/**
- * This is the maximum length of a UUID (unique user identifier).
- * This length is set in compliance with TS6 protocol, and really should not be changed. Ever.
- * It allows for a lot of clients as-is. -- w00t.
- */
-#define UUID_LENGTH 10
+#pragma once
+
+class CoreExport UIDGenerator
+{
+ private:
+       /** Holds the current UID. Used to generate the next one.
+        */
+       std::string current_uid;
+
+       /** Increments the current UID by one.
+        */
+       void IncrementUID(unsigned int pos);
+
+ public:
+       /**
+       * This is the maximum length of a UUID (unique user identifier).
+       * It allows up to 12,960 servers and 2,176,782,336 users per server.
+       */
+       static const unsigned int UUID_LENGTH = 9;
+
+       /** Initializes this UID generator with the given SID
+        * @param sid SID that conforms to InspIRCd::IsSID()
+        */
+       void init(const std::string& sid);
 
+       /** Returns the next available UID for this server.
+        */
+       std::string GetUID();
 
+       /** Generates a pseudorandom SID based on a servername and a description
+        * Guaranteed to return the same if invoked with the same parameters
+        * @param servername The server name to use as seed
+        * @param serverdesc The server description to use as seed
+        * @return A valid SID
+        */
+       static std::string GenerateSID(const std::string& servername, const std::string& serverdesc);
+};