]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
Small tidyup
[user/henk/code/inspircd.git] / src / inspircd.cpp
index 21c97a7038e44a75258f5626377575290d200f5c..b7e8ff5ae73dad2e78badbfcd5534f0713a7b443 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
  * See: http://www.inspircd.org/wiki/index.php/Credits
  *
  * This program is free but copyrighted software; see
@@ -82,7 +82,7 @@ void InspIRCd::Cleanup()
        }
 
        /* Close all client sockets, or the new process inherits them */
-       for (std::vector<User*>::const_iterator i = this->local_users.begin(); i != this->local_users.end(); i++)
+       for (std::vector<User*>::const_iterator i = this->Users->local_users.begin(); i != this->Users->local_users.end(); i++)
        {
                (*i)->SetWriteError("Server shutdown");
                (*i)->CloseSocket();
@@ -156,21 +156,21 @@ void InspIRCd::ResetMaxBans()
  */
 void InspIRCd::RehashUsersAndChans()
 {
-       user_hash* old_users = this->clientlist;
-       user_hash* old_uuid  = this->uuidlist;
+       user_hash* old_users = this->Users->clientlist;
+       user_hash* old_uuid  = this->Users->uuidlist;
        chan_hash* old_chans = this->chanlist;
 
-       this->clientlist = new user_hash();
-       this->uuidlist = new user_hash();
+       this->Users->clientlist = new user_hash();
+       this->Users->uuidlist = new user_hash();
        this->chanlist = new chan_hash();
 
        for (user_hash::const_iterator n = old_users->begin(); n != old_users->end(); n++)
-               this->clientlist->insert(*n);
+               this->Users->clientlist->insert(*n);
 
        delete old_users;
 
        for (user_hash::const_iterator n = old_uuid->begin(); n != old_uuid->end(); n++)
-               this->uuidlist->insert(*n);
+               this->Users->uuidlist->insert(*n);
 
        delete old_uuid;
 
@@ -308,11 +308,14 @@ InspIRCd::InspIRCd(int argc, char** argv)
        delete SEF;
 
        this->s_signal = 0;
+       
+       // Create base manager classes early, so nothing breaks
+       this->Users = new UserManager(this);
+       
+       this->Users->unregistered_count = 0;
 
-       this->unregistered_count = 0;
-
-       this->clientlist = new user_hash();
-       this->uuidlist = new user_hash();
+       this->Users->clientlist = new user_hash();
+       this->Users->uuidlist = new user_hash();
        this->chanlist = new chan_hash();
 
        this->Res = NULL;
@@ -471,69 +474,43 @@ InspIRCd::InspIRCd(int argc, char** argv)
         * these files.
         */
        Config->Read(true, NULL, 0);
-       Config->StartDownloads();
-       
-       /* Now the downloads are started, we monitor them for completion.
-        * On completion, we call Read again with pass = 1.
-        * NOTE: We really should add a timeout here
-        */
-       
-       while (Config->Downloading())
-       {
-               SE->DispatchEvents();
-               this->BufferedSocketCull();
-       }
-
-       printf("\n");
-
-       if (Config->FileErrors)
-       {
-               /* One or more file download/access errors, do not
-                * proceed to second pass
-                */
-               for (std::map<std::string, std::istream*>::iterator x = Config->IncludedFiles.begin(); x != Config->IncludedFiles.end(); ++x)
-               {
-                       if (!x->second)
-                               printf("ERROR: Failed to access the file: %s.\n", x->first.c_str());
-               }
-               printf("Initialisation of configuration failed.\n");
-               Exit(EXIT_STATUS_CONFIG);
-       }
-
+       Config->DoDownloads();
        /* We have all the files we can get, initiate pass 1 */
        Config->Read(true, NULL, 1);
 
         this->AddServerName(Config->ServerName);
 
-        /* set up fake client again this time with the correct uid */
-        delete FakeClient;
-        this->FakeClient = new User(this);
-        this->FakeClient->SetFd(FD_MAGIC_NUMBER);
-
         /*
          * Initialise SID/UID.
          * For an explanation as to exactly how this works, and why it works this way, see GetUID().
          *   -- w00t
          */
-        /* Generate SID */
-        size_t sid = 0;
-        if (Config->sid)
+        if (*Config->sid)
         {
-                sid = Config->sid;
-        }
+       }
         else
         {
+               // Generate one
+               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;
 
-                Config->sid = sid;
+               Config->sid[0] = (char)(sid / 100 + 48);
+               Config->sid[1] = (char)(((sid / 10) % 10) + 48);
+               Config->sid[2] = (char)(sid % 10 + 48);
         }
 
         this->InitialiseUID();
 
+        /* set up fake client again this time with the correct uid */
+        delete FakeClient;
+        this->FakeClient = new User(this);
+        this->FakeClient->SetFd(FD_MAGIC_NUMBER);
+
         // Get XLine to do it's thing.
         this->XLines->CheckELines();
         this->XLines->ApplyLines();
@@ -603,8 +580,8 @@ InspIRCd::InspIRCd(int argc, char** argv)
        }
 #endif
 
