From: attilamolnar Date: Sun, 14 Apr 2013 16:35:41 +0000 (+0200) Subject: Use std::string internally in UIDGenerator, move UUID_LENGTH into the class as a... X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=895554aebccbeeb45e2c469d0bafa1e0d85dd8fb;p=user%2Fhenk%2Fcode%2Finspircd.git Use std::string internally in UIDGenerator, move UUID_LENGTH into the class as a constant --- diff --git a/include/uid.h b/include/uid.h index 8be003628..772c8a716 100644 --- a/include/uid.h +++ b/include/uid.h @@ -18,13 +18,6 @@ #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 @@ -33,13 +26,20 @@ class CoreExport UIDGenerator /** Holds the current UID. Used to generate the next one. */ - char current_uid[UUID_LENGTH]; + 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() */ diff --git a/src/modules/m_spanningtree/netburst.cpp b/src/modules/m_spanningtree/netburst.cpp index ee5707fdb..21404e68e 100644 --- a/src/modules/m_spanningtree/netburst.cpp +++ b/src/modules/m_spanningtree/netburst.cpp @@ -102,7 +102,7 @@ void TreeSocket::SendFJoins(Channel* c) for (UserMembCIter i = ulist->begin(); i != ulist->end(); ++i) { const std::string& modestr = i->second->modes; - if ((line.length() + modestr.length() + (UUID_LENGTH-1) + 2) > 480) + if ((line.length() + modestr.length() + UIDGenerator::UUID_LENGTH + 2) > 480) { this->WriteLine(line); line.erase(erase_from); diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp index e91214041..1504a8807 100644 --- a/src/modules/m_spanningtree/treesocket2.cpp +++ b/src/modules/m_spanningtree/treesocket2.cpp @@ -241,7 +241,7 @@ void TreeSocket::ProcessConnectedLine(std::string& prefix, std::string& command, * crossing the users QUIT further upstream from the server. Thanks jilles! */ - if ((prefix.length() == UUID_LENGTH-1) && (isdigit(prefix[0])) && + if ((prefix.length() == UIDGenerator::UUID_LENGTH) && (isdigit(prefix[0])) && ((command == "FMODE") || (command == "MODE") || (command == "KICK") || (command == "TOPIC") || (command == "KILL") || (command == "ADDLINE") || (command == "DELLINE"))) { /* Special case, we cannot drop these commands as they've been committed already on a diff --git a/src/server.cpp b/src/server.cpp index c49e17b56..6790b45e7 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -143,15 +143,10 @@ void UIDGenerator::init(const std::string& sid) * -- w */ + current_uid.resize(UUID_LENGTH, '9'); current_uid[0] = sid[0]; current_uid[1] = sid[1]; current_uid[2] = sid[2]; - - for (int i = 3; i < (UUID_LENGTH - 1); i++) - current_uid[i] = '9'; - - // Null terminator. Important. - current_uid[UUID_LENGTH - 1] = '\0'; } /* @@ -162,7 +157,7 @@ std::string UIDGenerator::GetUID() while (1) { // Add one to the last UID - this->IncrementUID(UUID_LENGTH - 2); + this->IncrementUID(UUID_LENGTH - 1); if (!ServerInstance->FindUUID(current_uid)) break; diff --git a/src/testsuite.cpp b/src/testsuite.cpp index c107217b7..539827cf8 100644 --- a/src/testsuite.cpp +++ b/src/testsuite.cpp @@ -331,23 +331,25 @@ bool TestSuite::DoThreadTests() bool TestSuite::DoGenerateUIDTests() { + const unsigned int UUID_LENGTH = UIDGenerator::UUID_LENGTH; UIDGenerator uidgen; uidgen.init(ServerInstance->Config->GetSID()); std::string first_uid = uidgen.GetUID(); - if (first_uid.length() != UUID_LENGTH-1) + + if (first_uid.length() != UUID_LENGTH) { std::cout << "GENERATEUID: Generated UID is " << first_uid.length() << " characters long instead of " << UUID_LENGTH-1 << std::endl; return false; } - if (uidgen.current_uid[UUID_LENGTH-1] != '\0') + if (uidgen.current_uid.c_str()[UUID_LENGTH] != '\0') { std::cout << "GENERATEUID: The null terminator is missing from the end of current_uid" << std::endl; return false; } // The correct UID when generating one for the first time is ...AAAAAA - std::string correct_uid = ServerInstance->Config->sid + std::string(UUID_LENGTH - 4, 'A'); + std::string correct_uid = ServerInstance->Config->sid + std::string(UUID_LENGTH - 3, 'A'); if (first_uid != correct_uid) { std::cout << "GENERATEUID: Generated an invalid first UID: " << first_uid << " instead of " << correct_uid << std::endl; @@ -356,7 +358,7 @@ bool TestSuite::DoGenerateUIDTests() // Set current_uid to be ...Z99999 uidgen.current_uid[3] = 'Z'; - for (unsigned int i = 4; i < UUID_LENGTH-1; i++) + for (unsigned int i = 4; i < UUID_LENGTH; i++) uidgen.current_uid[i] = '9'; // Store the UID we'll be incrementing so we can display what's wrong later if necessary @@ -364,7 +366,7 @@ bool TestSuite::DoGenerateUIDTests() std::string generated_uid = uidgen.GetUID(); // Correct UID after incrementing ...Z99999 is ...0AAAAA - correct_uid = ServerInstance->Config->sid + "0" + std::string(UUID_LENGTH - 5, 'A'); + correct_uid = ServerInstance->Config->sid + "0" + std::string(UUID_LENGTH - 4, 'A'); if (generated_uid != correct_uid) { @@ -373,7 +375,7 @@ bool TestSuite::DoGenerateUIDTests() } // Set current_uid to be ...999999 to see if it rolls over correctly - for (unsigned int i = 3; i < UUID_LENGTH-1; i++) + for (unsigned int i = 3; i < UUID_LENGTH; i++) uidgen.current_uid[i] = '9'; before_increment.assign(uidgen.current_uid);