/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2019 Matt Schatz <genius3000@g3k.solutions>
+ * Copyright (C) 2012-2013, 2017-2018, 2020 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
* Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
- * Copyright (C) 2004-2007 Craig Edwards <craigedwards@brainbox.cc>
- * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
* Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ * Copyright (C) 2006-2008 Robin Burchell <robin+git@viroteck.net>
+ * Copyright (C) 2004, 2006-2008, 2010 Craig Edwards <brain@inspircd.org>
*
* 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
/** XLine is the base class for ban lines such as G-lines and K-lines.
* Modules may derive from this, and their xlines will automatically be
* handled as expected by any protocol modules (e.g. m_spanningtree will
- * propogate them using AddLine). The process of translating a type+pattern
+ * propagate them using AddLine). The process of translating a type+pattern
* to a known line type is done by means of an XLineFactory object (see
* below).
*/
*/
time_t set_time;
- /** The duration of the ban, or 0 if permenant
+ /** The duration of the ban, or 0 if permanent
*/
unsigned long duration;
*/
~XLineManager();
- /** Split an ident and host into two seperate strings.
+ /** Split an ident and host into two separate strings.
* This allows for faster matching.
*/
IdentHostPair IdentSplit(const std::string &ident_and_host);
/** Delete an XLine
* @param hostmask The xline-specific string identifying the line, e.g. "*@foo"
* @param type The type of xline
+ * @param reason The xline reason, if it is being removed successfully
* @param user The user removing the line or NULL if its the local server
* @param simulate If this is true, don't actually remove the line, just return
* @return True if the line was deleted successfully
*/
- bool DelLine(const char* hostmask, const std::string &type, User* user, bool simulate = false);
+ bool DelLine(const char* hostmask, const std::string& type, std::string& reason, User* user, bool simulate = false);
/** Registers an xline factory.
* An xline factory is a class which when given a particular xline type,
/** Expire a line given two iterators which identify it in the main map.
* @param container Iterator to the first level of entries the map
* @param item Iterator to the second level of entries in the map
+ * @param silent If true, doesn't send an expiry SNOTICE.
*/
- void ExpireLine(ContainerIter container, LookupIter item);
+ void ExpireLine(ContainerIter container, LookupIter item, bool silent = false);
/** Apply any new lines that are pending to be applied.
* This will only apply lines in the pending_lines list, to save on
*/
void ApplyLines();
- /** Handle /STATS for a given type.
- * NOTE: Any items in the list for this particular line type which have expired
- * will be expired and removed before the list is displayed.
- * @param type The type of stats to show
- * @param numeric The numeric to give to each result line
- * @param stats Stats context
+ /** DEPRECATED: use the `bool InvokeStats(const std::string&, Stats::Context&)` overload instead. */
+ DEPRECATED_METHOD(void InvokeStats(const std::string& type, unsigned int numeric, Stats::Context& stats));
+
+ /** Generates a /STATS response for the given X-line type.
+ * @param type The type of X-line to look up.
+ * @param context The stats context to respond with.
+ * @return True if a response was sent; otherwise, false.
*/
- void InvokeStats(const std::string& type, unsigned int numeric, Stats::Context& stats);
+ bool InvokeStats(const std::string& type, Stats::Context& context);
- /** Clears any XLines which were added by the server configuration. */
- void ClearConfigLines();
+ /** Expire X-lines which were added by the server configuration and have been removed. */
+ void ExpireRemovedConfigLines(const std::string& type, const insp::flat_set<std::string>& configlines);
};