]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
Allow Channel::WriteNotice send to other servers and status ranks.
[user/henk/code/inspircd.git] / src / configreader.cpp
index 00880cfff80d88babd47c69d635f644a7d179704..782a80080aad8e9e83cc4e741ce557c30733ad01 100644 (file)
@@ -74,19 +74,29 @@ ServerConfig::~ServerConfig()
 
 static void ReadXLine(ServerConfig* conf, const std::string& tag, const std::string& key, XLineFactory* make)
 {
+       insp::flat_set<std::string> configlines;
+
        ConfigTagList tags = conf->ConfTags(tag);
        for(ConfigIter i = tags.first; i != tags.second; ++i)
        {
                ConfigTag* ctag = i->second;
-               std::string mask;
-               if (!ctag->readString(key, mask))
-                       throw CoreException("<"+tag+":"+key+"> missing at " + ctag->getTagLocation());
-               std::string reason = ctag->getString("reason", "<Config>");
-               XLine* xl = make->Generate(ServerInstance->Time(), 0, "<Config>", reason, mask);
+
+               const std::string mask = ctag->getString(key);
+               if (mask.empty())
+                       throw CoreException("<" + tag + ":" + key + "> missing at " + ctag->getTagLocation());
+
+               const std::string reason = ctag->getString("reason");
+               if (reason.empty())
+                       throw CoreException("<" + tag + ":reason> missing at " + ctag->getTagLocation());
+
+               XLine* xl = make->Generate(ServerInstance->Time(), 0, ServerInstance->Config->ServerName, reason, mask);
                xl->from_config = true;
+               configlines.insert(xl->Displayable());
                if (!ServerInstance->XLines->AddLine(xl, NULL))
                        delete xl;
        }
+
+       ServerInstance->XLines->ExpireRemovedConfigLines(make->GetType(), configlines);
 }
 
 typedef std::map<std::string, ConfigTag*> LocalIndex;
@@ -405,7 +415,6 @@ void ServerConfig::Fill()
                        SocketEngine::Close(socktest);
        }
 
-       ServerInstance->XLines->ClearConfigLines();
        ReadXLine(this, "badip", "ipmask", ServerInstance->XLines->GetFactory("Z"));
        ReadXLine(this, "badnick", "nick", ServerInstance->XLines->GetFactory("Q"));
        ReadXLine(this, "badhost", "host", ServerInstance->XLines->GetFactory("K"));