+bool Server::PublishFeature(const std::string &FeatureName, Module* Mod)
+{
+ if (Features.find(FeatureName) == Features.end())
+ {
+ Features[FeatureName] = Mod;
+ return true;
+ }
+ return false;
+}
+
+bool Server::UnpublishFeature(const std::string &FeatureName)
+{
+ featurelist::iterator iter = Features.find(FeatureName);
+
+ if (iter == Features.end())
+ return false;
+
+ Features.erase(iter);
+ return true;
+}
+
+Module* Server::FindFeature(const std::string &FeatureName)
+{
+ featurelist::iterator iter = Features.find(FeatureName);
+
+ if (iter == Features.end())
+ return NULL;
+
+ return iter->second;
+}
+
+const std::string& Server::GetModuleName(Module* m)
+{
+ static std::string nothing = ""; /* Prevent compiler warning */
+ for (int i = 0; i <= MODCOUNT; i++)
+ {
+ if (modules[i] == m)
+ {
+ return Config->module_names[i];
+ }
+ }
+ return nothing; /* As above */
+}
+