summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2013-04-11 00:08:28 -0500
committerAdam <Adam@anope.org>2013-04-11 00:08:28 -0500
commit4f9b7874d6b3a41939ecc2e872ec08d03af7b5f1 (patch)
tree43162205d31b277c9ff12ee28b7e3a60d6382316
parent207c46c871e85b55ae66acc456c6bc412c0c79f9 (diff)
Pass new config and the new config reader to the OnReload event, aswell as call it on module load on modules that hook to it
-rw-r--r--include/config.h16
-rw-r--r--include/modules.h10
-rw-r--r--modules/bs_autoassign.cpp7
-rw-r--r--modules/commands/cs_access.cpp13
-rw-r--r--modules/commands/cs_entrymsg.cpp7
-rw-r--r--modules/commands/cs_fantasy_stats.cpp8
-rw-r--r--modules/commands/cs_fantasy_top.cpp8
-rw-r--r--modules/commands/cs_flags.cpp11
-rw-r--r--modules/commands/cs_seen.cpp9
-rw-r--r--modules/commands/cs_set.cpp7
-rw-r--r--modules/commands/cs_set_misc.cpp15
-rw-r--r--modules/commands/cs_xop.cpp17
-rw-r--r--modules/commands/hs_request.cpp11
-rw-r--r--modules/commands/ns_set.cpp7
-rw-r--r--modules/commands/ns_set_misc.cpp15
-rw-r--r--modules/commands/os_config.cpp2
-rw-r--r--modules/commands/os_defcon.cpp39
-rw-r--r--modules/commands/os_dns.cpp17
-rw-r--r--modules/commands/os_logsearch.cpp8
-rw-r--r--modules/commands/os_reload.cpp13
-rw-r--r--modules/database/db_flatfile.cpp9
-rw-r--r--modules/database/db_plain.cpp14
-rw-r--r--modules/database/db_sql.cpp11
-rw-r--r--modules/database/db_sql_live.cpp9
-rw-r--r--modules/extra/m_chanstats.cpp14
-rw-r--r--modules/extra/m_dns.cpp21
-rw-r--r--modules/extra/m_httpd.cpp21
-rw-r--r--modules/extra/m_ldap.cpp21
-rw-r--r--modules/extra/m_ldap_authentication.cpp23
-rw-r--r--modules/extra/m_ldap_oper.cpp16
-rw-r--r--modules/extra/m_mysql.cpp23
-rw-r--r--modules/extra/m_proxyscan.cpp39
-rw-r--r--modules/extra/m_sql_authentication.cpp12
-rw-r--r--modules/extra/m_sql_oper.cpp10
-rw-r--r--modules/extra/m_sqlite.cpp15
-rw-r--r--modules/extra/m_ssl.cpp14
-rw-r--r--modules/extra/m_xmlrpc.cpp12
-rw-r--r--modules/m_dnsbl.cpp22
-rw-r--r--modules/m_helpchan.cpp9
-rw-r--r--modules/m_rewrite.cpp18
-rw-r--r--modules/ns_maxemail.cpp8
-rw-r--r--src/config.cpp3
-rw-r--r--src/configreader.cpp18
-rw-r--r--src/init.cpp8
-rw-r--r--src/modulemanager.cpp18
45 files changed, 253 insertions, 375 deletions
diff --git a/include/config.h b/include/config.h
index 36a4836c8..901fe0138 100644
--- a/include/config.h
+++ b/include/config.h
@@ -707,11 +707,12 @@ class ConfigException : public CoreException
virtual ~ConfigException() throw() { }
};
-#define CONF_NO_ERROR 0x000000
-#define CONF_NOT_A_NUMBER 0x000010
-#define CONF_INT_NEGATIVE 0x000080
-#define CONF_VALUE_NOT_FOUND 0x000100
-#define CONF_FILE_NOT_FOUND 0x000200
+enum
+{
+ CONF_NO_ERROR,
+ CONF_INT_NEGATIVE = 1 << 1,
+ CONF_VALUE_NOT_FOUND = 1 << 2
+};
/** Allows reading of values from configuration files
* This class allows a module to read from either the main configuration file (services.conf) or from
@@ -721,6 +722,7 @@ class ConfigException : public CoreException
*/
class CoreExport ConfigReader
{
+ ServerConfig *conf;
protected:
/** True if an error occured reading the config file
*/
@@ -737,6 +739,10 @@ class CoreExport ConfigReader
* This constructor initialises the ConfigReader class to read a user-specified config file
*/
ConfigReader(const Anope::string &);
+ /** Overloaded constructor
+ * This constructor initialises the ConfigReader class to use a user sepcific ServerConfig object,
+ */
+ ConfigReader(ServerConfig *);
/** Default destructor.
* This method destroys the ConfigReader class.
*/
diff --git a/include/modules.h b/include/modules.h
index ae7ceb651..20d27b0ab 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -112,6 +112,8 @@ if (true) \
else \
static_cast<void>(0)
+class ConfigReader;
+
/** Possible return types from events.
*/
enum EventReturn
@@ -124,7 +126,6 @@ enum EventReturn
enum ModuleReturn
{
MOD_ERR_OK,
- MOD_ERR_MEMORY,
MOD_ERR_PARAMS,
MOD_ERR_EXISTS,
MOD_ERR_NOEXIST,
@@ -285,9 +286,12 @@ class CoreExport Module : public Extensible
*/
virtual void OnUserKicked(Channel *c, User *target, MessageSource &source, const Anope::string &kickmsg) { }
- /** Called when Services' configuration has been loaded.
+ /** Called when Services' configuration is being (re)loaded.
+ * @param conf The config that is being built now and will replace the global Config object
+ * @param reader A config reader for conf
+ * @throws A ConfigException to abort the config (re)loading process.
*/
- virtual void OnReload() { }
+ virtual void OnReload(ServerConfig *conf, ConfigReader &reader) { }
/** Called before a bot is assigned to a channel.
* @param sender The user assigning the bot
diff --git a/modules/bs_autoassign.cpp b/modules/bs_autoassign.cpp
index 13bde5ff5..134904925 100644
--- a/modules/bs_autoassign.cpp
+++ b/modules/bs_autoassign.cpp
@@ -19,8 +19,6 @@ class BSAutoAssign : public Module
Implementation i[] = { I_OnChanRegistered, I_OnReload };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
void OnChanRegistered(ChannelInfo *ci) anope_override
@@ -38,10 +36,9 @@ class BSAutoAssign : public Module
bi->Assign(NULL, ci);
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- this->bot = config.ReadValue("bs_autoassign", "bot", "", 0);
+ this->bot = reader.ReadValue("bs_autoassign", "bot", "", 0);
}
};
diff --git a/modules/commands/cs_access.cpp b/modules/commands/cs_access.cpp
index 10a4c9885..90e17eeed 100644
--- a/modules/commands/cs_access.cpp
+++ b/modules/commands/cs_access.cpp
@@ -790,24 +790,21 @@ class CSAccess : public Module
Implementation i[] = { I_OnReload, I_OnCreateChan, I_OnGroupCheckPriv };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
defaultLevels.clear();
- ConfigReader config;
- for (int i = 0; i < config.Enumerate("privilege"); ++i)
+ for (int i = 0; i < reader.Enumerate("privilege"); ++i)
{
- const Anope::string &pname = config.ReadValue("privilege", "name", "", i);
+ const Anope::string &pname = reader.ReadValue("privilege", "name", "", i);
Privilege *p = PrivilegeManager::FindPrivilege(pname);
if (p == NULL)
continue;
- const Anope::string &value = config.ReadValue("privilege", "level", "", i);
+ const Anope::string &value = reader.ReadValue("privilege", "level", "", i);
if (value.empty())
continue;
else if (value.equals_ci("founder"))
@@ -815,7 +812,7 @@ class CSAccess : public Module
else if (value.equals_ci("disabled"))
defaultLevels[p->name] = ACCESS_INVALID;
else
- defaultLevels[p->name] = config.ReadInteger("privilege", "level", i, false);
+ defaultLevels[p->name] = reader.ReadInteger("privilege", "level", i, false);
}
}
diff --git a/modules/commands/cs_entrymsg.cpp b/modules/commands/cs_entrymsg.cpp
index bb82e9b24..961cf1895 100644
--- a/modules/commands/cs_entrymsg.cpp
+++ b/modules/commands/cs_entrymsg.cpp
@@ -278,8 +278,6 @@ class CSEntryMessage : public Module
Implementation i[] = { I_OnReload, I_OnJoinChannel };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
void OnJoinChannel(User *u, Channel *c) anope_override
@@ -294,10 +292,9 @@ class CSEntryMessage : public Module
}
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- MaxEntries = config.ReadInteger("cs_entrymsg", "maxentries", "5", 0, true);
+ MaxEntries = reader.ReadInteger("cs_entrymsg", "maxentries", "5", 0, true);
}
};
diff --git a/modules/commands/cs_fantasy_stats.cpp b/modules/commands/cs_fantasy_stats.cpp
index 591da28e9..b1b878c63 100644
--- a/modules/commands/cs_fantasy_stats.cpp
+++ b/modules/commands/cs_fantasy_stats.cpp
@@ -75,14 +75,12 @@ class CSStats : public Module
Implementation i[] = { I_OnReload };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- prefix = config.ReadValue("chanstats", "prefix", "anope_", 0);
- Anope::string engine = config.ReadValue("chanstats", "engine", "", 0);
+ prefix = reader.ReadValue("chanstats", "prefix", "anope_", 0);
+ Anope::string engine = reader.ReadValue("chanstats", "engine", "", 0);
this->sql = ServiceReference<SQL::Provider>("SQL::Provider", engine);
}
diff --git a/modules/commands/cs_fantasy_top.cpp b/modules/commands/cs_fantasy_top.cpp
index 739f21f41..4bad46e51 100644
--- a/modules/commands/cs_fantasy_top.cpp
+++ b/modules/commands/cs_fantasy_top.cpp
@@ -102,14 +102,12 @@ class CSTop : public Module
Implementation i[] = { I_OnReload };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- prefix = config.ReadValue("chanstats", "prefix", "anope_", 0);
- Anope::string engine = config.ReadValue("chanstats", "engine", "", 0);
+ prefix = reader.ReadValue("chanstats", "prefix", "anope_", 0);
+ Anope::string engine = reader.ReadValue("chanstats", "engine", "", 0);
this->sql = ServiceReference<SQL::Provider>("SQL::Provider", engine);
}
diff --git a/modules/commands/cs_flags.cpp b/modules/commands/cs_flags.cpp
index bdff5a6e5..cd1a14e83 100644
--- a/modules/commands/cs_flags.cpp
+++ b/modules/commands/cs_flags.cpp
@@ -394,24 +394,21 @@ class CSFlags : public Module
Implementation i[] = { I_OnReload };
ModuleManager::Attach(i, this, 1);
-
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
defaultFlags.clear();
- for (int i = 0; i < config.Enumerate("privilege"); ++i)
+ for (int i = 0; i < reader.Enumerate("privilege"); ++i)
{
- const Anope::string &pname = config.ReadValue("privilege", "name", "", i);
+ const Anope::string &pname = reader.ReadValue("privilege", "name", "", i);
Privilege *p = PrivilegeManager::FindPrivilege(pname);
if (p == NULL)
continue;
- const Anope::string &value = config.ReadValue("privilege", "flag", "", i);
+ const Anope::string &value = reader.ReadValue("privilege", "flag", "", i);
if (value.empty())
continue;
diff --git a/modules/commands/cs_seen.cpp b/modules/commands/cs_seen.cpp
index 7c88c89b8..2d45f9a15 100644
--- a/modules/commands/cs_seen.cpp
+++ b/modules/commands/cs_seen.cpp
@@ -335,15 +335,12 @@ class CSSeen : public Module
I_OnPartChannel,
I_OnUserKicked };
ModuleManager::Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
-
- OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- purgetime = Anope::DoTime(config.ReadValue("cs_seen", "purgetime", "30d", 0));
- expiretimeout = Anope::DoTime(config.ReadValue("cs_seen", "expiretimeout", "1d", 0));
+ purgetime = Anope::DoTime(reader.ReadValue("cs_seen", "purgetime", "30d", 0));
+ expiretimeout = Anope::DoTime(reader.ReadValue("cs_seen", "expiretimeout", "1d", 0));
if (purger.GetSecs() != expiretimeout)
purger.SetSecs(expiretimeout);
diff --git a/modules/commands/cs_set.cpp b/modules/commands/cs_set.cpp
index 03aa6c59c..7b6df8a9b 100644
--- a/modules/commands/cs_set.cpp
+++ b/modules/commands/cs_set.cpp
@@ -1164,14 +1164,11 @@ class CSSet : public Module
Implementation i[] = { I_OnReload, I_OnChanRegistered, I_OnCheckKick, I_OnDelChan };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- CSDefChanstats = config.ReadFlag("chanstats", "CSDefChanstats", "0", 0);
+ CSDefChanstats = reader.ReadFlag("chanstats", "CSDefChanstats", "0", 0);
}
void OnChanRegistered(ChannelInfo *ci) anope_override
diff --git a/modules/commands/cs_set_misc.cpp b/modules/commands/cs_set_misc.cpp
index 93897f332..e74587be1 100644
--- a/modules/commands/cs_set_misc.cpp
+++ b/modules/commands/cs_set_misc.cpp
@@ -138,26 +138,21 @@ class CSSetMisc : public Module
CSSetMisc(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR),
csmiscdata_type("CSMiscData", CSMiscData::Unserialize), commandcssetmisc(this)
{
-
Implementation i[] = { I_OnReload, I_OnChanInfo };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
- void OnReload()
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
-
descriptions.clear();
- for (int i = 0; i < config.Enumerate("command"); ++i)
+ for (int i = 0; i < reader.Enumerate("command"); ++i)
{
- if (config.ReadValue("command", "command", "", i) != "chanserv/set/misc")
+ if (reader.ReadValue("command", "command", "", i) != "chanserv/set/misc")
continue;
- Anope::string cname = config.ReadValue("command", "name", "", i);
- Anope::string desc = config.ReadValue("command", "misc_description", "", i);
+ Anope::string cname = reader.ReadValue("command", "name", "", i);
+ Anope::string desc = reader.ReadValue("command", "misc_description", "", i);
if (cname.empty() || desc.empty())
continue;
diff --git a/modules/commands/cs_xop.cpp b/modules/commands/cs_xop.cpp
index 1cfa033e2..32253770f 100644
--- a/modules/commands/cs_xop.cpp
+++ b/modules/commands/cs_xop.cpp
@@ -543,36 +543,33 @@ class CSXOP : public Module
accessprovider(this), commandcsxop(this)
{
this->SetPermanent(true);
-
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
order.clear();
permissions.clear();
- ConfigReader config;
- for (int i = 0; i < config.Enumerate("privilege"); ++i)
+ for (int i = 0; i < reader.Enumerate("privilege"); ++i)
{
- const Anope::string &pname = config.ReadValue("privilege", "name", "", i);
+ const Anope::string &pname = reader.ReadValue("privilege", "name", "", i);
Privilege *p = PrivilegeManager::FindPrivilege(pname);
if (p == NULL)
continue;
- const Anope::string &xop = config.ReadValue("privilege", "xop", "", i);
+ const Anope::string &xop = reader.ReadValue("privilege", "xop", "", i);
if (xop.empty())
continue;
permissions[xop].push_back(pname);
}
- for (int i = 0; i < config.Enumerate("command"); ++i)
+ for (int i = 0; i < reader.Enumerate("command"); ++i)
{
- const Anope::string &cname = config.ReadValue("command", "name", "", i),
- &cserv = config.ReadValue("command", "command", "", i);
+ const Anope::string &cname = reader.ReadValue("command", "name", "", i),
+ &cserv = reader.ReadValue("command", "command", "", i);
if (cname.empty() || cserv != "chanserv/xop")
continue;
diff --git a/modules/commands/hs_request.cpp b/modules/commands/hs_request.cpp
index 1867dbb77..8b551f0ed 100644
--- a/modules/commands/hs_request.cpp
+++ b/modules/commands/hs_request.cpp
@@ -357,8 +357,6 @@ class HSRequest : public Module
Implementation i[] = { I_OnReload };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
~HSRequest()
@@ -370,13 +368,10 @@ class HSRequest : public Module
}
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- HSRequestMemoUser = config.ReadFlag("hs_request", "memouser", "no", 0);
- HSRequestMemoOper = config.ReadFlag("hs_request", "memooper", "no", 0);
-
- Log(LOG_DEBUG) << "[hs_request] Set config vars: MemoUser=" << HSRequestMemoUser << " MemoOper=" << HSRequestMemoOper;
+ HSRequestMemoUser = reader.ReadFlag("hs_request", "memouser", "no", 0);
+ HSRequestMemoOper = reader.ReadFlag("hs_request", "memooper", "no", 0);
}
};
diff --git a/modules/commands/ns_set.cpp b/modules/commands/ns_set.cpp
index f8b2b7155..793b99fd1 100644
--- a/modules/commands/ns_set.cpp
+++ b/modules/commands/ns_set.cpp
@@ -1404,14 +1404,11 @@ class NSSet : public Module
Implementation i[] = { I_OnReload, I_OnNickRegister, I_OnPreCommand };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- NSDefChanstats = config.ReadFlag("chanstats", "NSDefChanstats", "0", 0);
+ NSDefChanstats = reader.ReadFlag("chanstats", "NSDefChanstats", "0", 0);
}
void OnNickRegister(NickAlias *na) anope_override
diff --git a/modules/commands/ns_set_misc.cpp b/modules/commands/ns_set_misc.cpp
index 35210abd0..5ee77a938 100644
--- a/modules/commands/ns_set_misc.cpp
+++ b/modules/commands/ns_set_misc.cpp
@@ -157,26 +157,21 @@ class NSSetMisc : public Module
NSSetMisc(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR),
nsmiscdata_type("NSMiscData", NSMiscData::Unserialize), commandnssetmisc(this), commandnssasetmisc(this)
{
-
Implementation i[] = { I_OnReload, I_OnNickInfo };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
- void OnReload()
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
-
descriptions.clear();
- for (int i = 0; i < config.Enumerate("command"); ++i)
+ for (int i = 0; i < reader.Enumerate("command"); ++i)
{
- if (config.ReadValue("command", "command", "", i) != "nickserv/set/misc" && config.ReadValue("command", "command", "", i) != "nickserv/saset/misc")
+ if (reader.ReadValue("command", "command", "", i) != "nickserv/set/misc" && reader.ReadValue("command", "command", "", i) != "nickserv/saset/misc")
continue;
- Anope::string cname = config.ReadValue("command", "name", "", i);
- Anope::string desc = config.ReadValue("command", "misc_description", "", i);
+ Anope::string cname = reader.ReadValue("command", "name", "", i);
+ Anope::string desc = reader.ReadValue("command", "misc_description", "", i);
if (cname.empty() || desc.empty())
continue;
diff --git a/modules/commands/os_config.cpp b/modules/commands/os_config.cpp
index 540bcc3e7..0517f28d7 100644
--- a/modules/commands/os_config.cpp
+++ b/modules/commands/os_config.cpp
@@ -64,7 +64,7 @@ class CommandOSConfig : public Command
bool allow_wild = dt & DT_ALLOW_WILD;
dt &= ~(DT_ALLOW_NEWLINE | DT_ALLOW_WILD);
- /* Yay for *massive* copypaste from config.cpp */
+ /* Yay for *massive* copypaste from reader.cpp */
switch (dt)
{
case DT_NOSPACES:
diff --git a/modules/commands/os_defcon.cpp b/modules/commands/os_defcon.cpp
index 53148c6a8..dd45856fb 100644
--- a/modules/commands/os_defcon.cpp
+++ b/modules/commands/os_defcon.cpp
@@ -334,36 +334,25 @@ class OSDefcon : public Module
Implementation i[] = { I_OnReload, I_OnChannelModeSet, I_OnChannelModeUnset, I_OnPreCommand, I_OnUserConnect, I_OnChannelModeAdd, I_OnChannelCreate };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
-
- try
- {
- this->OnReload();
- }
- catch (const ConfigException &ex)
- {
- throw ModuleException(ex.GetReason());
- }
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
DefconConfig dconfig;
- dconfig.defaultlevel = config.ReadInteger("defcon", "defaultlevel", 0, 0);
- dconfig.defcons[4] = config.ReadValue("defcon", "level4", 0);
- dconfig.defcons[3] = config.ReadValue("defcon", "level3", 0);
- dconfig.defcons[2] = config.ReadValue("defcon", "level2", 0);
- dconfig.defcons[1] = config.ReadValue("defcon", "level1", 0);
- dconfig.sessionlimit = config.ReadInteger("defcon", "sessionlimit", 0, 0);
- dconfig.akillreason = config.ReadValue("defcon", "akillreason", 0);
- dconfig.akillexpire = Anope::DoTime(config.ReadValue("defcon", "akillexpire", 0));
- dconfig.chanmodes = config.ReadValue("defcon", "chanmodes", 0);
- dconfig.timeout = Anope::DoTime(config.ReadValue("defcon", "timeout", 0));
- dconfig.globalondefcon = config.ReadFlag("defcon", "globalondefcon", 0);
- dconfig.message = config.ReadValue("defcon", "message", 0);
- dconfig.offmessage = config.ReadValue("defcon", "offmessage", 0);
+ dconfig.defaultlevel = reader.ReadInteger("defcon", "defaultlevel", 0, 0);
+ dconfig.defcons[4] = reader.ReadValue("defcon", "level4", 0);
+ dconfig.defcons[3] = reader.ReadValue("defcon", "level3", 0);
+ dconfig.defcons[2] = reader.ReadValue("defcon", "level2", 0);
+ dconfig.defcons[1] = reader.ReadValue("defcon", "level1", 0);
+ dconfig.sessionlimit = reader.ReadInteger("defcon", "sessionlimit", 0, 0);
+ dconfig.akillreason = reader.ReadValue("defcon", "akillreason", 0);
+ dconfig.akillexpire = Anope::DoTime(reader.ReadValue("defcon", "akillexpire", 0));
+ dconfig.chanmodes = reader.ReadValue("defcon", "chanmodes", 0);
+ dconfig.timeout = Anope::DoTime(reader.ReadValue("defcon", "timeout", 0));
+ dconfig.globalondefcon = reader.ReadFlag("defcon", "globalondefcon", 0);
+ dconfig.message = reader.ReadValue("defcon", "message", 0);
+ dconfig.offmessage = reader.ReadValue("defcon", "offmessage", 0);
if (dconfig.defaultlevel < 1 || dconfig.defaultlevel > 5)
throw ConfigException("The value for <defcon:defaultlevel> must be between 1 and 5");
diff --git a/modules/commands/os_dns.cpp b/modules/commands/os_dns.cpp
index efcff8fc5..04971e89a 100644
--- a/modules/commands/os_dns.cpp
+++ b/modules/commands/os_dns.cpp
@@ -670,8 +670,6 @@ class ModuleDNS : public Module
Implementation i[] = { I_OnReload, I_OnNewServer, I_OnServerQuit, I_OnUserConnect, I_OnPreUserLogoff, I_OnDnsRequest };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
- this->OnReload();
-
for (unsigned j = 0; j < dns_servers->size(); ++j)
{
DNSServer *s = dns_servers->at(j);
@@ -688,16 +686,15 @@ class ModuleDNS : public Module
delete dns_servers->at(i - 1);
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- this->ttl = Anope::DoTime(config.ReadValue("os_dns", "ttl", 0));
- this->user_drop_mark = config.ReadInteger("os_dns", "user_drop_mark", 0, false);
- this->user_drop_time = Anope::DoTime(config.ReadValue("os_dns", "user_drop_time", 0, false));
- this->user_drop_readd_time = Anope::DoTime(config.ReadValue("os_dns", "user_drop_readd_time", 0, false));
- this->remove_split_servers = config.ReadFlag("os_dns", "remove_split_servers", 0);
- this->readd_connected_servers = config.ReadFlag("os_dns", "readd_connected_servers", 0);
+ this->ttl = Anope::DoTime(reader.ReadValue("os_dns", "ttl", 0));
+ this->user_drop_mark = reader.ReadInteger("os_dns", "user_drop_mark", 0, false);
+ this->user_drop_time = Anope::DoTime(reader.ReadValue("os_dns", "user_drop_time", 0, false));
+ this->user_drop_readd_time = Anope::DoTime(reader.ReadValue("os_dns", "user_drop_readd_time", 0, false));
+ this->remove_split_servers = reader.ReadFlag("os_dns", "remove_split_servers", 0);
+ this->readd_connected_servers = reader.ReadFlag("os_dns", "readd_connected_servers", 0);
}
void OnNewServer(Server *s) anope_override
diff --git a/modules/commands/os_logsearch.cpp b/modules/commands/os_logsearch.cpp
index 5a063ad53..c033c6bb5 100644
--- a/modules/commands/os_logsearch.cpp
+++ b/modules/commands/os_logsearch.cpp
@@ -151,17 +151,13 @@ class OSLogSearch : public Module
OSLogSearch(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR),
commandoslogsearch(this)
{
-
Implementation i[] = { I_OnReload };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- logfile_name = config.ReadValue("logsearch", "name", "services.log", 0);
+ logfile_name = reader.ReadValue("logsearch", "name", "services.log", 0);
}
};
diff --git a/modules/commands/os_reload.cpp b/modules/commands/os_reload.cpp
index 86b3a040e..fcf3868fa 100644
--- a/modules/commands/os_reload.cpp
+++ b/modules/commands/os_reload.cpp
@@ -24,23 +24,18 @@ class CommandOSReload : public Command
void Execute(CommandSource &source, const std::vector<Anope::string> &params) anope_override
{
- ServerConfig *old_config = Config;
-
try
{
- Config = new ServerConfig();
- FOREACH_MOD(I_OnReload, OnReload());
- delete old_config;
+ ServerConfig *new_config = new ServerConfig();
+ delete Config;
+ Config = new_config;
source.Reply(_("Services' configuration file has been reloaded."));
}
catch (const ConfigException &ex)
{
- Config = old_config;
Log(this->owner) << "Error reloading configuration file: " << ex.GetReason();
- source.Reply(_("Error reloading configuration file: ") + ex.GetReason());
+ source.Reply(_("Error reloading configuration file: %s"), ex.GetReason().c_str());
}
-
- return;
}
bool OnHelp(CommandSource &source, const Anope::string &subcommand) anope_override
diff --git a/modules/database/db_flatfile.cpp b/modules/database/db_flatfile.cpp
index 50a513c65..dcf4a5aa4 100644
--- a/modules/database/db_flatfile.cpp
+++ b/modules/database/db_flatfile.cpp
@@ -169,8 +169,6 @@ class DBFlatFile : public Module, public Pipe
Implementation i[] = { I_OnReload, I_OnLoadDatabase, I_OnSaveDatabase, I_OnSerializeTypeCreate };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- OnReload();
}
void OnNotify() anope_override
@@ -193,11 +191,10 @@ class DBFlatFile : public Module, public Pipe
Anope::Quitting = true;
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- database_file = config.ReadValue("db_flatfile", "database", "anope.db", 0);
- use_fork = config.ReadFlag("db_flatfile", "fork", "no", 0);
+ database_file = reader.ReadValue("db_flatfile", "database", "anope.db", 0);
+ use_fork = reader.ReadFlag("db_flatfile", "fork", "no", 0);
}
EventReturn OnLoadDatabase() anope_override
diff --git a/modules/database/db_plain.cpp b/modules/database/db_plain.cpp
index f2b3bffd2..11274c593 100644
--- a/modules/database/db_plain.cpp
+++ b/modules/database/db_plain.cpp
@@ -589,19 +589,12 @@ class DBPlain : public Module
public:
DBPlain(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, DATABASE | VENDOR)
{
-
Implementation i[] = { I_OnReload, I_OnLoadDatabase, I_OnSaveDatabase };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
- OnReload();
-
LastDay = 0;
}
- ~DBPlain()
- {
- }
-
void BackupDatabase()
{
/* Do not backup a database that doesn't exist */
@@ -642,11 +635,10 @@ class DBPlain : public Module
}
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- DatabaseFile = Anope::DataDir + "/" + config.ReadValue("db_plain", "database", "anope.db", 0);
- BackupFile = Anope::DataDir + "/backups/" + config.ReadValue("db_plain", "database", "anope.db", 0);
+ DatabaseFile = Anope::DataDir + "/" + reader.ReadValue("db_plain", "database", "anope.db", 0);
+ BackupFile = Anope::DataDir + "/backups/" + reader.ReadValue("db_plain", "database", "anope.db", 0);
}
EventReturn OnLoadDatabase() anope_override
diff --git a/modules/database/db_sql.cpp b/modules/database/db_sql.cpp
index 74da4c44c..4025fec69 100644
--- a/modules/database/db_sql.cpp
+++ b/modules/database/db_sql.cpp
@@ -95,8 +95,6 @@ class DBSQL : public Module, public Pipe
Implementation i[] = { I_OnReload, I_OnShutdown, I_OnRestart, I_OnLoadDatabase, I_OnSerializableConstruct, I_OnSerializableDestruct, I_OnSerializableUpdate, I_OnSerializeTypeCreate };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
- this->OnReload();
-
if (ModuleManager::FindModule("db_sql_live") != NULL)
throw ModuleException("db_sql can not be loaded after db_sql_live");
}
@@ -148,13 +146,12 @@ class DBSQL : public Module, public Pipe
this->imported = true;
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- Anope::string engine = config.ReadValue("db_sql", "engine", "", 0);
+ Anope::string engine = reader.ReadValue("db_sql", "engine", "", 0);
this->sql = ServiceReference<Provider>("SQL::Provider", engine);
- this->prefix = config.ReadValue("db_sql", "prefix", "anope_db_", 0);
- this->import = config.ReadFlag("db_sql", "import", "false", 0);
+ this->prefix = reader.ReadValue("db_sql", "prefix", "anope_db_", 0);
+ this->import = reader.ReadFlag("db_sql", "import", "false", 0);
}
void OnShutdown() anope_override
diff --git a/modules/database/db_sql_live.cpp b/modules/database/db_sql_live.cpp
index ab08472d8..a26b08cf7 100644
--- a/modules/database/db_sql_live.cpp
+++ b/modules/database/db_sql_live.cpp
@@ -75,8 +75,6 @@ class DBMySQL : public Module, public Pipe
Implementation i[] = { I_OnReload, I_OnShutdown, I_OnLoadDatabase, I_OnSerializableConstruct, I_OnSerializableDestruct, I_OnSerializeCheck, I_OnSerializableUpdate };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
- OnReload();
-
if (ModuleManager::FindFirstOf(DATABASE) != this)
throw ModuleException("If db_sql_live is loaded it must be the first database module loaded.");
}
@@ -132,12 +130,11 @@ class DBMySQL : public Module, public Pipe
init = false;
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- this->engine = config.ReadValue("db_sql", "engine", "", 0);
+ this->engine = reader.ReadValue("db_sql", "engine", "", 0);
this->SQL = ServiceReference<Provider>("SQL::Provider", this->engine);
- this->prefix = config.ReadValue("db_sql", "prefix", "anope_db_", 0);
+ this->prefix = reader.ReadValue("db_sql", "prefix", "anope_db_", 0);
}
void OnSerializableConstruct(Serializable *obj) anope_override
diff --git a/modules/extra/m_chanstats.cpp b/modules/extra/m_chanstats.cpp
index d62befbb0..caa20aacb 100644
--- a/modules/extra/m_chanstats.cpp
+++ b/modules/extra/m_chanstats.cpp
@@ -347,18 +347,16 @@ class MChanstats : public Module
I_OnChanDrop,
I_OnReload};
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- prefix = config.ReadValue("chanstats", "prefix", "anope_", 0);
- SmileysHappy = config.ReadValue("chanstats", "SmileysHappy", ":) :-) ;) :D :-D", 0);
- SmileysSad = config.ReadValue("chanstats", "SmileysSad", ":( :-( ;( ;-(", 0);
- SmileysOther = config.ReadValue("chanstats", "SmileysOther", ":/", 0);
+ prefix = reader.ReadValue("chanstats", "prefix", "anope_", 0);
+ SmileysHappy = reader.ReadValue("chanstats", "SmileysHappy", ":) :-) ;) :D :-D", 0);
+ SmileysSad = reader.ReadValue("chanstats", "SmileysSad", ":( :-( ;( ;-(", 0);
+ SmileysOther = reader.ReadValue("chanstats", "SmileysOther", ":/", 0);
- Anope::string engine = config.ReadValue("chanstats", "engine", "", 0);
+ Anope::string engine = reader.ReadValue("chanstats", "engine", "", 0);
this->sql = ServiceReference<SQL::Provider>("SQL::Provider", engine);
if (sql)
this->CheckTables();
diff --git a/modules/extra/m_dns.cpp b/modules/extra/m_dns.cpp
index 3ee7aaa67..e8f3bd758 100644
--- a/modules/extra/m_dns.cpp
+++ b/modules/extra/m_dns.cpp
@@ -938,21 +938,18 @@ class ModuleDNS : public Module
Implementation i[] = { I_OnReload, I_OnModuleUnload };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
-
- nameserver = config.ReadValue("dns", "nameserver", "127.0.0.1", 0);
- timeout = Anope::DoTime(config.ReadValue("dns", "timeout", "5", 0));
- ip = config.ReadValue("dns", "ip", "0.0.0.0", 0);
- port = config.ReadInteger("dns", "port", "53", 0, false);
- admin = config.ReadValue("dns", "admin", "admin@example.com", 0);
- nameservers = config.ReadValue("dns", "nameservers", "ns1.example.com", 0);
- refresh = config.ReadInteger("dns", "refresh", "3600", 0, false);
+
+ nameserver = reader.ReadValue("dns", "nameserver", "127.0.0.1", 0);
+ timeout = Anope::DoTime(reader.ReadValue("dns", "timeout", "5", 0));
+ ip = reader.ReadValue("dns", "ip", "0.0.0.0", 0);
+ port = reader.ReadInteger("dns", "port", "53", 0, false);
+ admin = reader.ReadValue("dns", "admin", "admin@example.com", 0);
+ nameservers = reader.ReadValue("dns", "nameservers", "ns1.example.com", 0);
+ refresh = reader.ReadInteger("dns", "refresh", "3600", 0, false);
if (Anope::IsFile(nameserver))
{
diff --git a/modules/extra/m_httpd.cpp b/modules/extra/m_httpd.cpp
index 6972bcdf1..5e643d942 100644
--- a/modules/extra/m_httpd.cpp
+++ b/modules/extra/m_httpd.cpp
@@ -336,8 +336,6 @@ class HTTPD : public Module
Implementation i[] = { I_OnReload };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
~HTTPD()
@@ -354,22 +352,21 @@ class HTTPD : public Module
this->providers.clear();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
std::set<Anope::string> existing;
- for (int i = 0, num = config.Enumerate("httpd"); i < num; ++i)
+ for (int i = 0, num = reader.Enumerate("httpd"); i < num; ++i)
{
- Anope::string hname = config.ReadValue("httpd", "name", "httpd/main", i);
+ Anope::string hname = reader.ReadValue("httpd", "name", "httpd/main", i);
existing.insert(hname);
- Anope::string ip = config.ReadValue("httpd", "ip", "", i);
- int port = config.ReadInteger("httpd", "port", "8080", i, true);
- int timeout = config.ReadInteger("httpd", "timeout", "30", i, true);
- bool ssl = config.ReadFlag("httpd", "ssl", "no", i);
- Anope::string ext_ip = config.ReadValue("httpd", "extforward_ip", "", i);
- Anope::string ext_header = config.ReadValue("httpd", "extforward_header", "", i);
+ Anope::string ip = reader.ReadValue("httpd", "ip", "", i);
+ int port = reader.ReadInteger("httpd", "port", "8080", i, true);
+ int timeout = reader.ReadInteger("httpd", "timeout", "30", i, true);
+ bool ssl = reader.ReadFlag("httpd", "ssl", "no", i);
+ Anope::string ext_ip = reader.ReadValue("httpd", "extforward_ip", "", i);
+ Anope::string ext_header = reader.ReadValue("httpd", "extforward_header", "", i);
if (ip.empty())
{
diff --git a/modules/extra/m_ldap.cpp b/modules/extra/m_ldap.cpp
index 80a6b5a9e..3200d3e38 100644
--- a/modules/extra/m_ldap.cpp
+++ b/modules/extra/m_ldap.cpp
@@ -409,8 +409,6 @@ class ModuleLDAP : public Module, public Pipe
Implementation i[] = { I_OnReload, I_OnModuleUnload };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- OnReload();
}
~ModuleLDAP()
@@ -425,9 +423,8 @@ class ModuleLDAP : public Module, public Pipe
LDAPServices.clear();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
int i, num;
for (std::map<Anope::string, LDAPService *>::iterator it = this->LDAPServices.begin(); it != this->LDAPServices.end();)
@@ -436,9 +433,9 @@ class ModuleLDAP : public Module, public Pipe
LDAPService *s = it->second;
++it;
- for (i = 0, num = config.Enumerate("ldap"); i < num; ++i)
+ for (i = 0, num = reader.Enumerate("ldap"); i < num; ++i)
{
- if (config.ReadValue("ldap", "name", "main", i) == cname)
+ if (reader.ReadValue("ldap", "name", "main", i) == cname)
{
break;
}
@@ -454,16 +451,16 @@ class ModuleLDAP : public Module, public Pipe
}
}
- for (i = 0, num = config.Enumerate("ldap"); i < num; ++i)
+ for (i = 0, num = reader.Enumerate("ldap"); i < num; ++i)
{
- Anope::string connname = config.ReadValue("ldap", "name", "main", i);
+ Anope::string connname = reader.ReadValue("ldap", "name", "main", i);
if (this->LDAPServices.find(connname) == this->LDAPServices.end())
{
- Anope::string server = config.ReadValue("ldap", "server", "127.0.0.1", i);
- int port = config.ReadInteger("ldap", "port", "389", i, true);
- Anope::string admin_binddn = config.ReadValue("ldap", "admin_binddn", "", i);
- Anope::string admin_password = config.ReadValue("ldap", "admin_password", "", i);
+ Anope::string server = reader.ReadValue("ldap", "server", "127.0.0.1", i);
+ int port = reader.ReadInteger("ldap", "port", "389", i, true);
+ Anope::string admin_binddn = reader.ReadValue("ldap", "admin_binddn", "", i);
+ Anope::string admin_password = reader.ReadValue("ldap", "admin_password", "", i);
try
{
diff --git a/modules/extra/m_ldap_authentication.cpp b/modules/extra/m_ldap_authentication.cpp
index cc5626cd3..f39bb43e8 100644
--- a/modules/extra/m_ldap_authentication.cpp
+++ b/modules/extra/m_ldap_authentication.cpp
@@ -224,22 +224,19 @@ class NSIdentifyLDAP : public Module
Implementation i[] = { I_OnReload, I_OnPreCommand, I_OnCheckAuthentication, I_OnNickIdentify, I_OnNickRegister };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
ModuleManager::SetPriority(this, PRIORITY_FIRST);
-
- OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
-
- basedn = config.ReadValue("m_ldap_authentication", "basedn", "", 0);
- search_filter = config.ReadValue("m_ldap_authentication", "search_filter", "", 0);
- object_class = config.ReadValue("m_ldap_authentication", "object_class", "", 0);
- username_attribute = config.ReadValue("m_ldap_authentication", "username_attribute", "", 0);
- this->password_attribute = config.ReadValue("m_ldap_authentication", "password_attribute", "", 0);
- email_attribute = config.ReadValue("m_ldap_authentication", "email_attribute", "", 0);
- this->disable_register_reason = config.ReadValue("m_ldap_authentication", "disable_register_reason", "", 0);
- this->disable_email_reason = config.ReadValue("m_ldap_authentication", "disable_email_reason", "", 0);
+
+ basedn = reader.ReadValue("m_ldap_authentication", "basedn", "", 0);
+ search_filter = reader.ReadValue("m_ldap_authentication", "search_filter", "", 0);
+ object_class = reader.ReadValue("m_ldap_authentication", "object_class", "", 0);
+ username_attribute = reader.ReadValue("m_ldap_authentication", "username_attribute", "", 0);
+ this->password_attribute = reader.ReadValue("m_ldap_authentication", "password_attribute", "", 0);
+ email_attribute = reader.ReadValue("m_ldap_authentication", "email_attribute", "", 0);
+ this->disable_register_reason = reader.ReadValue("m_ldap_authentication", "disable_register_reason", "", 0);
+ this->disable_email_reason = reader.ReadValue("m_ldap_authentication", "disable_email_reason", "", 0);
if (!email_attribute.empty())
/* Don't complain to users about how they need to update their email, we will do it for them */
diff --git a/modules/extra/m_ldap_oper.cpp b/modules/extra/m_ldap_oper.cpp
index f44628c63..afe3fde48 100644
--- a/modules/extra/m_ldap_oper.cpp
+++ b/modules/extra/m_ldap_oper.cpp
@@ -91,19 +91,15 @@ class LDAPOper : public Module
Implementation i[] = { I_OnReload, I_OnNickIdentify, I_OnDelCore };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
-
- this->binddn = config.ReadValue("m_ldap_oper", "binddn", "", 0);
- this->password = config.ReadValue("m_ldap_oper", "password", "", 0);
- this->basedn = config.ReadValue("m_ldap_oper", "basedn", "", 0);
- this->filter = config.ReadValue("m_ldap_oper", "filter", "", 0);
- opertype_attribute = config.ReadValue("m_ldap_oper", "opertype_attribute", "", 0);
+ this->binddn = reader.ReadValue("m_ldap_oper", "binddn", "", 0);
+ this->password = reader.ReadValue("m_ldap_oper", "password", "", 0);
+ this->basedn = reader.ReadValue("m_ldap_oper", "basedn", "", 0);
+ this->filter = reader.ReadValue("m_ldap_oper", "filter", "", 0);
+ opertype_attribute = reader.ReadValue("m_ldap_oper", "opertype_attribute", "", 0);
for (std::set<Oper *>::iterator it = my_opers.begin(), it_end = my_opers.end(); it != it_end; ++it)
delete *it;
diff --git a/modules/extra/m_mysql.cpp b/modules/extra/m_mysql.cpp
index 8eecb4a23..c41ba37a8 100644
--- a/modules/extra/m_mysql.cpp
+++ b/modules/extra/m_mysql.cpp
@@ -174,8 +174,6 @@ class ModuleSQL : public Module, public Pipe
DThread = new DispatcherThread();
DThread->Start();
-
- OnReload();
}
~ModuleSQL()
@@ -190,9 +188,8 @@ class ModuleSQL : public Module, public Pipe
delete DThread;
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
int i, num;
for (std::map<Anope::string, MySQLService *>::iterator it = this->MySQLServices.begin(); it != this->MySQLServices.end();)
@@ -201,9 +198,9 @@ class ModuleSQL : public Module, public Pipe
MySQLService *s = it->second;
++it;
- for (i = 0, num = config.Enumerate("mysql"); i < num; ++i)
+ for (i = 0, num = reader.Enumerate("mysql"); i < num; ++i)
{
- if (config.ReadValue("mysql", "name", "main", i) == cname)
+ if (reader.ReadValue("mysql", "name", "main", i) == cname)
{
break;
}
@@ -218,17 +215,17 @@ class ModuleSQL : public Module, public Pipe
}
}
- for (i = 0, num = config.Enumerate("mysql"); i < num; ++i)
+ for (i = 0, num = reader.Enumerate("mysql"); i < num; ++i)
{
- Anope::string connname = config.ReadValue("mysql", "name", "mysql/main", i);
+ Anope::string connname = reader.ReadValue("mysql", "name", "mysql/main", i);
if (this->MySQLServices.find(connname) == this->MySQLServices.end())
{
- Anope::string database = config.ReadValue("mysql", "database", "anope", i);
- Anope::string server = config.ReadValue("mysql", "server", "127.0.0.1", i);
- Anope::string user = config.ReadValue("mysql", "username", "anope", i);
- Anope::string password = config.ReadValue("mysql", "password", "", i);
- int port = config.ReadInteger("mysql", "port", "3306", i, true);
+ Anope::string database = reader.ReadValue("mysql", "database", "anope", i);
+ Anope::string server = reader.ReadValue("mysql", "server", "127.0.0.1", i);
+ Anope::string user = reader.ReadValue("mysql", "username", "anope", i);
+ Anope::string password = reader.ReadValue("mysql", "password", "", i);
+ int port = reader.ReadInteger("mysql", "port", "3306", i, true);
try
{
diff --git a/modules/extra/m_proxyscan.cpp b/modules/extra/m_proxyscan.cpp
index 78f42a910..9dd3f8884 100644
--- a/modules/extra/m_proxyscan.cpp
+++ b/modules/extra/m_proxyscan.cpp
@@ -229,15 +229,6 @@ class ModuleProxyScan : public Module
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
this->listener = NULL;
-
- try
- {
- OnReload();
- }
- catch (const ConfigException &ex)
- {
- throw ModuleException(ex.GetReason());
- }
}
~ModuleProxyScan()
@@ -262,23 +253,21 @@ class ModuleProxyScan : public Module
delete this->listener;
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
-
- Anope::string s_target_ip = config.ReadValue("m_proxyscan", "target_ip", "", 0);
+ Anope::string s_target_ip = reader.ReadValue("m_proxyscan", "target_ip", "", 0);
if (s_target_ip.empty())
throw ConfigException("m_proxyscan:target_ip may not be empty");
- int s_target_port = config.ReadInteger("m_proxyscan", "target_port", "-1", 0, true);
+ int s_target_port = reader.ReadInteger("m_proxyscan", "target_port", "-1", 0, true);
if (s_target_port <= 0)
throw ConfigException("m_proxyscan:target_port may not be empty and must be a positive number");
- Anope::string s_listen_ip = config.ReadValue("m_proxyscan", "listen_ip", "", 0);
+ Anope::string s_listen_ip = reader.ReadValue("m_proxyscan", "listen_ip", "", 0);
if (s_listen_ip.empty())
throw ConfigException("m_proxyscan:listen_ip may not be empty");
- int s_listen_port = config.ReadInteger("m_proxyscan", "listen_port", "-1", 0, true);
+ int s_listen_port = reader.ReadInteger("m_proxyscan", "listen_port", "-1", 0, true);
if (s_listen_port <= 0)
throw ConfigException("m_proxyscan:listen_port may not be empty and must be a positive number");
@@ -286,10 +275,10 @@ class ModuleProxyScan : public Module
target_port = s_target_port;
this->listen_ip = s_listen_ip;
this->listen_port = s_listen_port;
- this->con_notice = config.ReadValue("m_proxyscan", "connect_notice", "", 0);
- this->con_source = config.ReadValue("m_proxyscan", "connect_source", "", 0);
- add_to_akill = config.ReadFlag("m_proxyscan", "add_to_akill", "true", 0);
- this->connectionTimeout.SetSecs(config.ReadInteger("m_proxyscan", "timeout", "5", 0, true));
+ this->con_notice = reader.ReadValue("m_proxyscan", "connect_notice", "", 0);
+ this->con_source = reader.ReadValue("m_proxyscan", "connect_source", "", 0);
+ add_to_akill = reader.ReadFlag("m_proxyscan", "add_to_akill", "true", 0);
+ this->connectionTimeout.SetSecs(reader.ReadInteger("m_proxyscan", "timeout", "5", 0, true));
ProxyCheckString = Config->NetworkName + " proxy check";
delete this->listener;
@@ -304,12 +293,12 @@ class ModuleProxyScan : public Module
}
this->proxyscans.clear();
- for (int i = 0; i < config.Enumerate("proxyscan"); ++i)
+ for (int i = 0; i < reader.Enumerate("proxyscan"); ++i)
{
ProxyCheck p;
Anope::string token;
- commasepstream sep(config.ReadValue("proxyscan", "type", "", i));
+ commasepstream sep(reader.ReadValue("proxyscan", "type", "", i));
while (sep.GetToken(token))
{
if (!token.equals_ci("HTTP") && !token.equals_ci("SOCKS5"))
@@ -319,7 +308,7 @@ class ModuleProxyScan : public Module
if (p.types.empty())
continue;
- commasepstream sep2(config.ReadValue("proxyscan", "port", "", i));
+ commasepstream sep2(reader.ReadValue("proxyscan", "port", "", i));
while (sep2.GetToken(token))
{
try
@@ -332,8 +321,8 @@ class ModuleProxyScan : public Module
if (p.ports.empty())
continue;
- p.duration = Anope::DoTime(config.ReadValue("proxyscan", "time", "4h", i));
- p.reason = config.ReadValue("proxyscan", "reason", "", i);
+ p.duration = Anope::DoTime(reader.ReadValue("proxyscan", "time", "4h", i));
+ p.reason = reader.ReadValue("proxyscan", "reason", "", i);
if (p.reason.empty())
continue;
diff --git a/modules/extra/m_sql_authentication.cpp b/modules/extra/m_sql_authentication.cpp
index 7fcdf4e13..027b0bbcc 100644
--- a/modules/extra/m_sql_authentication.cpp
+++ b/modules/extra/m_sql_authentication.cpp
@@ -85,17 +85,13 @@ class ModuleSQLAuthentication : public Module
Implementation i[] = { I_OnReload, I_OnPreCommand, I_OnCheckAuthentication };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
-
- this->engine = config.ReadValue("m_sql_authentication", "engine", "", 0);
- this->query = config.ReadValue("m_sql_authentication", "query", "", 0);
- this->disable_reason = config.ReadValue("m_sql_authentication", "disable_reason", "", 0);
+ this->engine = reader.ReadValue("m_sql_authentication", "engine", "", 0);
+ this->query = reader.ReadValue("m_sql_authentication", "query", "", 0);
+ this->disable_reason = reader.ReadValue("m_sql_authentication", "disable_reason", "", 0);
this->SQL = ServiceReference<SQL::Provider>("SQL::Provider", this->engine);
}
diff --git a/modules/extra/m_sql_oper.cpp b/modules/extra/m_sql_oper.cpp
index bbcd108c4..4f982e1d8 100644
--- a/modules/extra/m_sql_oper.cpp
+++ b/modules/extra/m_sql_oper.cpp
@@ -99,16 +99,12 @@ class ModuleSQLOper : public Module
Implementation i[] = { I_OnReload, I_OnNickIdentify };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
-
- this->engine = config.ReadValue("m_sql_oper", "engine", "", 0);
- this->query = config.ReadValue("m_sql_oper", "query", "", 0);
+ this->engine = reader.ReadValue("m_sql_oper", "engine", "", 0);
+ this->query = reader.ReadValue("m_sql_oper", "query", "", 0);
this->SQL = ServiceReference<SQL::Provider>("SQL::Provider", this->engine);
}
diff --git a/modules/extra/m_sqlite.cpp b/modules/extra/m_sqlite.cpp
index 623e1e8b1..9626741a0 100644
--- a/modules/extra/m_sqlite.cpp
+++ b/modules/extra/m_sqlite.cpp
@@ -68,8 +68,6 @@ class ModuleSQLite : public Module
{
Implementation i[] = { I_OnReload };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- OnReload();
}
~ModuleSQLite()
@@ -79,9 +77,8 @@ class ModuleSQLite : public Module
SQLiteServices.clear();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
int i, num;
for (std::map<Anope::string, SQLiteService *>::iterator it = this->SQLiteServices.begin(); it != this->SQLiteServices.end();)
@@ -90,8 +87,8 @@ class ModuleSQLite : public Module
SQLiteService *s = it->second;
++it;
- for (i = 0, num = config.Enumerate("sqlite"); i < num; ++i)
- if (config.ReadValue("sqlite", "name", "sqlite/main", i) == cname)
+ for (i = 0, num = reader.Enumerate("sqlite"); i < num; ++i)
+ if (reader.ReadValue("sqlite", "name", "sqlite/main", i) == cname)
break;
if (i == num)
@@ -103,13 +100,13 @@ class ModuleSQLite : public Module
}
}
- for (i = 0, num = config.Enumerate("sqlite"); i < num; ++i)
+ for (i = 0, num = reader.Enumerate("sqlite"); i < num; ++i)
{
- Anope::string connname = config.ReadValue("sqlite", "name", "sqlite/main", i);
+ Anope::string connname = reader.ReadValue("sqlite", "name", "sqlite/main", i);
if (this->SQLiteServices.find(connname) == this->SQLiteServices.end())
{
- Anope::string database = Anope::DataDir + "/" + config.ReadValue("sqlite", "database", "anope", i);
+ Anope::string database = Anope::DataDir + "/" + reader.ReadValue("sqlite", "database", "anope", i);
try
{
diff --git a/modules/extra/m_ssl.cpp b/modules/extra/m_ssl.cpp
index 5ecf30cfc..c64e04af5 100644
--- a/modules/extra/m_ssl.cpp
+++ b/modules/extra/m_ssl.cpp
@@ -107,8 +107,6 @@ class SSLModule : public Module
if (!client_ctx || !server_ctx)
throw ModuleException("Error initializing SSL CTX");
- this->OnReload();
-
if (Anope::IsFile(this->certfile.c_str()))
{
if (!SSL_CTX_use_certificate_file(client_ctx, this->certfile.c_str(), SSL_FILETYPE_PEM) || !SSL_CTX_use_certificate_file(server_ctx, this->certfile.c_str(), SSL_FILETYPE_PEM))
@@ -175,19 +173,17 @@ class SSLModule : public Module
SSL_CTX_free(server_ctx);
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
-
- this->certfile = config.ReadValue("ssl", "cert", "data/anope.crt", 0);
- this->keyfile = config.ReadValue("ssl", "key", "data/anope.key", 0);
+ this->certfile = reader.ReadValue("ssl", "cert", "data/anope.crt", 0);
+ this->keyfile = reader.ReadValue("ssl", "key", "data/anope.key", 0);
}
void OnPreServerConnect() anope_override
{
- ConfigReader config;
+ ConfigReader reader;
- if (config.ReadFlag("uplink", "ssl", "no", Anope::CurrentUplink))
+ if (reader.ReadFlag("uplink", "ssl", "no", Anope::CurrentUplink))
{
this->service.Init(UplinkSock);
}
diff --git a/modules/extra/m_xmlrpc.cpp b/modules/extra/m_xmlrpc.cpp
index 060001940..cac848c69 100644
--- a/modules/extra/m_xmlrpc.cpp
+++ b/modules/extra/m_xmlrpc.cpp
@@ -161,13 +161,11 @@ class ModuleXMLRPC : public Module
public:
MyXMLRPCServiceInterface xmlrpcinterface;
- ModuleXMLRPC(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, EXTRA | VENDOR), xmlrpcinterface(this, "xmlrpc")
+ ModuleXMLRPC(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, EXTRA | VENDOR),
+ httpref("HTTPProvider", "httpd/main"), xmlrpcinterface(this, "xmlrpc")
{
- OnReload();
-
if (!httpref)
throw ModuleException("Unable to find http reference, is m_httpd loaded?");
-
httpref->RegisterPage(&xmlrpcinterface);
Implementation i[] = { I_OnReload };
@@ -179,12 +177,6 @@ class ModuleXMLRPC : public Module
if (httpref)
httpref->UnregisterPage(&xmlrpcinterface);
}
-
- void OnReload() anope_override
- {
- ConfigReader config;
- httpref = ServiceReference<HTTPProvider>("HTTPProvider", "httpd/main");
- }
};
MODULE_INIT(ModuleXMLRPC)
diff --git a/modules/m_dnsbl.cpp b/modules/m_dnsbl.cpp
index cf5a2b861..27aaff794 100644
--- a/modules/m_dnsbl.cpp
+++ b/modules/m_dnsbl.cpp
@@ -93,33 +93,29 @@ class ModuleDNSBL : public Module
Implementation i[] = { I_OnReload, I_OnUserConnect };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
-
- this->check_on_connect = config.ReadFlag("m_dnsbl", "check_on_connect", "no", 0);
- this->check_on_netburst = config.ReadFlag("m_dnsbl", "check_on_netburst", "no", 0);
- this->add_to_akill = config.ReadFlag("m_dnsbl", "add_to_akill", "yes", 0);
+ this->check_on_connect = reader.ReadFlag("m_dnsbl", "check_on_connect", "no", 0);
+ this->check_on_netburst = reader.ReadFlag("m_dnsbl", "check_on_netburst", "no", 0);
+ this->add_to_akill = reader.ReadFlag("m_dnsbl", "add_to_akill", "yes", 0);
this->blacklists.clear();
- for (int i = 0, num = config.Enumerate("blacklist"); i < num; ++i)
+ for (int i = 0, num = reader.Enumerate("blacklist"); i < num; ++i)
{
- Anope::string bname = config.ReadValue("blacklist", "name", "", i);
+ Anope::string bname = reader.ReadValue("blacklist", "name", "", i);
if (bname.empty())
continue;
- Anope::string sbantime = config.ReadValue("blacklist", "time", "4h", i);
+ Anope::string sbantime = reader.ReadValue("blacklist", "time", "4h", i);
time_t bantime = Anope::DoTime(sbantime);
if (bantime < 0)
bantime = 9000;
- Anope::string reason = config.ReadValue("blacklist", "reason", "", i);
+ Anope::string reason = reader.ReadValue("blacklist", "reason", "", i);
std::map<int, Anope::string> replies;
for (int j = 0; j < 256; ++j)
{
- Anope::string k = config.ReadValue("blacklist", stringify(j), "", i);
+ Anope::string k = reader.ReadValue("blacklist", stringify(j), "", i);
if (!k.empty())
replies[j] = k;
}
diff --git a/modules/m_helpchan.cpp b/modules/m_helpchan.cpp
index e0163b925..d39b5afd9 100644
--- a/modules/m_helpchan.cpp
+++ b/modules/m_helpchan.cpp
@@ -14,11 +14,8 @@ class HelpChannel : public Module
public:
HelpChannel(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR)
{
-
Implementation i[] = { I_OnChannelModeSet, I_OnReload };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- OnReload();
}
EventReturn OnChannelModeSet(Channel *c, MessageSource &setter, const Anope::string &mname, const Anope::string &param) anope_override
@@ -34,11 +31,9 @@ class HelpChannel : public Module
return EVENT_CONTINUE;
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
-
- this->HelpChan = config.ReadValue("m_helpchan", "helpchannel", "", 0);
+ this->HelpChan = reader.ReadValue("m_helpchan", "helpchannel", "", 0);
}
};
diff --git a/modules/m_rewrite.cpp b/modules/m_rewrite.cpp
index 1e281de94..fb7fe46ed 100644
--- a/modules/m_rewrite.cpp
+++ b/modules/m_rewrite.cpp
@@ -155,30 +155,26 @@ class ModuleRewrite : public Module
public:
ModuleRewrite(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR), cmdrewrite(this)
{
-
Implementation i[] = { I_OnReload };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- this->OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
Rewrite::rewrites.clear();
- for (int i = 0; i < config.Enumerate("command"); ++i)
+ for (int i = 0; i < reader.Enumerate("command"); ++i)
{
- if (!config.ReadFlag("command", "rewrite", "no", i))
+ if (!reader.ReadFlag("command", "rewrite", "no", i))
continue;
Rewrite rw;
- rw.client = config.ReadValue("command", "service", "", i);
- rw.source_message = config.ReadValue("command", "rewrite_source", "", i),
- rw.target_message = config.ReadValue("command", "rewrite_target", "", i);
- rw.desc = config.ReadValue("command", "rewrite_description", "", i);
+ rw.client = reader.ReadValue("command", "service", "", i);
+ rw.source_message = reader.ReadValue("command", "rewrite_source", "", i),
+ rw.target_message = reader.ReadValue("command", "rewrite_target", "", i);
+ rw.desc = reader.ReadValue("command", "rewrite_description", "", i);
if (rw.client.empty() || rw.source_message.empty() || rw.target_message.empty())
continue;
diff --git a/modules/ns_maxemail.cpp b/modules/ns_maxemail.cpp
index bf90374d0..530ca5fe4 100644
--- a/modules/ns_maxemail.cpp
+++ b/modules/ns_maxemail.cpp
@@ -56,15 +56,11 @@ class NSMaxEmail : public Module
Implementation i[] = { I_OnReload, I_OnPreCommand };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
-
- OnReload();
}
- void OnReload() anope_override
+ void OnReload(ServerConfig *conf, ConfigReader &reader) anope_override
{
- ConfigReader config;
- this->NSEmailMax = config.ReadInteger("ns_maxemail", "maxemails", "0", 0, false);
- Log(LOG_DEBUG) << "[ns_maxemail] NSEmailMax set to " << NSEmailMax;
+ this->NSEmailMax = reader.ReadInteger("ns_maxemail", "maxemails", "0", 0, false);
}
EventReturn OnPreCommand(CommandSource &source, Command *command, std::vector<Anope::string> &params) anope_override
diff --git a/src/config.cpp b/src/config.cpp
index 2637964fa..bc01a1589 100644
--- a/src/config.cpp
+++ b/src/config.cpp
@@ -142,6 +142,9 @@ ServerConfig::ServerConfig()
if (this->SessionIPv4CIDR > 32 || this->SessionIPv6CIDR > 128)
throw ConfigException("Session CIDR value out of range");
+ ConfigReader reader(this);
+ FOREACH_MOD(I_OnReload, OnReload(this, reader));
+
#ifndef _WIN32
if (!this->User.empty())
{
diff --git a/src/configreader.cpp b/src/configreader.cpp
index 64b4addf4..ca5a64a60 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -27,11 +27,15 @@
#include "services.h"
#include "config.h"
-ConfigReader::ConfigReader() : error(CONF_NO_ERROR)
+ConfigReader::ConfigReader() : conf(Config), error(CONF_NO_ERROR)
{
}
-ConfigReader::ConfigReader(const Anope::string &filename) : error(CONF_NO_ERROR)
+ConfigReader::ConfigReader(const Anope::string &filename) : conf(Config), error(CONF_NO_ERROR)
+{
+}
+
+ConfigReader::ConfigReader(ServerConfig *c) : conf(c), error(CONF_NO_ERROR)
{
}
@@ -44,7 +48,7 @@ Anope::string ConfigReader::ReadValue(const Anope::string &tag, const Anope::str
/* Don't need to strlcpy() tag and name anymore, ReadConf() takes const char* */
Anope::string result;
- if (!Config->ConfValue(Config->config_data, tag, name, default_value, index, result, allow_linefeeds))
+ if (!conf->ConfValue(conf->config_data, tag, name, default_value, index, result, allow_linefeeds))
this->error = CONF_VALUE_NOT_FOUND;
return result;
@@ -57,7 +61,7 @@ Anope::string ConfigReader::ReadValue(const Anope::string &tag, const Anope::str
bool ConfigReader::ReadFlag(const Anope::string &tag, const Anope::string &name, const Anope::string &default_value, int index)
{
- return Config->ConfValueBool(Config->config_data, tag, name, default_value, index);
+ return conf->ConfValueBool(conf->config_data, tag, name, default_value, index);
}
bool ConfigReader::ReadFlag(const Anope::string &tag, const Anope::string &name, int index)
@@ -69,7 +73,7 @@ int ConfigReader::ReadInteger(const Anope::string &tag, const Anope::string &nam
{
int result;
- if (!Config->ConfValueInteger(Config->config_data, tag, name, default_value, index, result))
+ if (!conf->ConfValueInteger(conf->config_data, tag, name, default_value, index, result))
{
this->error = CONF_VALUE_NOT_FOUND;
return 0;
@@ -98,12 +102,12 @@ long ConfigReader::GetError()
int ConfigReader::Enumerate(const Anope::string &tag) const
{
- return Config->ConfValueEnum(Config->config_data, tag);
+ return conf->ConfValueEnum(conf->config_data, tag);
}
int ConfigReader::EnumerateValues(const Anope::string &tag, int index)
{
- return Config->ConfVarEnum(Config->config_data, tag, index);
+ return conf->ConfVarEnum(conf->config_data, tag, index);
}
bool ConfigReader::Verify()
diff --git a/src/init.cpp b/src/init.cpp
index 96686589a..b0812fedc 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -118,16 +118,14 @@ void Anope::HandleSignal()
{
Anope::SaveDatabases();
- ServerConfig *old_config = Config;
try
{
- Config = new ServerConfig();
- FOREACH_MOD(I_OnReload, OnReload());
- delete old_config;
+ ServerConfig *new_config = new ServerConfig();
+ delete Config;
+ Config = new_config;
}
catch (const ConfigException &ex)
{
- Config = old_config;
Log() << "Error reloading configuration file: " << ex.GetReason();
}
break;
diff --git a/src/modulemanager.cpp b/src/modulemanager.cpp
index a6fa1fffd..f27561fa6 100644
--- a/src/modulemanager.cpp
+++ b/src/modulemanager.cpp
@@ -11,6 +11,7 @@
#include "modules.h"
#include "users.h"
#include "regchannel.h"
+#include "config.h"
#include <sys/types.h>
#include <sys/stat.h>
@@ -225,7 +226,24 @@ ModuleReturn ModuleManager::LoadModule(const Anope::string &modname, User *u)
else
Log(LOG_DEBUG_2) << "Module " << modname << " is compiled against current version of Anope " << Anope::VersionShort();
+ /* If the module is hooked to the reload event it wants to initialize its config here */
+ if (std::find(EventHandlers[I_OnReload].begin(), EventHandlers[I_OnReload].end(), m) != EventHandlers[I_OnReload].end())
+ {
+ ConfigReader reader;
+ try
+ {
+ m->OnReload(Config, reader);
+ }
+ catch (const ConfigException &ex)
+ {
+ Log() << "Module " << modname << " couldn't load due to configuration problems: " << ex.GetReason();
+ DeleteModule(m);
+ return MOD_ERR_EXCEPTION;
+ }
+ }
+
Log(LOG_DEBUG) << "Module " << modname << " loaded.";
+
FOREACH_MOD(I_OnModuleLoad, OnModuleLoad(u, m));
return MOD_ERR_OK;