diff options
author | attilamolnar <attilamolnar@hush.com> | 2013-09-02 13:01:41 +0200 |
---|---|---|
committer | attilamolnar <attilamolnar@hush.com> | 2013-09-12 14:44:17 +0200 |
commit | 58d7827bb1bd3d90f38a1c199f6f41ae9f24885c (patch) | |
tree | d2613bd107ac6b00960e1981f184ee4160e5877f /src/modules/m_check.cpp | |
parent | 7ba25076818e42b4eac9199477a01101cf57e848 (diff) |
Send ListModeBase modes implicitly on channel sync
Remove Module::ProtoSendMode() and ListModeBase::DoSyncChannel()
Diffstat (limited to 'src/modules/m_check.cpp')
-rw-r--r-- | src/modules/m_check.cpp | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp index cf99e6404..5e154feea 100644 --- a/src/modules/m_check.cpp +++ b/src/modules/m_check.cpp @@ -27,7 +27,6 @@ */ class CommandCheck : public Command { - ChanModeReference ban; UserModeReference snomaskmode; std::string GetSnomasks(User* user) @@ -41,10 +40,30 @@ class CommandCheck : public Command return ret; } + static void dumpListMode(User* user, const std::string& checkstr, const ListModeBase::ModeList* list) + { + if (!list) + return; + + std::string buf = checkstr + " modelist"; + const std::string::size_type headlen = buf.length(); + const size_t maxline = ServerInstance->Config->Limits.MaxLine; + for (ListModeBase::ModeList::const_iterator i = list->begin(); i != list->end(); ++i) + { + if (buf.size() + i->mask.size() + 1 > maxline) + { + user->SendText(buf); + buf.erase(headlen); + } + buf.append(" ").append(i->mask); + } + if (buf.length() > headlen) + user->SendText(buf); + } + public: CommandCheck(Module* parent) : Command(parent,"CHECK", 1) - , ban(parent, "ban") , snomaskmode(parent, "snomask") { flags_needed = 'o'; syntax = "<nickname>|<ip>|<hostmask>|<channel> <server>"; @@ -215,12 +234,10 @@ class CommandCheck : public Command i->first->ident.c_str(), i->first->dhost.c_str(), i->first->fullname.c_str()); } - // We know that the mode handler for bans is in the core and is derived from ListModeBase - ListModeBase* banlm = static_cast<ListModeBase*>(*ban); - banlm->DoSyncChannel(targchan, creator, user); + const ModeParser::ListModeList& listmodes = ServerInstance->Modes->GetListModes(); + for (ModeParser::ListModeList::const_iterator i = listmodes.begin(); i != listmodes.end(); ++i) + dumpListMode(user, checkstr, (*i)->GetList(targchan)); - // Show other listmodes as well - FOREACH_MOD(OnSyncChannel, (targchan,creator,user)); dumpExt(user, checkstr, targchan); } else @@ -268,22 +285,6 @@ class ModuleCheck : public Module { } - void ProtoSendMode(void* uv, TargetTypeFlags, void*, const std::vector<std::string>& result, const std::vector<TranslateType>&) - { - User* user = (User*)uv; - std::string checkstr(":"); - checkstr.append(ServerInstance->Config->ServerName); - checkstr.append(" 304 "); - checkstr.append(user->nick); - checkstr.append(" :CHECK modelist"); - for(unsigned int i=0; i < result.size(); i++) - { - checkstr.append(" "); - checkstr.append(result[i]); - } - user->SendText(checkstr); - } - Version GetVersion() CXX11_OVERRIDE { return Version("CHECK command, view user, channel, IP address or hostname information", VF_VENDOR|VF_OPTCOMMON); |