*/
class CoreExport XLine : public classbase
{
- public:
+ protected:
+
+ InspIRCd* ServerInstance;
+ void DefaultApply(User* u, char line);
+
+ public:
/** Create an XLine.
* @param s_time The set time
* @param src The sender of the xline
* @param re The reason of the xline
*/
- XLine(time_t s_time, long d, const char* src, const char* re)
- : set_time(s_time), duration(d)
+ XLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re)
+ : ServerInstance(Instance), set_time(s_time), duration(d)
{
source = strdup(src);
reason = strdup(re);
/** Returns true whether or not the given user is covered by this line.
*/
- virtual bool Matches(User *u);
+ virtual bool Matches(User *u) = 0;
+
+ virtual bool Matches(const std::string &str);
+
+ virtual void Apply(User* u);
/** The time the line was added.
*/
/** Expiry time
*/
time_t expiry;
+
+ /** Q, K, etc. Don't change this. Constructors set it.
+ */
+ char type;
};
/** KLine class
* @param ident Ident to match
* @param host Host to match
*/
- KLine(time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(s_time, d, src, re)
+ KLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(Instance, s_time, d, src, re)
{
identmask = strdup(ident);
hostmask = strdup(host);
+ type = 'K';
}
/** Destructor
free(hostmask);
}
+ virtual bool Matches(User *u);
+
+ virtual void Apply(User* u);
+
/** Ident mask
*/
char* identmask;
* @param ident Ident to match
* @param host Host to match
*/
- GLine(time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(s_time, d, src, re)
+ GLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(Instance, s_time, d, src, re)
{
identmask = strdup(ident);
hostmask = strdup(host);
+ type = 'G';
}
/** Destructor
free(hostmask);
}
+ virtual bool Matches(User *u);
+
+ virtual void Apply(User* u);
+
/** Ident mask
*/
char* identmask;
* @param ident Ident to match
* @param host Host to match
*/
- ELine(time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(s_time, d, src, re)
+ ELine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(Instance, s_time, d, src, re)
{
identmask = strdup(ident);
hostmask = strdup(host);
+ type = 'E';
}
~ELine()
free(hostmask);
}
+ virtual bool Matches(User *u);
+
/** Ident mask
*/
char* identmask;
* @param re The reason of the xline
* @param ip IP to match
*/
- ZLine(time_t s_time, long d, const char* src, const char* re, const char* ip) : XLine(s_time, d, src, re)
+ ZLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const char* ip) : XLine(Instance, s_time, d, src, re)
{
ipaddr = strdup(ip);
+ type = 'Z';
}
/** Destructor
free(ipaddr);
}
+ virtual bool Matches(User *u);
+
+ virtual bool Matches(const std::string &str);
+
+ virtual void Apply(User* u);
+
/** IP mask
*/
char* ipaddr;
* @param re The reason of the xline
* @param nickname Nickname to match
*/
- QLine(time_t s_time, long d, const char* src, const char* re, const char* nickname) : XLine(s_time, d, src, re)
+ QLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const char* nickname) : XLine(Instance, s_time, d, src, re)
{
nick = strdup(nickname);
+ type = 'Q';
}
/** Destructor
~QLine()
{
free(nick);
+
}
+ virtual bool Matches(User *u);
+
+ virtual bool Matches(const std::string &str);
+
+ virtual void Apply(User* u);
/** Nickname mask
*/
/** This functor is used by the std::sort() function to keep all lines in order
*/
static bool XSortComparison (const XLine *one, const XLine *two);
+
+ /** Used to hold XLines which have not yet been applied.
+ */
+ std::vector<XLine *> pending_lines;
public:
/* Lists for temporary lines with an expiry time */
*/
GLine* matches_gline(User* user);
- /** Check if a IP matches a ZLine
- * @param ipaddr The IP to check against
+ /** Check if a user's IP matches a ZLine
+ * @param user The user to check against
* @return The reason for the line if there is a match, or NULL if there is no match
*/
- ZLine* matches_zline(const char* ipaddr);
+ ZLine* matches_zline(User *user);
/** Check if a hostname matches a KLine
* @param user The user to check against