diff options
author | Adam <Adam@anope.org> | 2010-10-04 16:38:25 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2010-10-04 16:38:25 -0400 |
commit | ab5ebc224516abfe424f2e631eed2dc314c32ab9 (patch) | |
tree | 116b0af44cd0b3d45e3fbf9715264f4c34c9439a | |
parent | cf98cd3e06e4de0f9902824b0ef8239e947c5b6a (diff) |
Automatically destruct messages when modules are unloaded
-rw-r--r-- | include/anope.h | 14 | ||||
-rw-r--r-- | include/modules.h | 3 | ||||
-rw-r--r-- | modules/protocol/bahamut.cpp | 46 | ||||
-rw-r--r-- | modules/protocol/inspircd11.cpp | 54 | ||||
-rw-r--r-- | modules/protocol/inspircd12.cpp | 61 | ||||
-rw-r--r-- | modules/protocol/inspircd20.cpp | 59 | ||||
-rw-r--r-- | modules/protocol/ratbox.cpp | 45 | ||||
-rw-r--r-- | modules/protocol/unreal32.cpp | 114 | ||||
-rw-r--r-- | src/init.cpp | 8 | ||||
-rw-r--r-- | src/messages.cpp | 11 | ||||
-rw-r--r-- | src/modules.cpp | 39 |
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> ¶ms)); - - /** 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> ¶ms); + + 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> ¶ms) { - 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> ¶ms)) +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 |