]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
Convert WriteNumeric() calls to pass the parameters of the numeric as method parameters
[user/henk/code/inspircd.git] / src / configreader.cpp
index 0ec53c482d8d4dbc21b59510cb2ed2cf5d521315..cec4be3d3d068a93041f6755d65dbedcee6443e0 100644 (file)
 #include "configparser.h"
 #include <iostream>
 
+ServerLimits::ServerLimits(ConfigTag* tag)
+       : NickMax(tag->getInt("maxnick", 32))
+       , ChanMax(tag->getInt("maxchan", 64))
+       , MaxModes(tag->getInt("maxmodes", 20))
+       , IdentMax(tag->getInt("maxident", 11))
+       , MaxQuit(tag->getInt("maxquit", 255))
+       , MaxTopic(tag->getInt("maxtopic", 307))
+       , MaxKick(tag->getInt("maxkick", 255))
+       , MaxGecos(tag->getInt("maxgecos", 128))
+       , MaxAway(tag->getInt("maxaway", 200))
+       , MaxLine(tag->getInt("maxline", 512))
+       , MaxHost(tag->getInt("maxhost", 64))
+{
+}
+
+static ConfigTag* CreateEmptyTag()
+{
+       std::vector<KeyVal>* items;
+       return ConfigTag::create("empty", "<auto>", 0, items);
+}
+
 ServerConfig::ServerConfig()
+       : EmptyTag(CreateEmptyTag())
+       , Limits(EmptyTag)
+       , NoSnoticeStack(false)
 {
-       RawLog = HideBans = HideSplits = UndernetMsgPrefix = false;
-       WildcardIPv6 = InvBypassModes = true;
+       RawLog = HideBans = HideSplits = false;
+       WildcardIPv6 = true;
        dns_timeout = 5;
        MaxTargets = 20;
        NetBufferSize = 10240;
@@ -43,6 +67,11 @@ ServerConfig::ServerConfig()
        c_ipv6_range = 128;
 }
 
+ServerConfig::~ServerConfig()
+{
+       delete EmptyTag;
+}
+
 static void ValidHost(const std::string& p, const std::string& msg)
 {
        int num_dots = 0;
@@ -384,7 +413,6 @@ void ServerConfig::Fill()
        GenericOper = security->getBool("genericoper");
        SyntaxHints = options->getBool("syntaxhints");
        CycleHostsFromUser = options->getBool("cyclehostsfromuser");
-       UndernetMsgPrefix = options->getBool("ircumsgprefix");
        FullHostInTopic = options->getBool("hostintopic");
        MaxTargets = security->getInt("maxtargets", 20, 1, 31);
        DefaultModes = options->getString("defaultmodes", "not");
@@ -393,22 +421,11 @@ void ServerConfig::Fill()
        OperMaxChans = ConfValue("channels")->getInt("opers");
        c_ipv4_range = ConfValue("cidr")->getInt("ipv4clone", 32);
        c_ipv6_range = ConfValue("cidr")->getInt("ipv6clone", 128);
-       Limits.NickMax = ConfValue("limits")->getInt("maxnick", 32);
-       Limits.ChanMax = ConfValue("limits")->getInt("maxchan", 64);
-       Limits.MaxModes = ConfValue("limits")->getInt("maxmodes", 20);
-       Limits.IdentMax = ConfValue("limits")->getInt("maxident", 11);
-       Limits.MaxHost = ConfValue("limits")->getInt("maxhost", 64);
-       Limits.MaxQuit = ConfValue("limits")->getInt("maxquit", 255);
-       Limits.MaxTopic = ConfValue("limits")->getInt("maxtopic", 307);
-       Limits.MaxKick = ConfValue("limits")->getInt("maxkick", 255);
-       Limits.MaxGecos = ConfValue("limits")->getInt("maxgecos", 128);
-       Limits.MaxAway = ConfValue("limits")->getInt("maxaway", 200);
-       Limits.MaxLine = ConfValue("limits")->getInt("maxline", 512);
+       Limits = ServerLimits(ConfValue("limits"));
        Paths.Config = ConfValue("path")->getString("configdir", INSPIRCD_CONFIG_PATH);
        Paths.Data = ConfValue("path")->getString("datadir", INSPIRCD_DATA_PATH);
        Paths.Log = ConfValue("path")->getString("logdir", INSPIRCD_LOG_PATH);
        Paths.Module = ConfValue("path")->getString("moduledir", INSPIRCD_MODULE_PATH);
-       InvBypassModes = options->getBool("invitebypassmodes", true);
        NoSnoticeStack = options->getBool("nosnoticestack", false);
 
        if (Network.find(' ') != std::string::npos)
@@ -457,11 +474,6 @@ void ServerConfig::Fill()
                DisabledCModes[*p - 'A'] = 1;
        }
 
-       memset(HideModeLists, 0, sizeof(HideModeLists));
-       modes = ConfValue("security")->getString("hidemodes");
-       for (std::string::const_iterator p = modes.begin(); p != modes.end(); ++p)
-               HideModeLists[(unsigned char) *p] = true;
-
        std::string v = security->getString("announceinvites");
 
        if (v == "ops")
