diff options
author | attilamolnar <attilamolnar@hush.com> | 2012-10-05 14:58:19 +0200 |
---|---|---|
committer | Adam <Adam@anope.org> | 2012-10-06 02:06:23 -0400 |
commit | e747ba6c26f93a33b3bbc400de48bb4b3773d396 (patch) | |
tree | 98778cb410c5acf78fcfe26f453f0c9074f02610 /modules | |
parent | 4431a34987ac18980adfc237376acce1f81ba489 (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.h | 42 |
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; |