void InspIRCd::RehashUsersAndChans()
{
user_hash* old_users = this->clientlist;
+ user_hash* old_uuid = this->uuidlist;
chan_hash* old_chans = this->chanlist;
this->clientlist = new user_hash();
+ this->uuidlist = new user_hash();
this->chanlist = new chan_hash();
for (user_hash::const_iterator n = old_users->begin(); n != old_users->end(); n++)
delete old_users;
+ for (user_hash::const_iterator n = old_uuid->begin(); n != old_uuid->end(); n++)
+ this->uuidlist->insert(*n);
+
+ delete old_uuid;
+
for (chan_hash::const_iterator n = old_chans->begin(); n != old_chans->end(); n++)
this->chanlist->insert(*n);
this->unregistered_count = 0;
this->clientlist = new user_hash();
+ this->uuidlist = new user_hash();
this->chanlist = new chan_hash();
this->Config = new ServerConfig(this);
*/
int i;
- for(i = 0; i < 3; i++)
- current_uid[i] = '0';
+ /* Generate SID */
+ size_t sid = 0;
+ for (const char* x = Config->ServerName; *x; ++x)
+ sid = 5 * sid + *x;
+ for (const char* y = Config->ServerDesc; *y; ++y)
+ sid = 5 * sid + *y;
+ sid = sid % 999;
+ 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';