summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorattilamolnar <attilamolnar@hush.com>2012-10-05 14:58:19 +0200
committerAdam <Adam@anope.org>2012-10-06 02:06:23 -0400
commite747ba6c26f93a33b3bbc400de48bb4b3773d396 (patch)
tree98778cb410c5acf78fcfe26f453f0c9074f02610 /modules
parent4431a34987ac18980adfc237376acce1f81ba489 (diff)
InspIRCd: Add metadata handler to recognize when a module is loaded or unloaded on the ircd side and adjust our behavior accordingly
Diffstat (limited to 'modules')
-rw-r--r--modules/protocol/inspircd-ts6.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/modules/protocol/inspircd-ts6.h b/modules/protocol/inspircd-ts6.h
index 09f5eec77..1f516baaf 100644
--- a/modules/protocol/inspircd-ts6.h
+++ b/modules/protocol/inspircd-ts6.h
@@ -590,6 +590,48 @@ struct IRCDMessageMetadata : IRCDMessage
}
else if (params[0] == "*")
{
+ // Wed Oct 3 15:40:27 2012: S[14] O :20D METADATA * modules :-m_svstopic.so
+
+ if (params[1].equals_cs("modules") && !params[2].empty())
+ {
+ // only interested when it comes from our uplink
+ Server* server = source.GetServer();
+ if (!server || server->GetUplink() != Me)
+ return true;
+
+ bool plus = (params[2][0] == '+');
+ if (!plus && params[2][0] != '-')
+ return true;
+
+ bool required = false;
+ Anope::string module = params[2].substr(1);
+
+ if (module.equals_cs("m_services_account.so"))
+ required = true;
+ else if (module.equals_cs("m_hidechans.so"))
+ required = true;
+ else if (module.equals_cs("m_chghost.so"))
+ has_chghostmod = plus;
+ else if (module.equals_cs("m_chgident.so"))
+ has_chgidentmod = plus;
+ else if (module.equals_cs("m_svshold.so"))
+ ircdproto->CanSVSHold = plus;
+ else if (module.equals_cs("m_rline.so"))
+ has_rlinemod = plus;
+ else
+ return true;
+
+ if (required)
+ {
+ if (!plus)
+ Log() << "Warning: InspIRCd unloaded module " << module << ", Anope won't function correctly without it";
+ }
+ else
+ {
+ Log() << "InspIRCd " << (plus ? "loaded" : "unloaded") << " module " << module << ", adjusted functionality";
+ }
+
+ }
}
return true;