1
0
mirror of https://github.com/anope/anope.git synced 2026-06-25 12:36:38 +02:00
Files
anope/src/hostserv.cpp
T
2010-09-26 02:33:01 -04:00

177 lines
4.1 KiB
C++

/* HostServ functions
*
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#include "services.h"
#include "modules.h"
E void moduleAddHostServCmds();
/*************************************************************************/
void moduleAddHostServCmds()
{
ModuleManager::LoadModuleList(Config->HostServCoreModules);
}
/*************************************************************************/
/**
* Return information on memory use.
* Assumes pointers are valid.
**/
void get_hostserv_stats(long *nrec, long *memuse)
{
long count = 0, mem = 0;
for (nickalias_map::const_iterator it = NickAliasList.begin(), it_end = NickAliasList.end(); it != it_end; ++it)
{
NickAlias *na = it->second;
if (!na->hostinfo.HasVhost())
continue;
if (!na->hostinfo.GetIdent().empty())
mem += na->hostinfo.GetIdent().length();
if (!na->hostinfo.GetHost().empty())
mem += na->hostinfo.GetHost().length();
if (!na->hostinfo.GetCreator().empty())
mem += na->hostinfo.GetCreator().length();
++count;
}
*nrec = count;
*memuse = mem;
}
/*************************************************************************/
/**
* HostServ initialization.
* @return void
*/
void hostserv_init()
{
if (!Config->s_HostServ.empty())
moduleAddHostServCmds();
}
/*************************************************************************/
/** Set a vhost for the user
* @param ident The ident
* @param host The host
* @param creator Who created the vhost
* @param time When the vhost was craated
*/
void HostInfo::SetVhost(const Anope::string &ident, const Anope::string &host, const Anope::string &creator, time_t created)
{
Ident = ident;
Host = host;
Creator = creator;
Time = created;
}
/** Remove a users vhost
**/
void HostInfo::RemoveVhost()
{
Ident.clear();
Host.clear();
Creator.clear();
Time = 0;
}
/** Check if the user has a vhost
* @return true or false
*/
bool HostInfo::HasVhost() const
{
return !Host.empty();
}
/** Retrieve the vhost ident
* @return the ident
*/
const Anope::string &HostInfo::GetIdent() const
{
return Ident;
}
/** Retrieve the vhost host
* @return the host
*/
const Anope::string &HostInfo::GetHost() const
{
return Host;
}
/** Retrieve the vhost creator
* @return the creator
*/
const Anope::string &HostInfo::GetCreator() const
{
return Creator;
}
/** Retrieve when the vhost was crated
* @return the time it was created
*/
const time_t HostInfo::GetTime() const
{
return Time;
}
/*************************************************************************/
/* Start of Generic Functions */
/*************************************************************************/
/** Sync all vhosts in a group to the same thing
* @param na The nick with the vhost wanting to by synced
*/
void HostServSyncVhosts(NickAlias *na)
{
if (!na || !na->hostinfo.HasVhost())
return;
for (std::list<NickAlias *>::iterator it = na->nc->aliases.begin(), it_end = na->nc->aliases.end(); it != it_end; ++it)
{
NickAlias *nick = *it;
nick->hostinfo.SetVhost(na->hostinfo.GetIdent(), na->hostinfo.GetHost(), na->hostinfo.GetCreator());
}
}
/*************************************************************************/
void do_on_id(User *u)
{
if (!u)
return;
NickAlias *na = findnick(u->nick);
if (!na || !na->hostinfo.HasVhost())
return;
if (u->vhost.empty() || !u->vhost.equals_cs(na->hostinfo.GetHost()) || (!na->hostinfo.GetIdent().empty() && !u->GetVIdent().equals_cs(na->hostinfo.GetIdent())))
{
ircdproto->SendVhost(u, na->hostinfo.GetIdent(), na->hostinfo.GetHost());
if (ircd->vhost)
u->vhost = na->hostinfo.GetHost();
if (ircd->vident && !na->hostinfo.GetIdent().empty())
u->SetVIdent(na->hostinfo.GetIdent());
u->UpdateHost();
if (!na->hostinfo.GetIdent().empty())
u->SendMessage(HostServ, HOST_IDENT_ACTIVATED, na->hostinfo.GetIdent().c_str(), na->hostinfo.GetHost().c_str());
else
u->SendMessage(HostServ, HOST_ACTIVATED, na->hostinfo.GetHost().c_str());
}
}