]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
Add options:maxtargets that was somehow omitted, fixes bug #400 (Reported by DarkStorm)
[user/henk/code/inspircd.git] / src / inspircd.cpp
index 4c19878d74c36b104d4505229ebccde68af32a5f..bfd7a9d45791fb233a6ef2dce923af794f951021 100644 (file)
@@ -41,8 +41,6 @@
 #include "exitcodes.h"
 #include "caller.h"
 
-using irc::sockets::NonBlocking;
-using irc::sockets::Blocking;
 using irc::sockets::insp_ntoa;
 using irc::sockets::insp_inaddr;
 using irc::sockets::insp_sockaddr;
@@ -122,11 +120,6 @@ void InspIRCd::Cleanup()
        /* Cleanup Server Names */
        for(servernamelist::iterator itr = servernames.begin(); itr != servernames.end(); ++itr)
                delete (*itr);
-
-#ifdef WINDOWS
-       /* WSACleanup */
-       WSACleanup();
-#endif
 }
 
 void InspIRCd::Restart(const std::string &reason)
@@ -172,9 +165,11 @@ void InspIRCd::ResetMaxBans()
 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++)
@@ -182,6 +177,11 @@ void InspIRCd::RehashUsersAndChans()
 
        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);
 
@@ -314,11 +314,16 @@ InspIRCd::InspIRCd(int argc, char** argv)
        memset(&server, 0, sizeof(server));
        memset(&client, 0, sizeof(client));
 
+        SocketEngineFactory* SEF = new SocketEngineFactory();
+       SE = SEF->Create(this);
+       delete SEF;
+
        this->s_signal = 0;
 
        this->unregistered_count = 0;
 
        this->clientlist = new user_hash();
+       this->uuidlist = new user_hash();
        this->chanlist = new chan_hash();
 
        this->Config = new ServerConfig(this);
@@ -459,13 +464,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
                }
        }
 
-
-       /* Because of limitations in kqueue on freebsd, we must fork BEFORE we
-        * initialize the socket engine.
-        */
-       SocketEngineFactory* SEF = new SocketEngineFactory();
-       SE = SEF->Create(this);
-       delete SEF;
+       SE->RecoverFromFork();
 
        this->Modes = new ModeParser(this);
        this->AddServerName(Config->ServerName);
@@ -538,6 +537,31 @@ InspIRCd::InspIRCd(int argc, char** argv)
                FreeConsole();
        }
 #endif
+
+
+       /*
+        * Initialise UID. XXX, we need to read SID from config, and use it instead of 000.
+        * For an explanation as to exactly how this works, and why it works this way, see GetUID().
+        *   -- w00t
+        */
+       int i;
+
+
+       /* 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';
+
        printf("\nInspIRCd is now running!\n");
        Log(DEFAULT,"Startup complete.");