mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-12 12:09:03 -04:00
Tidyup of m_hostchange to not use configreader on each connection!
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3452 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
9501e825f8
commit
71a86d7d6b
@ -23,12 +23,22 @@ using namespace std;
|
|||||||
|
|
||||||
/* $ModDesc: Provides masking of user hostnames in a different way to m_cloaking */
|
/* $ModDesc: Provides masking of user hostnames in a different way to m_cloaking */
|
||||||
|
|
||||||
|
class Host
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::string action;
|
||||||
|
std::string newhost;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::map<std::string,Host*> hostchanges_t;
|
||||||
|
|
||||||
class ModuleHostChange : public Module
|
class ModuleHostChange : public Module
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Server *Srv;
|
Server *Srv;
|
||||||
ConfigReader *Conf;
|
ConfigReader *Conf;
|
||||||
|
hostchanges_t hostchanges;
|
||||||
std::string MySuffix;
|
std::string MySuffix;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -37,7 +47,7 @@ class ModuleHostChange : public Module
|
|||||||
{
|
{
|
||||||
Srv = Me;
|
Srv = Me;
|
||||||
Conf = new ConfigReader;
|
Conf = new ConfigReader;
|
||||||
MySuffix = Conf->ReadValue("host","suffix",0);
|
OnRehash("");
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~ModuleHostChange()
|
virtual ~ModuleHostChange()
|
||||||
@ -60,6 +70,21 @@ class ModuleHostChange : public Module
|
|||||||
delete Conf;
|
delete Conf;
|
||||||
Conf = new ConfigReader;
|
Conf = new ConfigReader;
|
||||||
MySuffix = Conf->ReadValue("host","suffix",0);
|
MySuffix = Conf->ReadValue("host","suffix",0);
|
||||||
|
for (hostchanges_t::iterator i = hostchanges.begin(); i != hostchanges.end(); i++)
|
||||||
|
{
|
||||||
|
delete i->second;
|
||||||
|
}
|
||||||
|
hostchanges.clear();
|
||||||
|
for (int index = 0; index < Conf->Enumerate("hostchange"); index++)
|
||||||
|
{
|
||||||
|
std::string mask = Conf->ReadValue("hostchange","mask",index);
|
||||||
|
std::string action = Conf->ReadValue("hostchange","action",index);
|
||||||
|
std::string newhost = Conf->ReadValue("hostchange","value",index);
|
||||||
|
Host* x = new Host;
|
||||||
|
x->action = action;
|
||||||
|
x->newhost = newhost;
|
||||||
|
hostchanges[mask] = x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual Version GetVersion()
|
virtual Version GetVersion()
|
||||||
@ -71,23 +96,22 @@ class ModuleHostChange : public Module
|
|||||||
|
|
||||||
virtual void OnUserConnect(userrec* user)
|
virtual void OnUserConnect(userrec* user)
|
||||||
{
|
{
|
||||||
for (int index = 0; index < Conf->Enumerate("hostchange"); index++)
|
for (hostchanges_t::iterator i = hostchanges.begin(); i != hostchanges.end(); i++)
|
||||||
{
|
{
|
||||||
std::string mask = Conf->ReadValue("hostchange","mask",index);
|
if (Srv->MatchText(std::string(user->ident)+"@"+std::string(user->host),i->first))
|
||||||
if (Srv->MatchText(std::string(user->ident)+"@"+std::string(user->host),mask))
|
|
||||||
{
|
{
|
||||||
std::string newhost = "";
|
Host* h = (Host*)i->second;
|
||||||
// host of new user matches a hostchange tag's mask
|
// host of new user matches a hostchange tag's mask
|
||||||
std::string action = Conf->ReadValue("hostchange","action",index);
|
std::string newhost = "";
|
||||||
if (action == "set")
|
if (h->action == "set")
|
||||||
{
|
{
|
||||||
newhost = Conf->ReadValue("hostchange","value",index);
|
newhost = h->newhost;
|
||||||
}
|
}
|
||||||
else if (action == "suffix")
|
else if (h->action == "suffix")
|
||||||
{
|
{
|
||||||
newhost = MySuffix;
|
newhost = MySuffix;
|
||||||
}
|
}
|
||||||
else if (action == "addnick")
|
else if (h->action == "addnick")
|
||||||
{
|
{
|
||||||
// first take their nick and strip out non-dns, leaving just [A-Z0-9\-]
|
// first take their nick and strip out non-dns, leaving just [A-Z0-9\-]
|
||||||
std::string complete = "";
|
std::string complete = "";
|
||||||
@ -108,7 +132,7 @@ class ModuleHostChange : public Module
|
|||||||
}
|
}
|
||||||
if (newhost != "")
|
if (newhost != "")
|
||||||
{
|
{
|
||||||
Srv->SendServ(user->fd,"NOTICE "+std::string(user->nick)+" :Setting your VHost: " + newhost);
|
Srv->SendServ(user->fd,"NOTICE "+std::string(user->nick)+" :Setting your virtual host: " + newhost);
|
||||||
Srv->ChangeHost(user,newhost);
|
Srv->ChangeHost(user,newhost);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user