* See: http://www.inspircd.org/wiki/index.php/Credits
*
* This program is free but copyrighted software; see
* See: http://www.inspircd.org/wiki/index.php/Credits
*
* This program is free but copyrighted software; see
+
+ i = safei;
+ }
+ }
+}
+
+
+XLineLookup* XLineManager::GetAll(const std::string &type)
+{
+ ContainerIter n = lookup_lines.find(type);
+
+ if (n == lookup_lines.end())
+ return NULL;
+
+ LookupIter safei;
+ const time_t current = ServerInstance->Time();
+
+ /* Expire any dead ones, before sending */
+ for (LookupIter x = n->second.begin(); x != n->second.end(); )
+ {
+ safei = x;
+ safei++;
+ if (x->second->duration && current > x->second->expiry)
+ {
+ ExpireLine(n, x);
if (DelLine(line->Displayable(), line->type, user, true))
return false;
if (DelLine(line->Displayable(), line->type, user, true))
return false;
// removes lines that have expired
void XLineManager::ExpireLine(ContainerIter container, LookupIter item)
{
// removes lines that have expired
void XLineManager::ExpireLine(ContainerIter container, LookupIter item)
{
- /* TODO: Can we skip this loop by having a 'pending' field in the XLine class, which is set when a line
- * is pending, cleared when it is no longer pending, so we skip over this loop if its not pending?
- * -- Brain
- */
- std::vector<XLine*>::iterator pptr = std::find(pending_lines.begin(), pending_lines.end(), item->second);
- if (pptr != pending_lines.end())
- pending_lines.erase(pptr);
+ /* TODO: Can we skip this loop by having a 'pending' field in the XLine class, which is set when a line
+ * is pending, cleared when it is no longer pending, so we skip over this loop if its not pending?
+ * -- Brain
+ */
+ std::vector<XLine*>::iterator pptr = std::find(pending_lines.begin(), pending_lines.end(), item->second);
+ if (pptr != pending_lines.end())
+ pending_lines.erase(pptr);
}
// applies lines, removing clients and changing nicks etc as applicable
void XLineManager::ApplyLines()
{
}
// applies lines, removing clients and changing nicks etc as applicable
void XLineManager::ApplyLines()
{
void XLineManager::InvokeStats(const std::string &type, int numeric, User* user, string_list &results)
{
std::string sn = ServerInstance->Config->ServerName;
ContainerIter n = lookup_lines.find(type);
void XLineManager::InvokeStats(const std::string &type, int numeric, User* user, string_list &results)
{
std::string sn = ServerInstance->Config->ServerName;
ContainerIter n = lookup_lines.find(type);
- for (LookupIter i = list.begin(); i != list.end(); i++)
- results.push_back(sn+" "+ConvToStr(numeric)+" "+user->nick+" :"+i->second->Displayable()+" "+
+ for (LookupIter i = list.begin(); i != list.end(); )
+ {
+ safei = i;
+ safei++;
+
+ if (i->second->duration && current > i->second->expiry)
+ {
+ ExpireLine(n, i);
+ }
+ else
+ results.push_back(sn+" "+ConvToStr(numeric)+" "+user->nick+" :"+i->second->Displayable()+" "+
{
char reason[MAXBUF];
snprintf(reason, MAXBUF, "%s-Lined: %s", line.c_str(), this->reason);
{
char reason[MAXBUF];
snprintf(reason, MAXBUF, "%s-Lined: %s", line.c_str(), this->reason);
User::QuitUser(ServerInstance, u, line + "-Lined", reason);
else
User::QuitUser(ServerInstance, u, reason);
User::QuitUser(ServerInstance, u, line + "-Lined", reason);
else
User::QuitUser(ServerInstance, u, reason);