-/* +------------------------------------+
- * | Inspire Internet Relay Chat Daemon |
- * +------------------------------------+
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
*
- * InspIRCd: (C) 2002-2010 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
+ * Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
+ * Copyright (C) 2008 Robin Burchell <robin+git@viroteck.net>
*
- * This program is free but copyrighted software; see
- * the file COPYING for details.
+ * This file is part of InspIRCd. InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
*
- * ---------------------------------------------------
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+
#include "inspircd.h"
#include "xline.h"
class ModuleXLineDB : public Module
{
- std::vector<XLine *> xlines;
bool reading_db; // If this is true, addlines are as a result of db reading, so don't bother flushing the db to disk.
// DO REMEMBER TO SET IT, otherwise it's annoying :P
public:
void OnAddLine(User* source, XLine* line)
{
ServerInstance->Logs->Log("m_xline_db",DEBUG, "xlinedb: Adding a line");
- xlines.push_back(line);
if (!reading_db)
{
void RemoveLine(XLine *line)
{
ServerInstance->Logs->Log("m_xline_db",DEBUG, "xlinedb: Removing a line");
- for (std::vector<XLine *>::iterator i = xlines.begin(); i != xlines.end(); i++)
- {
- if ((*i) == line)
- {
- xlines.erase(i);
- break;
- }
- }
-
WriteDatabase();
}
fprintf(f, "VERSION 1\n");
// Now, let's write.
- XLine *line;
- for (std::vector<XLine *>::iterator i = xlines.begin(); i != xlines.end(); i++)
+ std::vector<std::string> types = ServerInstance->XLines->GetAllTypes();
+ for (std::vector<std::string>::const_iterator it = types.begin(); it != types.end(); ++it)
{
- line = (*i);
- fprintf(f, "LINE %s %s %s %lu %lu :%s\n", line->type.c_str(), line->Displayable(),
- ServerInstance->Config->ServerName.c_str(), (unsigned long)line->set_time, (unsigned long)line->duration, line->reason.c_str());
+ XLineLookup* lookup = ServerInstance->XLines->GetAll(*it);
+ if (!lookup)
+ continue;
+
+ for (LookupIter i = lookup->begin(); i != lookup->end(); ++i)
+ {
+ XLine *line = i->second;
+ fprintf(f, "LINE %s %s %s %lu %lu :%s\n", line->type.c_str(), line->Displayable(),
+ ServerInstance->Config->ServerName.c_str(), (unsigned long)line->set_time, (unsigned long)line->duration, line->reason.c_str());
+ }
}
ServerInstance->Logs->Log("m_xline_db",DEBUG, "xlinedb: Finished writing XLines. Checking for error..");
{
ServerInstance->SNO->WriteToSnoMask('x', "database: Added a line of type %s", command_p[1].c_str());
}
+ else
+ delete xl;
}
}
virtual Version GetVersion()
{
- return Version("Keeps a dynamic log of all XLines created, and stores them in a seperate conf file (xline.db).", VF_VENDOR);
+ return Version("Keeps a dynamic log of all XLines created, and stores them in a separate conf file (xline.db).", VF_VENDOR);
}
};