#include "helperfuncs.h"
#include "hashcomp.h"
#include "typedefs.h"
+#include "configreader.h"
#include "cull_list.h"
extern ServerConfig *Config;
* very efficient. I have improved the efficiency of the algorithm in two ways:
*
* (1) There are now two lists of items for each linetype. One list holds temporary
- * items, and the other list holds permenant items (ones which will expire).
- * Items which are on the permenant list are NEVER checked at all by the
+ * items, and the other list holds permanent items (ones which will expire).
+ * Items which are on the permanent list are NEVER checked at all by the
* expire_lines() function.
* (2) The temporary xline lists are always kept in strict numerical order, keyed by
* current time + duration. This means that the line which is due to expire the
if ((glines.empty()) && (pglines.empty()))
return NULL;
for (std::vector<GLine>::iterator i = glines.begin(); i != glines.end(); i++)
- if (match(host,i->hostmask))
+ if (match(host,i->hostmask, true))
return i->reason;
for (std::vector<GLine>::iterator i = pglines.begin(); i != pglines.end(); i++)
- if (match(host,i->hostmask))
+ if (match(host,i->hostmask, true))
return i->reason;
return NULL;
}
char host2[MAXBUF];
snprintf(host2,MAXBUF,"*@%s",host);
for (std::vector<ELine>::iterator i = elines.begin(); i != elines.end(); i++)
- if ((match(host,i->hostmask)) || (match(host2,i->hostmask)))
+ if ((match(host,i->hostmask)) || (match(host2,i->hostmask, true)))
return i->reason;
for (std::vector<ELine>::iterator i = pelines.begin(); i != pelines.end(); i++)
- if ((match(host,i->hostmask)) || (match(host2,i->hostmask)))
+ if ((match(host,i->hostmask)) || (match(host2,i->hostmask, true)))
return i->reason;
return NULL;
}
-void gline_set_creation_time(char* host, time_t create_time)
+void gline_set_creation_time(const char* host, time_t create_time)
{
for (std::vector<GLine>::iterator i = glines.begin(); i != glines.end(); i++)
{
return ;
}
-void eline_set_creation_time(char* host, time_t create_time)
+void eline_set_creation_time(const char* host, time_t create_time)
{
for (std::vector<ELine>::iterator i = elines.begin(); i != elines.end(); i++)
{
return;
}
-void qline_set_creation_time(char* nick, time_t create_time)
+void qline_set_creation_time(const char* nick, time_t create_time)
{
for (std::vector<QLine>::iterator i = qlines.begin(); i != qlines.end(); i++)
{
return;
}
-void zline_set_creation_time(char* ip, time_t create_time)
+void zline_set_creation_time(const char* ip, time_t create_time)
{
for (std::vector<ZLine>::iterator i = zlines.begin(); i != zlines.end(); i++)
{
if ((zlines.empty()) && (pzlines.empty()))
return NULL;
for (std::vector<ZLine>::iterator i = zlines.begin(); i != zlines.end(); i++)
- if (match(ipaddr,i->ipaddr))
+ if (match(ipaddr,i->ipaddr, true))
return i->reason;
for (std::vector<ZLine>::iterator i = pzlines.begin(); i != pzlines.end(); i++)
- if (match(ipaddr,i->ipaddr))
+ if (match(ipaddr,i->ipaddr, true))
return i->reason;
return NULL;
}
if ((klines.empty()) && (pklines.empty()))
return NULL;
for (std::vector<KLine>::iterator i = klines.begin(); i != klines.end(); i++)
- if (match(host,i->hostmask))
+ if (match(host,i->hostmask, true))
return i->reason;
for (std::vector<KLine>::iterator i = pklines.begin(); i != pklines.end(); i++)
- if (match(host,i->hostmask))
+ if (match(host,i->hostmask, true))
return i->reason;
return NULL;
}
}
if ((What & APPLY_ZLINES) && (zlines.size() || pzlines.size()))
{
- if ((check = matches_zline((char*)inet_ntoa(u->ip4))))
+ if ((check = matches_zline(u->GetIPString())))
{
snprintf(reason,MAXBUF,"Z-Lined: %s",check);
Goners->AddItem(u,reason);
DELETE(Goners);
}
-void stats_k(userrec* user)
+void stats_k(userrec* user, string_list &results)
{
+ std::string sn = Config->ServerName;
for (std::vector<KLine>::iterator i = klines.begin(); i != klines.end(); i++)
- WriteServ(user->fd,"216 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 216 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
for (std::vector<KLine>::iterator i = pklines.begin(); i != pklines.end(); i++)
- WriteServ(user->fd,"216 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 216 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
}
-void stats_g(userrec* user)
+void stats_g(userrec* user, string_list &results)
{
+ std::string sn = Config->ServerName;
for (std::vector<GLine>::iterator i = glines.begin(); i != glines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
for (std::vector<GLine>::iterator i = pglines.begin(); i != pglines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
}
-void stats_q(userrec* user)
+void stats_q(userrec* user, string_list &results)
{
+ std::string sn = Config->ServerName;
for (std::vector<QLine>::iterator i = qlines.begin(); i != qlines.end(); i++)
- WriteServ(user->fd,"217 %s :%s %d %d %s :%s",user->nick,i->nick,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 217 "+user->nick+" :"+i->nick+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
for (std::vector<QLine>::iterator i = pqlines.begin(); i != pqlines.end(); i++)
- WriteServ(user->fd,"217 %s :%s %d %d %s :%s",user->nick,i->nick,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 217 "+user->nick+" :"+i->nick+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
}
-void stats_z(userrec* user)
+void stats_z(userrec* user, string_list &results)
{
+ std::string sn = Config->ServerName;
for (std::vector<ZLine>::iterator i = zlines.begin(); i != zlines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->ipaddr,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->ipaddr+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
for (std::vector<ZLine>::iterator i = pzlines.begin(); i != pzlines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->ipaddr,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->ipaddr+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
}
-void stats_e(userrec* user)
+void stats_e(userrec* user, string_list &results)
{
+ std::string sn = Config->ServerName;
for (std::vector<ELine>::iterator i = elines.begin(); i != elines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
for (std::vector<ELine>::iterator i = pelines.begin(); i != pelines.end(); i++)
- WriteServ(user->fd,"223 %s :%s %d %d %s :%s",user->nick,i->hostmask,i->set_time,i->duration,i->source,i->reason);
+ results.push_back(sn+" 223 "+user->nick+" :"+i->hostmask+" "+ConvToStr(i->set_time)+" "+ConvToStr(i->duration)+" "+i->source+" :"+i->reason);
}