@@ -562,7 +574,7 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid)
                 errstr << "Possible configuration error: you have not defined any <bind> blocks." << std::endl
                         << "You will need to do this if you want clients to be able to connect!" << std::endl;
 
-       if (old)
+       if (old && valid)
        {
                // On first run, ports are bound later on
                FailedPortList pl;
@@ -614,11 +626,11 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid)
                ConfigTag *tag = (*it)->config;
                // Make sure our connection class allows motd colors
                if(!tag->getBool("allowmotdcolors"))
-                     continue;
+                       continue;
 
                ConfigFileCache::iterator file = this->Files.find(tag->getString("motd", "motd"));
                if (file != this->Files.end())
-                     InspIRCd::ProcessColors(file->second);
+                       InspIRCd::ProcessColors(file->second);
        }
 
        /* No old configuration -> initial boot, nothing more to do here */
@@ -657,6 +669,7 @@ void ServerConfig::ApplyModules(User* user)
                std::string name;
                if (tag->readString("name", name))
                {
+                       name = ModuleManager::ExpandModName(name);
                        // if this module is already loaded, the erase will succeed, so we need do nothing
                        // otherwise, we need to add the module (which will be done later)
                        if (removed_modules.erase(name) == 0)
@@ -675,16 +688,16 @@ void ServerConfig::ApplyModules(User* user)
                        ServerInstance->SNO->WriteGlobalSno('a', "*** REHASH UNLOADED MODULE: %s", modname.c_str());
 
                        if (user)
-                               user->WriteNumeric(RPL_UNLOADEDMODULE, "%s :Module %s successfully unloaded.", modname.c_str(), modname.c_str());
+                               user->WriteNumeric(RPL_UNLOADEDMODULE, modname, InspIRCd::Format("Module %s successfully unloaded.", modname.c_str()));
                        else
                                ServerInstance->SNO->WriteGlobalSno('a', "Module %s successfully unloaded.", modname.c_str());
                }
                else
                {
                        if (user)
-                               user->WriteNumeric(ERR_CANTUNLOADMODULE, "%s :Failed to unload module %s: %s", modname.c_str(), modname.c_str(), ServerInstance->Modules->LastError().c_str());
+                               user->WriteNumeric(ERR_CANTUNLOADMODULE, modname, InspIRCd::Format("Failed to unload module %s: %s", modname.c_str(), ServerInstance->Modules->LastError().c_str()));
                        else
-                                ServerInstance->SNO->WriteGlobalSno('a', "Failed to unload module %s: %s", modname.c_str(), ServerInstance->Modules->LastError().c_str());
+                               ServerInstance->SNO->WriteGlobalSno('a', "Failed to unload module %s: %s", modname.c_str(), ServerInstance->Modules->LastError().c_str());
                }
        }
 
@@ -694,14 +707,14 @@ void ServerConfig::ApplyModules(User* user)
                {
                        ServerInstance->SNO->WriteGlobalSno('a', "*** REHASH LOADED MODULE: %s",adding->c_str());
                        if (user)
-                               user->WriteNumeric(RPL_LOADEDMODULE, "%s :Module %s successfully loaded.", adding->c_str(), adding->c_str());
+                               user->WriteNumeric(RPL_LOADEDMODULE, *adding, InspIRCd::Format("Module %s successfully loaded.", adding->c_str()));
                        else
                                ServerInstance->SNO->WriteGlobalSno('a', "Module %s successfully loaded.", adding->c_str());
                }
                else
                {
                        if (user)
-                               user->WriteNumeric(ERR_CANTLOADMODULE, "%s :Failed to load module %s: %s", adding->c_str(), adding->c_str(), ServerInstance->Modules->LastError().c_str());
+                               user->WriteNumeric(ERR_CANTLOADMODULE, *adding, InspIRCd::Format("Failed to load module %s: %s", adding->c_str(), ServerInstance->Modules->LastError().c_str()));
                        else
                                ServerInstance->SNO->WriteGlobalSno('a', "Failed to load module %s: %s", adding->c_str(), ServerInstance->Modules->LastError().c_str());
                }
@@ -712,7 +725,7 @@ ConfigTag* ServerConfig::ConfValue(const std::string &tag)
 {
        ConfigTagList found = config_data.equal_range(tag);
        if (found.first == found.second)
-               return NULL;
+               return EmptyTag;
        ConfigTag* rv = found.first->second;
        found.first++;
        if (found.first != found.second)
@@ -771,6 +784,7 @@ void ConfigReaderThread::Finish()
                 * XXX: The order of these is IMPORTANT, do not reorder them without testing
                 * thoroughly!!!
                 */
+               ServerInstance->Users.RehashCloneCounts();
                ServerInstance->XLines->CheckELines();
                ServerInstance->XLines->ApplyLines();
                ChanModeReference ban(NULL, "ban");
@@ -783,6 +797,9 @@ void ConfigReaderThread::Finish()
                for (ModuleManager::ModuleMap::const_iterator i = mods.begin(); i != mods.end(); ++i)
                        i->second->ReadConfig(status);
 
+               // The description of this server may have changed - update it for WHOIS etc.
+               ServerInstance->FakeClient->server->description = Config->ServerDesc;
+
                ServerInstance->ISupport.Build();
 
                ServerInstance->Logs->CloseLogs();