-       printf("\nInspIRCd is now running!\n");
-       Log(DEFAULT,"Startup complete.");
+       printf("\nInspIRCd is now running as '%s'[%s]\n", Config->ServerName,Config->GetSID().c_str());
+       Log(DEFAULT,"Startup complete as '%s'[%s]", Config->ServerName,Config->GetSID().c_str());
 
        this->WritePID(Config->PID);
 }
@@ -612,16 +589,17 @@ InspIRCd::InspIRCd(int argc, char** argv)
 /* moved to a function, as UID generation can call this also */
 void InspIRCd::InitialiseUID()
 {
-       int i;
-       size_t sid = Config->sid;
+       int i = 3;
 
-       current_uid[0] = sid / 100 + 48;
-       current_uid[1] = ((sid / 10) % 10) + 48;
-       current_uid[2] = sid % 10 + 48;
+       current_uid[0] = Config->sid[0];
+       current_uid[1] = Config->sid[1];
+       current_uid[2] = Config->sid[2];
 
        /* Initialise UID */
        for(i = 3; i < UUID_LENGTH - 1; i++)
                current_uid[i] = 'A';
+
+       current_uid[UUID_LENGTH] = '\0';
 }
 
 int InspIRCd::Run()
@@ -651,7 +629,7 @@ int InspIRCd::Run()
                {
                        if (TIME < OLDTIME)
                        {
-                               WriteOpers("*** \002EH?!\002 -- Time is flowing BACKWARDS in this dimension! Clock drifted backwards %d secs.",abs(OLDTIME-TIME));
+                               SNO->WriteToSnoMask('A', "\002EH?!\002 -- Time is flowing BACKWARDS in this dimension! Clock drifted backwards %d secs.",abs(OLDTIME-TIME));
                        }
 
                        if ((TIME % 3600) == 0)
@@ -666,7 +644,7 @@ int InspIRCd::Run()
                        if ((TIME % 5) == 0)
                        {
                                FOREACH_MOD_I(this,I_OnBackgroundTimer,OnBackgroundTimer(TIME));
-                               Timers->TickMissedTimers(TIME);
+                               SNO->FlushSnotices();
                        }
 #ifndef WIN32
                        /* Same change as in cmd_stats.cpp, use RUSAGE_SELF rather than '0' -- Om */
@@ -676,16 +654,7 @@ int InspIRCd::Run()
                                this->stats->LastCPU = ru.ru_utime;
                        }
 #else
-                       WindowsIPC->Check();
-       
-                       if(Config->nofork)
-                       {
-                               uptime = Time() - startup_time;
-                               stime = gmtime(&uptime);
-                               snprintf(window_title, 100, "InspIRCd - %u clients, %u accepted connections - Up %u days, %.2u:%.2u:%.2u",
-                                       LocalUserCount(), stats->statsAccept, stime->tm_yday, stime->tm_hour, stime->tm_min, stime->tm_sec);
-                               SetConsoleTitle(window_title);
-                       }
+                       WindowsIPC->Check();    
 #endif
                }
 
@@ -698,7 +667,7 @@ int InspIRCd::Run()
                 */
                this->SE->DispatchEvents();
 
-               /* if any users was quit, take them out */
+               /* if any users were quit, take them out */
                this->GlobalCulls.Apply();
 
                /* If any inspsockets closed, remove them */
@@ -718,6 +687,7 @@ void InspIRCd::BufferedSocketCull()
 {
        for (std::map<BufferedSocket*,BufferedSocket*>::iterator x = SocketCull.begin(); x != SocketCull.end(); ++x)
        {
+               Log(DEBUG,"Cull socket");
                SE->DelFd(x->second);
                x->second->Close();
                delete x->second;
@@ -771,24 +741,6 @@ int InspIRCd::SetTimeDelta(int delta)
        return old;
 }
 
-void InspIRCd::AddLocalClone(User* user)
-{
-       clonemap::iterator x = local_clones.find(user->GetIPString());
-       if (x != local_clones.end())
-               x->second++;
-       else
-               local_clones[user->GetIPString()] = 1;
-}
-
-void InspIRCd::AddGlobalClone(User* user)
-{
-       clonemap::iterator y = global_clones.find(user->GetIPString());
-       if (y != global_clones.end())
-               y->second++;
-       else
-               global_clones[user->GetIPString()] = 1;
-}
-
 int InspIRCd::GetTimeDelta()
 {
        return time_delta;