1
0
mirror of https://github.com/anope/anope.git synced 2026-06-28 12:56:39 +02:00

Automatically destruct messages when modules are unloaded

This commit is contained in:
Adam
2010-10-04 16:38:25 -04:00
parent cf98cd3e06
commit ab5ebc2245
11 changed files with 142 additions and 312 deletions
-14
View File
@@ -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)
+3
View File
@@ -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
+14 -32
View File
@@ -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);
+17 -37
View File
@@ -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);
}
+20 -41
View File
@@ -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);
}
+19 -40
View File
@@ -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);
}
+14 -31
View File
@@ -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();
}
};
+39 -75
View File
@@ -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);
}
-8
View File
@@ -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)
{
+4 -7
View File
@@ -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);
+12 -27
View File
@@ -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