]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
Add IP address conversion utility functions, irc::sockets::aptosa and irc::sockets...
[user/henk/code/inspircd.git] / src / inspircd.cpp
index 8a3c5fd7e78a761c760f62edef35be6f7b0ef017..11ea679e791d839306c3efc0d4f0a3c21973b152 100644 (file)
@@ -2,8 +2,8 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
- * See: http://www.inspircd.org/wiki/index.php/Credits
+ *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
  *
  * This program is free but copyrighted software; see
  *         the file COPYING for details.
@@ -81,7 +81,7 @@ const char* ExitCodes[] =
                "CreateEvent failed" /* 19 */
 };
 
-template<typename T> void DeleteZero(T* n)
+template<typename T> static void DeleteZero(T* n)
 {
        if (n != NULL)
        {
@@ -151,8 +151,6 @@ void InspIRCd::Cleanup()
        /* Close logging */
        this->Logs->CloseLogs();
        DeleteZero(this->Logs);
-
-       delete RehashFinishMutex;
 }
 
 void InspIRCd::Restart(const std::string &reason)
@@ -230,6 +228,8 @@ void InspIRCd::SetSignals()
        signal(SIGHUP, InspIRCd::SetSignal);
        signal(SIGPIPE, SIG_IGN);
        signal(SIGCHLD, SIG_IGN);
+       /* We want E2BIG not a signal! */
+       signal(SIGXFSZ, SIG_IGN);
 #endif
        signal(SIGTERM, InspIRCd::SetSignal);
 }
@@ -317,7 +317,7 @@ void InspIRCd::WritePID(const std::string &filename)
 InspIRCd::InspIRCd(int argc, char** argv)
        : GlobalCulls(this),
 
-        /* Functor initialisation. Note that the ordering here is very important. 
+        /* Functor initialisation. Note that the ordering here is very important.
          *
          * THIS MUST MATCH ORDER OF DECLARATION OF THE HandleWhateverFunc classes
          * within class InspIRCd.
@@ -349,7 +349,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
 #ifdef WIN32
        // Strict, frequent checking of memory on debug builds
        _CrtSetDbgFlag ( _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
-       
+
        // Avoid erroneous frees on early exit
        WindowsIPC = 0;
 #endif
@@ -357,7 +357,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
        FailedPortList pl;
        int do_version = 0, do_nofork = 0, do_debug = 0,
            do_nolog = 0, do_root = 0, do_testsuite = 0;    /* flag variables */
-       char c = 0;
+       int c = 0;
 
        // Initialize so that if we exit before proper initialization they're not deleted
        this->Logs = 0;
@@ -389,19 +389,16 @@ InspIRCd::InspIRCd(int argc, char** argv)
        SE = SEF->Create(this);
        delete SEF;
 
-       ThreadEngineFactory* tef = new ThreadEngineFactory();
-       this->Threads = tef->Create(this);
-       delete tef;
-       this->Mutexes = new MutexFactory(this);
+       this->Threads = new ThreadEngine(this);
 
        /* Default implementation does nothing */
        this->PI = new ProtocolInterface(this);
 
        this->s_signal = 0;
-       
+
        // Create base manager classes early, so nothing breaks
        this->Users = new UserManager(this);
-       
+
        this->Users->unregistered_count = 0;
 
        this->Users->clientlist = new user_hash();
@@ -448,7 +445,8 @@ InspIRCd::InspIRCd(int argc, char** argv)
                { 0, 0, 0, 0 }
        };
 
-       while ((c = getopt_long_only(argc, argv, ":f:", longopts, NULL)) != -1)
+       int index;
+       while ((c = getopt_long_only(argc, argv, ":f:", longopts, &index)) != -1)
        {
                switch (c)
                {
@@ -463,8 +461,11 @@ InspIRCd::InspIRCd(int argc, char** argv)
                        case 0:
                                /* getopt_long_only() set an int variable, just keep going */
                        break;
+                       case '?':
+                               /* Unknown parameter */
                        default:
-                               /* Unknown parameter! DANGER, INTRUDER.... err.... yeah. */
+                               /* Fall through to handle other weird values too */
+                               printf("Unknown parameter '%s'\n", argv[index]);
                                printf("Usage: %s [--nofork] [--nolog] [--debug] [--logfile <filename>]\n\
                                                  [--runasroot] [--version] [--config <config>] [--testsuite]\n", argv[0]);
                                Exit(EXIT_STATUS_ARGV);
@@ -516,7 +517,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
                /* Windows can (and defaults to) hide file extensions, so let's play a bit nice for windows users. */
                std::string txtconf = this->ConfigFileName;
                txtconf.append(".txt");
-               
+
                if (ServerConfig::FileExists(txtconf.c_str()))
                {
                        strlcat(this->ConfigFileName, ".txt", MAXBUF);
@@ -534,7 +535,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
        printf_c("(C) InspIRCd Development Team.\033[0m\n\n");
        printf_c("Developers:\n");
        printf_c("\t\033[1;32mBrain, FrostyCoolSlug, w00t, Om, Special\n");
-       printf_c("\t\033[1;32mpippijn, peavey, aquanight, fez, psychon, dz\033[0m\n\n");
+       printf_c("\t\033[1;32mpeavey, aquanight, psychon, dz, danieldg\033[0m\n\n");
        printf_c("Others:\t\t\t\033[1;32mSee /INFO Output\033[0m\n");
 
        Config->ClearStack();
@@ -623,7 +624,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
        printf("\n");
 
        this->Modules->LoadAll();
-       
+
        /* Just in case no modules were loaded - fix for bug #101 */
        this->BuildISupport();
        InitializeDisabledCommands(Config->DisabledCommands, this);
@@ -641,7 +642,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
        }
 
        printf("\nInspIRCd is now running as '%s'[%s] with %d max open sockets\n", Config->ServerName,Config->GetSID().c_str(), SE->GetMaxFds());
-       
+
 #ifndef WINDOWS
        if (!Config->nofork)
        {
@@ -754,8 +755,6 @@ int InspIRCd::Run()
                Exit(0);
        }
 
-       RehashFinishMutex = Mutexes->CreateMutex();
-
        while (true)
        {
 #ifndef WIN32
@@ -767,8 +766,7 @@ int InspIRCd::Run()
 #endif
 
                /* Check if there is a config thread which has finished executing but has not yet been freed */
-               RehashFinishMutex->Lock();
-               if (this->ConfigThread && this->ConfigThread->GetExitFlag())
+               if (this->ConfigThread && this->ConfigThread->IsDone())
                {
                        /* Rehash has completed */
 
@@ -803,7 +801,6 @@ int InspIRCd::Run()
                        delete ConfigThread;
                        ConfigThread = NULL;
                }
-               RehashFinishMutex->Unlock();
 
                /* time() seems to be a pretty expensive syscall, so avoid calling it too much.
                 * Once per loop iteration is pleanty.
@@ -850,7 +847,7 @@ int InspIRCd::Run()
                                this->stats->LastCPU = ru.ru_utime;
                        }
 #else
-                       WindowsIPC->Check();    
+                       WindowsIPC->Check();
 #endif
                }