* ---------------------------------------------------
*/
-/* $Core */
-
#include "inspircd.h"
#include "xline.h"
#include "bancache.h"
+/** An XLineFactory specialized to generate GLine* pointers
+ */
+class GLineFactory : public XLineFactory
+{
+ public:
+ GLineFactory() : XLineFactory("G") { }
+
+ /** Generate a GLine
+ */
+ XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
+ {
+ IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask);
+ return new GLine(set_time, duration, source, reason, ih.first, ih.second);
+ }
+};
+
+/** An XLineFactory specialized to generate ELine* pointers
+ */
+class ELineFactory : public XLineFactory
+{
+ public:
+ ELineFactory() : XLineFactory("E") { }
+
+ /** Generate an ELine
+ */
+ XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
+ {
+ IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask);
+ return new ELine(set_time, duration, source, reason, ih.first, ih.second);
+ }
+};
+
+/** An XLineFactory specialized to generate KLine* pointers
+ */
+class KLineFactory : public XLineFactory
+{
+ public:
+ KLineFactory() : XLineFactory("K") { }
+
+ /** Generate a KLine
+ */
+ XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
+ {
+ IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask);
+ return new KLine(set_time, duration, source, reason, ih.first, ih.second);
+ }
+};
+
+/** An XLineFactory specialized to generate QLine* pointers
+ */
+class QLineFactory : public XLineFactory
+{
+ public:
+ QLineFactory() : XLineFactory("Q") { }
+
+ /** Generate a QLine
+ */
+ XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
+ {
+ return new QLine(set_time, duration, source, reason, xline_specific_mask);
+ }
+};
+
+/** An XLineFactory specialized to generate ZLine* pointers
+ */
+class ZLineFactory : public XLineFactory
+{
+ public:
+ ZLineFactory() : XLineFactory("Z") { }
+
+ /** Generate a ZLine
+ */
+ XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask)
+ {
+ return new ZLine(set_time, duration, source, reason, xline_specific_mask);
+ }
+};
+
+
/*
* This is now version 3 of the XLine subsystem, let's see if we can get it as nice and
* efficient as we can this time so we can close this file and never ever touch it again ..
if (ELines.empty())
return;
- for (std::vector<User*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++)
+ for (std::vector<LocalUser*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++)
{
User* u = (User*)(*u2);
}
}
- /*ELine* item = new ELine(ServerInstance, ServerInstance->Time(), duration, source, reason, ih.first.c_str(), ih.second.c_str());*/
+ /*ELine* item = new ELine(ServerInstance->Time(), duration, source, reason, ih.first.c_str(), ih.second.c_str());*/
XLineFactory* xlf = GetFactory(line->type);
if (!xlf)
return false;
void ELine::Unset()
{
/* remove exempt from everyone and force recheck after deleting eline */
- for (std::vector<User*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++)
+ for (std::vector<LocalUser*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++)
{
User* u = (User*)(*u2);
u->exempt = false;
// applies lines, removing clients and changing nicks etc as applicable
void XLineManager::ApplyLines()
{
- std::vector<User*>::reverse_iterator u2 = ServerInstance->Users->local_users.rbegin();
+ std::vector<LocalUser*>::reverse_iterator u2 = ServerInstance->Users->local_users.rbegin();
while (u2 != ServerInstance->Users->local_users.rend())
{
User* u = *u2++;
}
-XLineManager::XLineManager(InspIRCd* Instance) : ServerInstance(Instance)
+XLineManager::XLineManager()
{
- GFact = new GLineFactory(Instance);
- EFact = new ELineFactory(Instance);
- KFact = new KLineFactory(Instance);
- QFact = new QLineFactory(Instance);
- ZFact = new ZLineFactory(Instance);
+ GLineFactory* GFact;
+ ELineFactory* EFact;
+ KLineFactory* KFact;
+ QLineFactory* QFact;
+ ZLineFactory* ZFact;
+
+
+ GFact = new GLineFactory;
+ EFact = new ELineFactory;
+ KFact = new KLineFactory;
+ QFact = new QLineFactory;
+ ZFact = new ZLineFactory;
RegisterFactory(GFact);
RegisterFactory(EFact);
XLineManager::~XLineManager()
{
- UnregisterFactory(GFact);
- UnregisterFactory(EFact);
- UnregisterFactory(KFact);
- UnregisterFactory(QFact);
- UnregisterFactory(ZFact);
-
- delete GFact;
- delete EFact;
- delete KFact;
- delete QFact;
- delete ZFact;
+ const char gekqz[] = "GEKQZ";
+ for(unsigned int i=0; i < sizeof(gekqz); i++)
+ {
+ XLineFactory* xlf = GetFactory(std::string(1, gekqz[i]));
+ if (xlf)
+ UnregisterFactory(xlf);
+ delete xlf;
+ }
// Delete all existing XLines
for (XLineContainer::iterator i = lookup_lines.begin(); i != lookup_lines.end(); i++)
{
char sreason[MAXBUF];
snprintf(sreason, MAXBUF, "%s-Lined: %s", line.c_str(), this->reason.c_str());
- if (*ServerInstance->Config->MoronBanner)
- u->WriteServ("NOTICE %s :*** %s", u->nick.c_str(), ServerInstance->Config->MoronBanner);
+ if (!ServerInstance->Config->MoronBanner.empty())
+ u->WriteServ("NOTICE %s :*** %s", u->nick.c_str(), ServerInstance->Config->MoronBanner.c_str());
if (ServerInstance->Config->HideBans)
ServerInstance->Users->QuitUser(u, line + "-Lined", sreason);
void ELine::OnAdd()
{
/* When adding one eline, only check the one eline */
- for (std::vector<User*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++)
+ for (std::vector<LocalUser*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++)
{
User* u = (User*)(*u2);
if (this->Matches(u))