diff options
author | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-08-31 19:37:22 +0000 |
---|---|---|
committer | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-08-31 19:37:22 +0000 |
commit | b2b7bfd5e94760b3d4ab1832edd4e5a26b8b8fd9 (patch) | |
tree | f849a4a04c45959dcb756cf24bbfb1d4a24833d4 | |
parent | 46a4409b754ffa05dcebfe7381813a51ad479c1f (diff) |
This may not compile, I'll test it on my desktop. Waiting 20 minutes for a build is unacceptable.
- Move UUID initialisation to InspIRCd::InitialiseUID()
- Call it if we run out of existing UUIDs
- Call it on startup
Just a small cleanup.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8007 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | include/inspircd.h | 4 | ||||
-rw-r--r-- | src/inspircd.cpp | 23 | ||||
-rw-r--r-- | src/server.cpp | 8 |
3 files changed, 25 insertions, 10 deletions
diff --git a/include/inspircd.h b/include/inspircd.h index 2e5531567..d5d0c9ae4 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -273,6 +273,10 @@ class CoreExport InspIRCd : public classbase */ void DoSocketTimeouts(time_t TIME); + /** Sets up UID subsystem + */ + void InitialiseUID(); + /** Perform background user events such as PING checks * @param TIME the current time */ diff --git a/src/inspircd.cpp b/src/inspircd.cpp index fe36208d1..949d8a3ae 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -435,7 +435,7 @@ InspIRCd::InspIRCd(int argc, char** argv) this->Modules->handles.resize(255); /* - * Initialise UID. XXX, we need to read SID from config, and use it instead of 000. + * Initialise SID/UID. * For an explanation as to exactly how this works, and why it works this way, see GetUID(). * -- w00t */ @@ -457,13 +457,8 @@ InspIRCd::InspIRCd(int argc, char** argv) Config->sid = sid; } - current_uid[0] = sid / 100 + 48; - current_uid[1] = ((sid / 10) % 10) + 48; - current_uid[2] = sid % 10 + 48; - /* Initialise UID */ - for(i = 3; i < UUID_LENGTH - 1; i++) - current_uid[i] = 'A'; + this->InitialiseUID(); /* set up fake client */ this->FakeClient = new userrec(this); @@ -577,6 +572,20 @@ InspIRCd::InspIRCd(int argc, char** argv) this->WritePID(Config->PID); } +/* moved to a function, as UID generation can call this also */ +void InspIRCd::InitialiseUID() +{ + size_t sid = Config->sid; + + current_uid[0] = sid / 100 + 48; + current_uid[1] = ((sid / 10) % 10) + 48; + current_uid[2] = sid % 10 + 48; + + /* Initialise UID */ + for(i = 3; i < UUID_LENGTH - 1; i++) + current_uid[i] = 'A'; +} + void InspIRCd::DoOneIteration(bool process_module_sockets) { #ifndef WIN32 diff --git a/src/server.cpp b/src/server.cpp index ea2ec4928..2722c6831 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -173,9 +173,11 @@ std::string InspIRCd::GetUID() if (current_uid[3] == 'Z') { - /* If we get to here, we need to wrap around to AAAA. */ - for(int j = 3; j < UUID_LENGTH - 1; j++) - current_uid[j] = 'A'; + /* + * Ugh. We have run out of room.. roll back around to the + * start of the UUID namespace. -- w00t + */ + this->InitialiseUID(); /* * and now we need to break the inner for () to continue the while (), |