]> jfr.im git - irc/quakenet/newserv.git/blobdiff - glines/glines.h
Merge branch 'master' into chanserv-live
[irc/quakenet/newserv.git] / glines / glines.h
index c64d601e56ddd3ceb7c4867c75ca559e8bdbbf13..a5d29d723d7c8a82c5edcf0802195c23e287ff46 100644 (file)
@@ -4,23 +4,25 @@
 #include "../lib/sstring.h"
 #include "../nick/nick.h"
 #include "../channel/channel.h"
+#include "../whowas/whowas.h"
 
-#define SNIRCD_13
-#undef SNIRCD_14
+#define SNIRCD_VERSION 134
 
 #define MAXUSERGLINEUSERHITS        100
 #define MAXUSERGLINECHANNELHITS     10
-#define MAXUSERGLINEDURATION        90 * 86400
-#define MINUSERGLINEREASON          10
+
+#define MAXGLINEDURATION            90 * 86400
+#define MINGLINEREASONLEN           10
 
 #define MAXGLINEUSERHITS     500
 #define MAXGLINECHANNELHITS  50
 
+#define MAXGLINELOG          500
+
 #define GLINE_IGNORE_TRUST   1
 #define GLINE_ALWAYS_NICK    2
 #define GLINE_ALWAYS_USER    4
-#define GLINE_NO_LIMIT       8
-#define GLINE_SIMULATE       16
+#define GLINE_SIMULATE       8
 
 #define GLINE_HOSTMASK    1   /* Gline includes a host mask */
 #define GLINE_IPMASK      2   /* Gline includes an CIDR mask */
@@ -28,7 +30,9 @@
 #define GLINE_REALNAME    8   /* Gline includes a realname */
 #define GLINE_ACTIVATE    16  /* Gline should be activated */
 #define GLINE_DEACTIVATE  32  /* Gline should be deactivated */
-#define GLINE_ACTIVE      64  /* Gline is active */
+#define GLINE_DESTROY     64  /* Gline should be destroyed */
+#define GLINE_ACTIVE      128 /* Gline is active */
+#define GLINE_DESTROYED   256 /* Gline is destroyed */
 
 /**
  * glist flags
@@ -71,46 +75,74 @@ typedef struct gline {
   time_t lifetime;
 
   unsigned int flags;
+  int glinebufid;
 
   struct gline *next;
 } gline;
 
 typedef struct glinebuf {
-  gline *head;
-  int merge;
+  int id;
+  sstring *comment;
+  time_t commit;
+  time_t amend;
+
+  gline *glines;
+
+  int hitsvalid;
+  int userhits;
+  int channelhits;
+
+  array hits;
 } glinebuf;
 
+typedef struct glineinfo {
+  int hits;
+  char *mask;
+} glineinfo;
+
 extern gline *glinelist;
+extern glinebuf *glinebuflog[MAXGLINELOG];
+extern int glinebuflogoffset;
 
 /* glines.c */
 gline *findgline(const char *);
 void gline_propagate(gline *);
-gline *gline_deactivate(gline *, time_t, int);
-gline *gline_activate(gline *agline, time_t lastmod, int propagate);
+void gline_deactivate(gline *, time_t, int);
+void gline_destroy(gline *, time_t, int);
+void gline_activate(gline *agline, time_t lastmod, int propagate);
 int glineequal(gline *, gline *);
 int gline_match_mask(gline *gla, gline *glb);
 int gline_match_nick(gline *gl, nick *np);
 int gline_match_channel(gline *gl, channel *cp);
 int isglinesane(gline *gl, const char **hint);
+gline *glinedup(gline *gl);
 
 /* glines_formats.c */
 gline *makegline(const char *);
 char *glinetostring(gline *g);
 
 /* glines_util.c */
-int glinebyip(const char *user, struct irc_in_addr *ip, unsigned char bits, int flags, const char *reason, int duration, const char *creator);
-int glinebynick(nick *np, int flags, const char *reason, int duration, const char *creator);
+int glinebyip(const char *user, struct irc_in_addr *ip, unsigned char bits, int duration, const char *reason, int flags, const char *creator);
+glineinfo *glinebynickex(nick *np, int duration, const char *reason, int flags, const char *creator);
+int glinebynick(nick *np, int duration, const char *reason, int flags, const char *creator);
+void glineunsetmask(const char *mask);
 
 /* glines_buf.c */
-void glinebufinit(glinebuf *gbuf, int merge);
+void glinebufinit(glinebuf *gbuf, int id);
 gline *glinebufadd(glinebuf *gbuf, const char *mask, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime);
-void glinebufaddbyip(glinebuf *gbuf, const char *user, struct irc_in_addr *ip, unsigned char bits, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime);
-void glinebufaddbynick(glinebuf *gbuf, nick *, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime);
+char *glinebufaddbyip(glinebuf *gbuf, const char *user, struct irc_in_addr *ip, unsigned char bits, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime);
+char *glinebufaddbynick(glinebuf *gbuf, nick *, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime);
+void glinebufaddbywhowas(glinebuf *gbuf, whowas *, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime);
 void glinebufcounthits(glinebuf *gbuf, int *users, int *channels);
-int glinebufsanitize(glinebuf *gbuf);
-void glinebufspew(glinebuf *gbuf, nick *np);
-void glinebufflush(glinebuf *gbuf, int propagate);
-void glinebufabandon(glinebuf *gbuf);
+int glinebufchecksane(glinebuf *gbuf, nick *spewto, int overridesanity, int overridelimit);
+void glinebufspew(glinebuf *gbuf, nick *spewto);
+void glinebufmerge(glinebuf *gbuf);
+int glinebufcommit(glinebuf *gbuf, int propagate);
+void glinebufabort(glinebuf *gbuf);
+int glinebufundo(int id);
+void glinebufcommentf(glinebuf *gbuf, const char *format, ...);
+void glinebufcommentv(glinebuf *gbuf, const char *prefix, int cargc, char **cargv);
+int glinebufwritelog(glinebuf *gbuf, int propagating);
 
 /* glines_alloc.c */
 void freegline(gline *);