summaryrefslogtreecommitdiff
path: root/include/uid.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/uid.h')
-rw-r--r--include/uid.h44
1 files changed, 38 insertions, 6 deletions
diff --git a/include/uid.h b/include/uid.h
index 17061bdee..772c8a716 100644
--- a/include/uid.h
+++ b/include/uid.h
@@ -16,12 +16,44 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#pragma once
-/**
- * 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
+class TestSuite;
+
+class CoreExport UIDGenerator
+{
+ friend class TestSuite;
+
+ /** 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).
+ * 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.
+ */
+ 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);
+};