diff options
| author | Adam <Adam@anope.org> | 2012-05-23 19:35:56 -0400 |
|---|---|---|
| committer | Adam <Adam@anope.org> | 2012-05-23 19:35:56 -0400 |
| commit | 70fb5900a2cc8eb00d1d25b39bd137488e845338 (patch) | |
| tree | 134683df2a07d7bbabb8d78c3284096f687eadc7 /modules/protocol/inspircd20.cpp | |
| parent | bf7d1a55afd4e082813e995fd967ad1dae8df26d (diff) | |
Add support for inspircd2.0+s mlock, improved on Unreal's, and made server side mlock usage configurable
Diffstat (limited to 'modules/protocol/inspircd20.cpp')
| -rw-r--r-- | modules/protocol/inspircd20.cpp | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/modules/protocol/inspircd20.cpp b/modules/protocol/inspircd20.cpp index 8f1bc38e6..1cf00f5a1 100644 --- a/modules/protocol/inspircd20.cpp +++ b/modules/protocol/inspircd20.cpp @@ -730,7 +730,7 @@ class ProtoInspIRCd : public Module Capab.insert("NOQUIT"); - Implementation i[] = { I_OnUserNickChange, I_OnServerSync }; + Implementation i[] = { I_OnUserNickChange, I_OnServerSync, I_OnChannelCreate, I_OnChanRegistered, I_OnDelChan, I_OnMLock, I_OnUnMLock }; ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation)); if (Config->Numeric.empty()) @@ -766,6 +766,51 @@ class ProtoInspIRCd : public Module nickserv->Validate(u); } } + + void OnChannelCreate(Channel *c) anope_override + { + if (c->ci && Config->UseServerSideMLock) + this->OnChanRegistered(c->ci); + } + + void OnChanRegistered(ChannelInfo *ci) anope_override + { + if (!Config->UseServerSideMLock) + return; + Anope::string modes = ci->GetMLockAsString(false).replace_all_cs("+", "").replace_all_cs("-", ""); + UplinkSocket::Message(Me) << "METADATA " << ci->name << " mlock :" << modes; + } + + void OnDelChan(ChannelInfo *ci) anope_override + { + if (!Config->UseServerSideMLock) + return; + UplinkSocket::Message(Me) << "METADATA " << ci->name << " mlock :"; + } + + EventReturn OnMLock(ChannelInfo *ci, ModeLock *lock) anope_override + { + ChannelMode *cm = ModeManager::FindChannelModeByName(lock->name); + if (cm && ci->c && (cm->Type == MODE_REGULAR || cm->Type == MODE_PARAM) && Config->UseServerSideMLock) + { + Anope::string modes = ci->GetMLockAsString(false).replace_all_cs("+", "").replace_all_cs("-", "") + cm->ModeChar; + UplinkSocket::Message(Me) << "METADATA " << ci->name << " mlock :" << modes; + } + + return EVENT_CONTINUE; + } + + EventReturn OnUnMLock(ChannelInfo *ci, ModeLock *lock) anope_override + { + ChannelMode *cm = ModeManager::FindChannelModeByName(lock->name); + if (cm && ci->c && (cm->Type == MODE_REGULAR || cm->Type == MODE_PARAM) && Config->UseServerSideMLock) + { + Anope::string modes = ci->GetMLockAsString(false).replace_all_cs("+", "").replace_all_cs("-", "").replace_all_cs(cm->ModeChar, ""); + UplinkSocket::Message(Me) << "METADATA " << ci->name << " mlock :" << modes; + } + + return EVENT_CONTINUE; + } }; MODULE_INIT(ProtoInspIRCd) |
