X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_check.cpp;h=ba20f9445ca039db32e6980f08a98f70e86eee52;hb=a8b146419b2aae36da25b7202292528efd3158a9;hp=562a9f661cba83ab0f4d4e493275a260507a79c5;hpb=fd0fa86da89ab4cefa778307088ef2552a05a170;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp index 562a9f661..ba20f9445 100644 --- a/src/modules/m_check.cpp +++ b/src/modules/m_check.cpp @@ -27,11 +27,44 @@ */ class CommandCheck : public Command { - ModeReference ban; + UserModeReference snomaskmode; + + std::string GetSnomasks(User* user) + { + std::string ret; + if (snomaskmode) + ret = snomaskmode->GetUserParameter(user); + + if (ret.empty()) + ret = "+"; + 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 = "||| "; } @@ -92,8 +125,8 @@ class CommandCheck : public Command user->SendText(checkstr + " realnuh " + targuser->GetFullRealHost()); user->SendText(checkstr + " realname " + targuser->fullname); user->SendText(checkstr + " modes +" + targuser->FormatModes()); - user->SendText(checkstr + " snomasks +" + targuser->FormatNoticeMasks()); - user->SendText(checkstr + " server " + targuser->server); + user->SendText(checkstr + " snomasks " + GetSnomasks(targuser)); + user->SendText(checkstr + " server " + targuser->server->GetName()); user->SendText(checkstr + " uid " + targuser->uuid); user->SendText(checkstr + " signon " + timestring(targuser->signon)); user->SendText(checkstr + " nickts " + timestring(targuser->age)); @@ -147,8 +180,8 @@ class CommandCheck : public Command if (loctarg) { - user->SendText(checkstr + " clientaddr " + irc::sockets::satouser(loctarg->client_sa)); - user->SendText(checkstr + " serveraddr " + irc::sockets::satouser(loctarg->server_sa)); + user->SendText(checkstr + " clientaddr " + loctarg->client_sa.str()); + user->SendText(checkstr + " serveraddr " + loctarg->server_sa.str()); std::string classname = loctarg->GetClass()->name; if (!classname.empty()) @@ -159,8 +192,10 @@ class CommandCheck : public Command for (UCListIter i = targuser->chans.begin(); i != targuser->chans.end(); i++) { - Channel* c = *i; - chliststr.append(c->GetPrefixChar(targuser)).append(c->name).append(" "); + Membership* memb = *i; + Channel* c = memb->chan; + chliststr.push_back(memb->GetPrefixChar()); + chliststr.append(c->name).push_back(' '); } std::stringstream dump(chliststr); @@ -197,16 +232,14 @@ class CommandCheck : public Command */ user->SendText("%s member %-3lu %s%s (%s@%s) %s ", checkstr.c_str(), ServerInstance->Users->GlobalCloneCount(i->first), - targchan->GetAllPrefixChars(i->first), i->first->nick.c_str(), + i->second->GetAllPrefixChars(), i->first->nick.c_str(), 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(*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(I_OnSyncChannel,OnSyncChannel(targchan,creator,user)); dumpExt(user, checkstr, targchan); } else @@ -254,27 +287,6 @@ class ModuleCheck : public Module { } - void init() CXX11_OVERRIDE - { - ServerInstance->Modules->AddService(mycommand); - } - - void ProtoSendMode(void* uv, TargetTypeFlags, void*, const std::vector& result, const std::vector&) - { - 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);