class CommandCheck : public Command
{
public:
- std::set<std::string> meta_seen;
- CommandCheck (InspIRCd* Instance, Module* parent) : Command(Instance,parent,"CHECK", "o", 1)
+ CommandCheck(Module* parent) : Command(parent,"CHECK", 1)
{
- syntax = "<nickname>|<ip>|<hostmask>|<channel> <server>";
+ flags_needed = 'o'; syntax = "<nickname>|<ip>|<hostmask>|<channel> <server>";
}
std::string timestring(time_t time)
return std::string(timebuf);
}
- void dumpExtra(User* user, std::string checkstr, Extensible* ext)
+ void dumpExt(User* user, std::string checkstr, Extensible* ext)
{
- std::deque<std::string> extlist;
- ext->GetExtList(extlist);
std::stringstream dumpkeys;
- for(std::deque<std::string>::iterator i = extlist.begin(); i != extlist.end(); i++)
+ for(ExtensibleStore::const_iterator i = ext->GetExtList().begin(); i != ext->GetExtList().end(); i++)
{
- if (meta_seen.find(*i) == meta_seen.end())
- dumpkeys << " " << *i;
+ ExtensionItem* item = Extensible::GetItem(i->first);
+ std::string value;
+ if (item)
+ value = item->serialize(FORMAT_USER, ext, i->second);
+ if (value.empty())
+ dumpkeys << " " << i->first;
+ else
+ ServerInstance->DumpText(user, checkstr + " meta:" + i->first + " " + value);
}
- meta_seen.clear();
if (!dumpkeys.str().empty())
ServerInstance->DumpText(user,checkstr + " metadata", dumpkeys);
}
else
ServerInstance->DumpText(user, checkstr + " onip " + targuser->GetIPString());
- chliststr = targuser->ChannelList(targuser);
+ for (UCListIter i = targuser->chans.begin(); i != targuser->chans.end(); i++)
+ {
+ Channel* c = *i;
+ chliststr.append(c->GetPrefixChar(targuser)).append(c->name).append(" ");
+ }
+
std::stringstream dump(chliststr);
ServerInstance->DumpText(user,checkstr + " onchans", dump);
- FOREACH_MOD_I(ServerInstance,I_OnSyncUser,OnSyncUser(targuser,creator,(void*)user));
- dumpExtra(user, checkstr, targuser);
+ dumpExt(user, checkstr, targuser);
}
else if (targchan)
{
/* now the ugly bit, spool current members of a channel. :| */
- CUList *ulist= targchan->GetUsers();
+ const UserMembList *ulist= targchan->GetUsers();
/* note that unlike /names, we do NOT check +i vs in the channel */
- for (CUList::iterator i = ulist->begin(); i != ulist->end(); i++)
+ for (UserMembCIter i = ulist->begin(); i != ulist->end(); i++)
{
char tmpbuf[MAXBUF];
/*
ServerInstance->DumpText(user, checkstr + " member " + tmpbuf);
}
- FOREACH_MOD_I(ServerInstance,I_OnSyncChannel,OnSyncChannel(targchan,creator,(void*)user));
- dumpExtra(user, checkstr, targchan);
+ dumpExt(user, checkstr, targchan);
}
else
{
private:
CommandCheck mycommand;
public:
- ModuleCheck(InspIRCd* Me) : Module(Me), mycommand(Me, this)
+ ModuleCheck() : mycommand(this)
{
ServerInstance->AddCommand(&mycommand);
}
- virtual ~ModuleCheck()
- {
- }
-
- virtual Version GetVersion()
- {
- return Version("$Id$", VF_VENDOR|VF_OPTCOMMON, API_VERSION);
- }
-
- virtual void ProtoSendMetaData(void* opaque, Extensible* target, const std::string& name, const std::string& value)
+ ~ModuleCheck()
{
- User* user = static_cast<User*>(opaque);
- ServerInstance->DumpText(user, std::string(":") + ServerInstance->Config->ServerName + " 304 " + std::string(user->nick)
- + " :CHECK meta:" + name + " " + value);
- mycommand.meta_seen.insert(name);
}
- virtual std::string ProtoTranslate(Extensible* item)
+ Version GetVersion()
{
- User* u = dynamic_cast<User*>(item);
- Channel* c = dynamic_cast<Channel*>(item);
- if (u)
- return u->nick;
- if (c)
- return c->name;
- return "?";
+ return Version("CHECK command, view user/channel details", VF_VENDOR|VF_OPTCOMMON);
}
};