summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-10-04 16:38:25 -0400
committerAdam <Adam@anope.org>2010-10-04 16:38:25 -0400
commitab5ebc224516abfe424f2e631eed2dc314c32ab9 (patch)
tree116b0af44cd0b3d45e3fbf9715264f4c34c9439a
parentcf98cd3e06e4de0f9902824b0ef8239e947c5b6a (diff)
Automatically destruct messages when modules are unloaded
-rw-r--r--include/anope.h14
-rw-r--r--include/modules.h3
-rw-r--r--modules/protocol/bahamut.cpp46
-rw-r--r--modules/protocol/inspircd11.cpp54
-rw-r--r--modules/protocol/inspircd12.cpp61
-rw-r--r--modules/protocol/inspircd20.cpp59
-rw-r--r--modules/protocol/ratbox.cpp45
-rw-r--r--modules/protocol/unreal32.cpp114
-rw-r--r--src/init.cpp8
-rw-r--r--src/messages.cpp11
-rw-r--r--src/modules.cpp39
11 files changed, 142 insertions, 312 deletions
diff --git a/include/anope.h b/include/anope.h
index ce206bc8e..fe46dc0ed 100644
--- a/include/anope.h
+++ b/include/anope.h
@@ -304,20 +304,6 @@ namespace Anope
*/
extern CoreExport bool Match(const Anope::string &str, const Anope::string &mask, bool case_sensitive = false);
- /** Add a message to Anope
- * @param name The message name as sent by the IRCd
- * @param func A callback function that will be called when this message is received
- * @return The new message object
- */
- extern CoreExport Message *AddMessage(const string &name, bool (*func)(const string &source, const std::vector<Anope::string> &params));
-
- /** Deletes a message from Anope
- * XXX Im not sure what will happen if this function is called indirectly from message function pointed to by this message.. must check
- * @param m The message
- * @return true if the message was found and deleted, else false
- */
- extern CoreExport bool DelMessage(Message *m);
-
/** Returns a list of pointers to message handlers
* @param The message name as sent by the IRCd
* @return a vector with pointers to the messagehandlers (you can bind more than one handler to a message)
diff --git a/include/modules.h b/include/modules.h
index 6d5b5d6e9..4377975b1 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -1269,6 +1269,9 @@ struct Message
{
Anope::string name;
bool (*func)(const Anope::string &source, const std::vector<Anope::string> &params);
+
+ Message(const Anope::string &n, bool (*f)(const Anope::string &, const std::vector<Anope::string> &));
+ ~Message();
};
#endif // MODULES_H
diff --git a/modules/protocol/bahamut.cpp b/modules/protocol/bahamut.cpp
index 283c4014b..268b33eda 100644
--- a/modules/protocol/bahamut.cpp
+++ b/modules/protocol/bahamut.cpp
@@ -683,36 +683,6 @@ bool ChannelModeFlood::IsValid(const Anope::string &value) const
return false;
}
-void moduleAddIRCDMsgs()
-{
- Anope::AddMessage("436", event_436);
- Anope::AddMessage("AWAY", event_away);
- Anope::AddMessage("JOIN", event_join);
- Anope::AddMessage("KICK", event_kick);
- Anope::AddMessage("KILL", event_kill);
- Anope::AddMessage("MODE", event_mode);
- Anope::AddMessage("MOTD", event_motd);
- Anope::AddMessage("NICK", event_nick);
- Anope::AddMessage("PART", event_part);
- Anope::AddMessage("PING", event_ping);
- Anope::AddMessage("PRIVMSG", event_privmsg);
- Anope::AddMessage("QUIT", event_quit);
- Anope::AddMessage("SERVER", event_server);
- Anope::AddMessage("SQUIT", event_squit);
- Anope::AddMessage("TOPIC", event_topic);
- Anope::AddMessage("WHOIS", event_whois);
- Anope::AddMessage("SVSMODE", event_mode);
- Anope::AddMessage("CAPAB", event_capab);
- Anope::AddMessage("CS", event_cs);
- Anope::AddMessage("HS", event_hs);
- Anope::AddMessage("MS", event_ms);
- Anope::AddMessage("NS", event_ns);
- Anope::AddMessage("OS", event_os);
- Anope::AddMessage("SJOIN", event_sjoin);
- Anope::AddMessage("ERROR", event_error);
- Anope::AddMessage("BURST", event_burst);
-}
-
static void AddModes()
{
/* Add user modes */
@@ -752,8 +722,21 @@ static void AddModes()
class ProtoBahamut : public Module
{
+ Message message_436, message_away, message_join, message_kick, message_kill, message_mode, message_motd, message_nick,
+ message_part, message_ping, message_privmsg, message_quit, message_server, message_squit, message_topic, message_whois,
+ message_svsmode, message_capab, message_cs, message_hs, message_ms, message_ns, message_os, message_sjoin, message_error,
+ message_burst;
public:
- ProtoBahamut(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator)
+ ProtoBahamut(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator),
+ message_436("436", event_436), message_away("AWAY", event_away), message_join("JOIN", event_join),
+ message_kick("KICK", event_kick), message_kill("KILL", event_kill), message_mode("MODE", event_mode),
+ message_motd("MOTD", event_motd), message_nick("NICK", event_nick), message_part("PART", event_part),
+ message_ping("PING", event_ping), message_privmsg("PRIVMSG", event_privmsg), message_quit("QUIT", event_quit),
+ message_server("SERVER", event_server), message_squit("SQUIT", event_squit), message_topic("TOPIC", event_topic),
+ message_whois("WHOIS", event_whois), message_svsmode("SVSMODE", event_mode), message_capab("CAPAB", event_capab),
+ message_cs("CS", event_cs), message_hs("HS", event_hs), message_ms("MS", event_ms), message_ns("NS", event_ns),
+ message_os("OS", event_os), message_sjoin("SJOIN", event_sjoin), message_error("ERROR", event_error),
+ message_burst("BURST", event_burst)
{
this->SetAuthor("Anope");
this->SetType(PROTOCOL);
@@ -764,7 +747,6 @@ class ProtoBahamut : public Module
for (unsigned i = 0; i < 6; ++i)
Capab.SetFlag(c[i]);
- moduleAddIRCDMsgs();
AddModes();
pmodule_ircd_proto(&ircd_proto);
diff --git a/modules/protocol/inspircd11.cpp b/modules/protocol/inspircd11.cpp
index fd1143f54..cce1ce09d 100644
--- a/modules/protocol/inspircd11.cpp
+++ b/modules/protocol/inspircd11.cpp
@@ -963,41 +963,6 @@ bool event_endburst(const Anope::string &source, const std::vector<Anope::string
return true;
}
-void moduleAddIRCDMsgs()
-{
- Anope::AddMessage("ENDBURST", event_endburst);
- Anope::AddMessage("436", event_436);
- Anope::AddMessage("AWAY", event_away);
- Anope::AddMessage("JOIN", event_join);
- Anope::AddMessage("KICK", event_kick);
- Anope::AddMessage("KILL", event_kill);
- Anope::AddMessage("MODE", event_mode);
- Anope::AddMessage("MOTD", event_motd);
- Anope::AddMessage("NICK", event_nick);
- Anope::AddMessage("CAPAB", event_capab);
- Anope::AddMessage("PART", event_part);
- Anope::AddMessage("PING", event_ping);
- Anope::AddMessage("PRIVMSG", event_privmsg);
- Anope::AddMessage("QUIT", event_quit);
- Anope::AddMessage("SERVER", event_server);
- Anope::AddMessage("SQUIT", event_squit);
- Anope::AddMessage("RSQUIT", event_rsquit);
- Anope::AddMessage("TOPIC", event_topic);
- Anope::AddMessage("WHOIS", event_whois);
- Anope::AddMessage("SVSMODE", event_mode);
- Anope::AddMessage("FHOST", event_chghost);
- Anope::AddMessage("CHGIDENT", event_chgident);
- Anope::AddMessage("FNAME", event_chgname);
- Anope::AddMessage("SETHOST", event_sethost);
- Anope::AddMessage("SETIDENT", event_setident);
- Anope::AddMessage("SETNAME", event_setname);
- Anope::AddMessage("FJOIN", event_fjoin);
- Anope::AddMessage("FMODE", event_fmode);
- Anope::AddMessage("FTOPIC", event_ftopic);
- Anope::AddMessage("OPERTYPE", event_opertype);
- Anope::AddMessage("IDLE", event_idle);
-}
-
bool ChannelModeFlood::IsValid(const Anope::string &value) const
{
Anope::string rest;
@@ -1020,8 +985,24 @@ static void AddModes()
class ProtoInspIRCd : public Module
{
+ Message message_endburst, message_436, message_away, message_join, message_kick, message_kill, message_mode, message_motd,
+ message_nick, message_capab, message_part, message_ping, message_privmsg, message_quit, message_server, message_squit,
+ message_rsquit, message_topic, message_whois, message_svsmode, message_chghost, message_chgident, message_chgname,
+ message_sethost, message_setident, message_setname, message_fjoin, message_fmode, message_ftopic, message_opertype,
+ message_idle;
public:
- ProtoInspIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator)
+ ProtoInspIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator),
+ message_endburst("ENDBURST", event_endburst), message_436("436", event_436), message_away("AWAY", event_away),
+ message_join("JOIN", event_join), message_kick("KICK", event_kick), message_kill("KILL", event_kill),
+ message_mode("MODE", event_mode), message_motd("MOTD", event_motd), message_nick("NICK", event_nick),
+ message_capab("CAPAB", event_capab), message_part("PART", event_part), message_ping("PING", event_ping),
+ message_privmsg("PRIVMSG", event_privmsg), message_quit("QUIT", event_quit), message_server("SERVER", event_server),
+ message_squit("SQUIT", event_squit), message_rsquit("RSQUIT", event_rsquit), message_topic("TOPIC", event_topic),
+ message_whois("WHOIS", event_whois), message_svsmode("SVSMODE", event_mode), message_chghost("CHGHOST", event_chghost),
+ message_chgident("CHGIDENT", event_chgident), message_chgname("CHGNAME", event_chgname),
+ message_sethost("SETHOST", event_sethost), message_setident("SETIDENT", event_setident),
+ message_setname("SETNAME", event_setname), message_fjoin("FJOIN", event_fjoin), message_fmode("FMODE", event_fmode),
+ message_ftopic("FTOPIC", event_ftopic), message_opertype("OPERTYPE", event_opertype), message_idle("IDLE", event_idle)
{
this->SetAuthor("Anope");
this->SetType(PROTOCOL);
@@ -1035,7 +1016,6 @@ class ProtoInspIRCd : public Module
AddModes();
pmodule_ircd_proto(&ircd_proto);
- moduleAddIRCDMsgs();
ModuleManager::Attach(I_OnUserNickChange, this);
}
diff --git a/modules/protocol/inspircd12.cpp b/modules/protocol/inspircd12.cpp
index 66e519a88..419008e85 100644
--- a/modules/protocol/inspircd12.cpp
+++ b/modules/protocol/inspircd12.cpp
@@ -1155,7 +1155,7 @@ bool event_endburst(const Anope::string &source, const std::vector<Anope::string
Server *s = Server::Find(source);
if (!s)
- throw new CoreException("Got ENDBURST without a source");
+ throw CoreException("Got ENDBURST without a source");
/* Check if the previously introduced user was Id'd for the nickgroup of the nick he s currently using.
* If not, validate the user. ~ Viper*/
@@ -1181,44 +1181,6 @@ bool event_endburst(const Anope::string &source, const std::vector<Anope::string
return true;
}
-void moduleAddIRCDMsgs()
-{
- Anope::AddMessage("ENDBURST", event_endburst);
- Anope::AddMessage("436", event_436);
- Anope::AddMessage("AWAY", event_away);
- Anope::AddMessage("JOIN", event_join);
- Anope::AddMessage("KICK", event_kick);
- Anope::AddMessage("KILL", event_kill);
- Anope::AddMessage("MODE", event_mode);
- Anope::AddMessage("MOTD", event_motd);
- Anope::AddMessage("NICK", event_nick);
- Anope::AddMessage("UID", event_uid);
- Anope::AddMessage("CAPAB", event_capab);
- Anope::AddMessage("PART", event_part);
- Anope::AddMessage("PING", event_ping);
- Anope::AddMessage("TIME", event_time);
- Anope::AddMessage("PRIVMSG", event_privmsg);
- Anope::AddMessage("QUIT", event_quit);
- Anope::AddMessage("SERVER", event_server);
- Anope::AddMessage("SQUIT", event_squit);
- Anope::AddMessage("RSQUIT", event_rsquit);
- Anope::AddMessage("TOPIC", event_topic);
- Anope::AddMessage("WHOIS", event_whois);
- Anope::AddMessage("SVSMODE", event_mode);
- Anope::AddMessage("FHOST", event_chghost);
- Anope::AddMessage("CHGIDENT", event_chgident);
- Anope::AddMessage("FNAME", event_chgname);
- Anope::AddMessage("SETHOST", event_sethost);
- Anope::AddMessage("SETIDENT", event_setident);
- Anope::AddMessage("SETNAME", event_setname);
- Anope::AddMessage("FJOIN", event_fjoin);
- Anope::AddMessage("FMODE", event_fmode);
- Anope::AddMessage("FTOPIC", event_ftopic);
- Anope::AddMessage("OPERTYPE", event_opertype);
- Anope::AddMessage("IDLE", event_idle);
- Anope::AddMessage("METADATA", event_metadata);
-}
-
bool ChannelModeFlood::IsValid(const Anope::string &value) const
{
Anope::string rest;
@@ -1230,8 +1192,26 @@ bool ChannelModeFlood::IsValid(const Anope::string &value) const
class ProtoInspIRCd : public Module
{
+ Message message_endburst, message_436, message_away, message_join, message_kick, message_kill, message_mode, message_motd,
+ message_nick, message_uid, message_capab, message_part, message_ping, message_time, message_privmsg, message_quit,
+ message_server, message_squit, message_rsquit, message_topic, message_whois, message_svsmode, message_fhost,
+ message_chgident, message_fname, message_sethost, message_setident, message_setname, message_fjoin, message_fmode,
+ message_ftopic, message_opertype, message_idle, message_metadata;
public:
- ProtoInspIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator)
+ ProtoInspIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator),
+ message_endburst("ENDBURST", event_endburst), message_436("436", event_436), message_away("AWAY", event_away),
+ message_join("JOIN", event_join), message_kick("KICK", event_kick), message_kill("KILL", event_kill),
+ message_mode("MODE", event_mode), message_motd("MOTD", event_motd), message_nick("NICK", event_nick),
+ message_uid("UID", event_uid), message_capab("CAPAB", event_capab), message_part("PART", event_part),
+ message_ping("PING", event_ping), message_time("TIME", event_time), message_privmsg("PRIVMSG", event_privmsg),
+ message_quit("QUIT", event_quit), message_server("SERVER", event_server), message_squit("SQUIT", event_squit),
+ message_rsquit("RSQUIT", event_rsquit), message_topic("TOPIC", event_topic), message_whois("WHOIS", event_whois),
+ message_svsmode("SVSMODE", event_mode), message_fhost("FHOST", event_chghost),
+ message_chgident("CHGIDENT", event_chgident), message_fname("FNAME", event_chgname),
+ message_sethost("SETHOST", event_sethost), message_setident("SETIDENT", event_setident),
+ message_setname("SETNAME", event_setname), message_fjoin("FJOIN", event_fjoin), message_fmode("FMODE", event_fmode),
+ message_ftopic("FTOPIC", event_ftopic), message_opertype("OPERTYPE", event_opertype), message_idle("IDLE", event_idle),
+ message_metadata("METADATA", event_metadata)
{
this->SetAuthor("Anope");
this->SetType(PROTOCOL);
@@ -1246,7 +1226,6 @@ class ProtoInspIRCd : public Module
Capab.SetFlag(c[i]);
pmodule_ircd_proto(&ircd_proto);
- moduleAddIRCDMsgs();
ModuleManager::Attach(I_OnUserNickChange, this);
}
diff --git a/modules/protocol/inspircd20.cpp b/modules/protocol/inspircd20.cpp
index ed58977cd..653989f5b 100644
--- a/modules/protocol/inspircd20.cpp
+++ b/modules/protocol/inspircd20.cpp
@@ -1154,44 +1154,6 @@ bool event_endburst(const Anope::string &source, const std::vector<Anope::string
return true;
}
-void moduleAddIRCDMsgs()
-{
- Anope::AddMessage("ENDBURST", event_endburst);
- Anope::AddMessage("436", event_436);
- Anope::AddMessage("AWAY", event_away);
- Anope::AddMessage("JOIN", event_join);
- Anope::AddMessage("KICK", event_kick);
- Anope::AddMessage("KILL", event_kill);
- Anope::AddMessage("MODE", event_mode);
- Anope::AddMessage("MOTD", event_motd);
- Anope::AddMessage("NICK", event_nick);
- Anope::AddMessage("UID", event_uid);
- Anope::AddMessage("CAPAB", event_capab);
- Anope::AddMessage("PART", event_part);
- Anope::AddMessage("PING", event_ping);
- Anope::AddMessage("TIME", event_time);
- Anope::AddMessage("PRIVMSG", event_privmsg);
- Anope::AddMessage("QUIT", event_quit);
- Anope::AddMessage("SERVER", event_server);
- Anope::AddMessage("SQUIT", event_squit);
- Anope::AddMessage("RSQUIT", event_rsquit);
- Anope::AddMessage("TOPIC", event_topic);
- Anope::AddMessage("WHOIS", event_whois);
- Anope::AddMessage("SVSMODE", event_mode);
- Anope::AddMessage("FHOST", event_chghost);
- Anope::AddMessage("FIDENT", event_chgident);
- Anope::AddMessage("FNAME", event_chgname);
- Anope::AddMessage("SETHOST", event_sethost);
- Anope::AddMessage("SETIDENT", event_setident);
- Anope::AddMessage("SETNAME", event_setname);
- Anope::AddMessage("FJOIN", event_fjoin);
- Anope::AddMessage("FMODE", event_fmode);
- Anope::AddMessage("FTOPIC", event_ftopic);
- Anope::AddMessage("OPERTYPE", event_opertype);
- Anope::AddMessage("IDLE", event_idle);
- Anope::AddMessage("METADATA", event_metadata);
-}
-
bool ChannelModeFlood::IsValid(const Anope::string &value) const
{
//char *dp, *end;
@@ -1204,8 +1166,26 @@ bool ChannelModeFlood::IsValid(const Anope::string &value) const
class ProtoInspIRCd : public Module
{
+ Message message_endburst, message_436, message_away, message_join, message_kick, message_kill, message_mode, message_motd,
+ message_nick, message_uid, message_capab, message_part, message_ping, message_time, message_privmsg, message_quit,
+ message_server, message_squit, message_rsquit, message_topic, message_whois, message_svsmode, message_fhost,
+ message_chgident, message_fname, message_sethost, message_setident, message_setname, message_fjoin, message_fmode,
+ message_ftopic, message_opertype, message_idle, message_metadata;
public:
- ProtoInspIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator)
+ ProtoInspIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator),
+ message_endburst("ENDBURST", event_endburst), message_436("436", event_436), message_away("AWAY", event_away),
+ message_join("JOIN", event_join), message_kick("KICK", event_kick), message_kill("KILL", event_kill),
+ message_mode("MODE", event_mode), message_motd("MOTD", event_motd), message_nick("NICK", event_nick),
+ message_uid("UID", event_uid), message_capab("CAPAB", event_capab), message_part("PART", event_part),
+ message_ping("PING", event_ping), message_time("TIME", event_time), message_privmsg("PRIVMSG", event_privmsg),
+ message_quit("QUIT", event_quit), message_server("SERVER", event_server), message_squit("SQUIT", event_squit),
+ message_rsquit("RSQUIT", event_rsquit), message_topic("TOPIC", event_topic), message_whois("WHOIS", event_whois),
+ message_svsmode("SVSMODE", event_mode), message_fhost("FHOST", event_chghost),
+ message_chgident("FIDENT", event_chgident), message_fname("FNAME", event_chgname),
+ message_sethost("SETHOST", event_sethost), message_setident("SETIDENT", event_setident),
+ message_setname("SETNAME", event_setname), message_fjoin("FJOIN", event_fjoin), message_fmode("FMODE", event_fmode),
+ message_ftopic("FTOPIC", event_ftopic), message_opertype("OPERTYPE", event_opertype), message_idle("IDLE", event_idle),
+ message_metadata("METADATA", event_metadata)
{
this->SetAuthor("Anope");
this->SetType(PROTOCOL);
@@ -1220,7 +1200,6 @@ class ProtoInspIRCd : public Module
Capab.SetFlag(c[i]);
pmodule_ircd_proto(&ircd_proto);
- moduleAddIRCDMsgs();
ModuleManager::Attach(I_OnUserNickChange, this);
}
diff --git a/modules/protocol/ratbox.cpp b/modules/protocol/ratbox.cpp
index 8bbd403f4..285c308fb 100644
--- a/modules/protocol/ratbox.cpp
+++ b/modules/protocol/ratbox.cpp
@@ -658,35 +658,6 @@ bool event_error(const Anope::string &source, const std::vector<Anope::string> &
return true;
}
-void moduleAddIRCDMsgs()
-{
- Anope::AddMessage("436", event_436);
- Anope::AddMessage("AWAY", event_away);
- Anope::AddMessage("JOIN", event_join);
- Anope::AddMessage("KICK", event_kick);
- Anope::AddMessage("KILL", event_kill);
- Anope::AddMessage("MODE", event_mode);
- Anope::AddMessage("TMODE", event_tmode);
- Anope::AddMessage("MOTD", event_motd);
- Anope::AddMessage("NICK", event_nick);
- Anope::AddMessage("BMASK", event_bmask);
- Anope::AddMessage("UID", event_nick);
- Anope::AddMessage("PART", event_part);
- Anope::AddMessage("PASS", event_pass);
- Anope::AddMessage("PING", event_ping);
- Anope::AddMessage("PRIVMSG", event_privmsg);
- Anope::AddMessage("QUIT", event_quit);
- Anope::AddMessage("SERVER", event_server);
- Anope::AddMessage("SQUIT", event_squit);
- Anope::AddMessage("TOPIC", event_topic);
- Anope::AddMessage("TB", event_tburst);
- Anope::AddMessage("WHOIS", event_whois);
- Anope::AddMessage("CAPAB", event_capab);
- Anope::AddMessage("SJOIN", event_sjoin);
- Anope::AddMessage("ERROR", event_error);
- Anope::AddMessage("SID", event_sid);
-}
-
static void AddModes()
{
/* Add user modes */
@@ -718,8 +689,21 @@ static void AddModes()
class ProtoRatbox : public Module
{
+ Message message_436, message_away, message_join, message_kick, message_kill, message_mode, message_tmode, message_motd,
+ message_nick, message_bmask, message_uid, message_part, message_pass, message_ping, message_privmsg, message_quit,
+ message_server, message_squit, message_topic, message_tb, message_whois, message_capab, message_sjoin, message_error,
+ message_sid;
public:
- ProtoRatbox(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator)
+ ProtoRatbox(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator),
+ message_436("436", event_436), message_away("AWAY", event_away), message_join("JOIN", event_join),
+ message_kick("KICK", event_kick), message_kill("KILL", event_kill), message_mode("MODE", event_mode),
+ message_tmode("TMODE", event_tmode), message_motd("MOTD", event_motd), message_nick("NICK", event_nick),
+ message_bmask("BMASK", event_bmask), message_uid("UID", event_nick), message_part("PART", event_part),
+ message_pass("PASS", event_pass), message_ping("PING", event_ping), message_privmsg("PRIVMSG", event_privmsg),
+ message_quit("QUIT", event_quit), message_server("SERVER", event_server), message_squit("SQUIT", event_squit),
+ message_topic("TOPIC", event_topic), message_tb("TB", event_tburst), message_whois("WHOIS", event_whois),
+ message_capab("CAPAB", event_capab), message_sjoin("SJOIN", event_sjoin), message_error("ERROR", event_error),
+ message_sid("SID", event_sid)
{
this->SetAuthor("Anope");
this->SetType(PROTOCOL);
@@ -736,7 +720,6 @@ class ProtoRatbox : public Module
AddModes();
pmodule_ircd_proto(&ircd_proto);
- moduleAddIRCDMsgs();
}
};
diff --git a/modules/protocol/unreal32.cpp b/modules/protocol/unreal32.cpp
index f835b2b70..9307d3fa2 100644
--- a/modules/protocol/unreal32.cpp
+++ b/modules/protocol/unreal32.cpp
@@ -917,9 +917,8 @@ bool event_privmsg(const Anope::string &source, const std::vector<Anope::string>
bool event_part(const Anope::string &source, const std::vector<Anope::string> &params)
{
- if (params.size() < 1 || params.size() > 2)
- return true;
- do_part(source, params[0], params[1]);
+ if (!params.empty())
+ do_part(source, params[0], params.size() > 1 ? params[1] : "");
return true;
}
@@ -1082,76 +1081,6 @@ bool event_sjoin(const Anope::string &source, const std::vector<Anope::string> &
return true;
}
-void moduleAddIRCDMsgs()
-{
- Anope::AddMessage("436", event_436);
- Anope::AddMessage("AWAY", event_away);
- Anope::AddMessage("6", event_away);
- Anope::AddMessage("JOIN", event_join);
- Anope::AddMessage("C", event_join);
- Anope::AddMessage("KICK", event_kick);
- Anope::AddMessage("H", event_kick);
- Anope::AddMessage("KILL", event_kill);
- Anope::AddMessage(".", event_kill);
- Anope::AddMessage("MODE", event_mode);
- Anope::AddMessage("G", event_mode);
- Anope::AddMessage("MOTD", event_motd);
- Anope::AddMessage("F", event_motd);
- Anope::AddMessage("NICK", event_nick);
- Anope::AddMessage("&", event_nick);
- Anope::AddMessage("PART", event_part);
- Anope::AddMessage("D", event_part);
- Anope::AddMessage("PING", event_ping);
- Anope::AddMessage("8", event_ping);
- Anope::AddMessage("PONG", event_pong);
- Anope::AddMessage("9", event_pong);
- Anope::AddMessage("PRIVMSG", event_privmsg);
- Anope::AddMessage("!", event_privmsg);
- Anope::AddMessage("QUIT", event_quit);
- Anope::AddMessage(",", event_quit);
- Anope::AddMessage("SERVER", event_server);
- Anope::AddMessage("'", event_server);
- Anope::AddMessage("SQUIT", event_squit);
- Anope::AddMessage("-", event_squit);
- Anope::AddMessage("TOPIC", event_topic);
- Anope::AddMessage(")", event_topic);
- Anope::AddMessage("SVSMODE", event_mode);
- Anope::AddMessage("n", event_mode);
- Anope::AddMessage("SVS2MODE", event_mode);
- Anope::AddMessage("v", event_mode);
- Anope::AddMessage("WHOIS", event_whois);
- Anope::AddMessage("#", event_whois);
- Anope::AddMessage("PROTOCTL", event_capab);
- Anope::AddMessage("_", event_capab);
- Anope::AddMessage("CHGHOST", event_chghost);
- Anope::AddMessage("AL", event_chghost);
- Anope::AddMessage("CHGIDENT", event_chgident);
- Anope::AddMessage("AZ", event_chgident);
- Anope::AddMessage("CHGNAME", event_chgname);
- Anope::AddMessage("BK", event_chgname);
- Anope::AddMessage("NETINFO", event_netinfo);
- Anope::AddMessage("AO", event_netinfo);
- Anope::AddMessage("SETHOST", event_sethost);
- Anope::AddMessage("AA", event_sethost);
- Anope::AddMessage("SETIDENT", event_setident);
- Anope::AddMessage("AD", event_setident);
- Anope::AddMessage("SETNAME", event_setname);
- Anope::AddMessage("AE", event_setname);
- Anope::AddMessage("ERROR", event_error);
- Anope::AddMessage("5", event_error);
- Anope::AddMessage("UMODE2", event_umode2);
- Anope::AddMessage("|", event_umode2);
- Anope::AddMessage("SJOIN", event_sjoin);
- Anope::AddMessage("~", event_sjoin);
- Anope::AddMessage("SDESC", event_sdesc);
- Anope::AddMessage("AG", event_sdesc);
-
- /* The non token version of these is in messages.c */
- Anope::AddMessage("2", m_stats);
- Anope::AddMessage(">", m_time);
- Anope::AddMessage("+", m_version);
-}
-
/* Borrowed part of this check from UnrealIRCd */
bool ChannelModeFlood::IsValid(const Anope::string &value) const
{
@@ -1228,8 +1157,44 @@ static void AddModes()
class ProtoUnreal : public Module
{
+ Message message_436, message_away, message_away2, message_join, message_join2, message_kick, message_kick2,
+ message_kill, message_kill2, message_mode, message_mode2, message_nick, message_nick2, message_part,
+ message_part2, message_ping, message_ping2, message_pong, message_pong2, message_privmsg, message_privmsg2,
+ message_quit, message_quit2, message_server, message_server2, message_squit, message_squit2, message_topic,
+ message_topic2, message_svsmode, message_svsmode2, message_svs2mode, message_svs2mode2, message_whois, message_whois2,
+ message_capab, message_capab2, message_chghost, message_chghost2, message_chgident, message_chgident2,
+ message_chgname, message_chgname2, message_netinfo, message_netinfo2, message_sethost, message_sethost2,
+ message_setident, message_setident2, message_setname, message_setname2, message_error, message_error2,
+ message_umode2, message_umode22, message_sjoin, message_sjoin2, message_sdesc, message_sdesc2;
+
+ /* Non-token of these in messages.cpp */
+ Message message_stats, message_time, message_version;
public:
- ProtoUnreal(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator)
+ ProtoUnreal(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator),
+ message_436("436", event_436), message_away("AWAY", event_away), message_away2("6", event_away),
+ message_join("JOIN", event_join), message_join2("C", event_join), message_kick("KICK", event_kick),
+ message_kick2("H", event_kick), message_kill("KILL", event_kill), message_kill2(".", event_kill),
+ message_mode("MODE", event_mode), message_mode2("G", event_mode), message_nick("NICK", event_nick),
+ message_nick2("&", event_nick), message_part("PART", event_part), message_part2("D", event_part),
+ message_ping("PING", event_ping), message_ping2("8", event_ping), message_pong("PONG", event_pong),
+ message_pong2("9", event_pong), message_privmsg("PRIVMSG", event_privmsg), message_privmsg2("!", event_privmsg),
+ message_quit("QUIT", event_quit), message_quit2(",", event_quit), message_server("SERVER", event_server),
+ message_server2("'", event_server), message_squit("SQUIT", event_squit), message_squit2("-", event_squit),
+ message_topic("TOPIC", event_topic), message_topic2(")", event_topic), message_svsmode("SVSMODE", event_mode),
+ message_svsmode2("n", event_mode), message_svs2mode("SVS2MODE", event_mode), message_svs2mode2("v", event_mode),
+ message_whois("WHOIS", event_whois), message_whois2("#", event_whois), message_capab("PROTOCTL", event_capab),
+ message_capab2("_", event_capab), message_chghost("CHGHOST", event_chghost), message_chghost2("AL", event_chghost),
+ message_chgident("CHGIDENT", event_chgident), message_chgident2("AZ", event_chgident),
+ message_chgname("CHGNAME", event_chgname), message_chgname2("BK", event_chgname),
+ message_netinfo("NETINFO", event_netinfo), message_netinfo2("AO", event_netinfo),
+ message_sethost("SETHOST", event_sethost), message_sethost2("AA", event_sethost),
+ message_setident("SETIDENT", event_setident), message_setident2("AD", event_setident),
+ message_setname("SETNAME", event_setname), message_setname2("AE", event_setname),
+ message_error("ERROR", event_error), message_error2("5", event_error), message_umode2("UMODE2", event_umode2),
+ message_umode22("|", event_umode2), message_sjoin("SJOIN", event_sjoin), message_sjoin2("~", event_sjoin),
+ message_sdesc("SDESC", event_sdesc), message_sdesc2("AG", event_sdesc),
+
+ message_stats("2", m_stats), message_time(">", m_time), message_version("+", m_version)
{
this->SetAuthor("Anope");
this->SetType(PROTOCOL);
@@ -1243,7 +1208,6 @@ class ProtoUnreal : public Module
AddModes();
pmodule_ircd_proto(&ircd_proto);
- moduleAddIRCDMsgs();
ModuleManager::Attach(I_OnUserNickChange, this);
}
diff --git a/src/init.cpp b/src/init.cpp
index 544dcbd7c..69bb88539 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -14,11 +14,6 @@
Uplink *uplink_server;
-extern void moduleAddMsgs();
-extern void moduleAddIRCDMsgs();
-
-/*************************************************************************/
-
void introduce_user(const Anope::string &user)
{
/* Watch out for infinite loops... */
@@ -379,9 +374,6 @@ void Init(int ac, char **av)
throw FatalException(ex.GetReason());
}
- /* Add Core MSG handles */
- moduleAddMsgs();
-
#ifndef _WIN32
if (!nofork)
{
diff --git a/src/messages.cpp b/src/messages.cpp
index 5378164ea..e22f856c6 100644
--- a/src/messages.cpp
+++ b/src/messages.cpp
@@ -304,10 +304,7 @@ int m_whois(const Anope::string &source, const Anope::string &who)
return MOD_CONT;
}
-/* *INDENT-OFF* */
-void moduleAddMsgs()
-{
- Anope::AddMessage("STATS", m_stats);
- Anope::AddMessage("TIME", m_time);
- Anope::AddMessage("VERSION", m_version);
-}
+Message message_stats("STATS", m_stats);
+Message message_time("TIME", m_time);
+Message message_verssion("VERSION", m_version);
+
diff --git a/src/modules.cpp b/src/modules.cpp
index 902b940db..0f6771c3a 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -87,49 +87,34 @@ Module *FindModule(const Anope::string &name)
return NULL;
}
-/** Add a message to Anope
- * @param name The message name as sent by the IRCd
- * @param func A callback function that will be called when this message is received
- * @return The new message object
+/** Message constructor, adds the message to Anope
+ * @param n The message name
+ * @param f A callback function
*/
-Message *Anope::AddMessage(const Anope::string &name, bool (*func)(const Anope::string &source, const std::vector<Anope::string> &params))
+Message::Message(const Anope::string &n, bool (*f)(const Anope::string &, const std::vector<Anope::string> &)) : name(n), func(f)
{
- Message *m = new Message();
-
- m->name = name;
- m->func = func;
-
- MessageMap.insert(std::make_pair(m->name, m));
-
- return m;
+ MessageMap.insert(std::make_pair(this->name, this));
}
-/** Deletes a message from Anope
- * XXX Im not sure what will happen if this function is called indirectly from a message function pointed to by this message and there
- * is more than one hook for this message.. must check
- * @param m The message
- * @return true if the message was found and deleted, else false
+/** Message destructor
*/
-bool Anope::DelMessage(Message *m)
+Message::~Message()
{
- message_map::iterator it = MessageMap.find(m->name);
+ message_map::iterator it = MessageMap.find(this->name);
if (it == MessageMap.end())
- return false;
+ return;
- message_map::iterator upper = MessageMap.upper_bound(m->name);
+ message_map::iterator upper = MessageMap.upper_bound(this->name);
for (; it != upper; ++it)
{
- if (it->second == m)
+ if (it->second == this)
{
- delete m;
MessageMap.erase(it);
- return true;
+ break;
}
}
-
- return false;
}
/** Find message in the message table