syntax = "<host>";
}
- CmdResult Handle(const std::vector<std::string>& parameters, User* user) CXX11_OVERRIDE;
+ CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE;
};
class ModuleCloaking : public Module
if (u->IsModeSet(cu) && !cu.active)
{
u->SetMode(cu, false);
- u->WriteCommand("MODE", "-" + ConvToStr(cu.GetModeChar()));
+
+ if (!IS_LOCAL(u))
+ return;
+ Modes::ChangeList modechangelist;
+ modechangelist.push_remove(&cu);
+ ClientProtocol::Events::Mode modeevent(ServerInstance->FakeClient, NULL, u, modechangelist);
+ static_cast<LocalUser*>(u)->Send(modeevent);
}
cu.active = false;
}
suffix = tag->getString("suffix", ".IP");
std::string modestr = tag->getString("mode");
- if (modestr == "half")
+ if (stdalgo::string::equalsci(modestr, "half"))
{
mode = MODE_HALF_CLOAK;
domainparts = tag->getUInt("domainparts", 3, 1, 10);
}
- else if (modestr == "full")
+ else if (stdalgo::string::equalsci(modestr, "full"))
mode = MODE_OPAQUE;
else
throw ModuleException("Bad value for <cloak:mode>; must be half or full");
if (cloak)
return;
+ // TODO: decide how we are going to cloak AF_UNIX hostnames.
+ if (dest->client_sa.family() != AF_INET && dest->client_sa.family() != AF_INET6)
+ return;
+
cu.ext.set(dest, GenCloak(dest->client_sa, dest->GetIPString(), dest->GetRealHost()));
}
};
-CmdResult CommandCloak::Handle(const std::vector<std::string> ¶meters, User *user)
+CmdResult CommandCloak::Handle(User* user, const Params& parameters)
{
ModuleCloaking* mod = (ModuleCloaking*)(Module*)creator;
irc::sockets::sockaddrs sa;