]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
core_dns Add typedef for request id, change it to uint16_t
[user/henk/code/inspircd.git] / src / configreader.cpp
index af8a15f43defe4618c4948b6b76d455da4f693da..d52f3de13fdc3f03690947555f0f4a6d92b6337e 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)
 {
        RawLog = HideBans = HideSplits = UndernetMsgPrefix = false;
        WildcardIPv6 = InvBypassModes = true;
@@ -43,6 +66,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;
@@ -393,17 +421,7 @@ 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);
@@ -707,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)