#include "../lib/sstring.h"
#include "../nick/nick.h"
#include "../channel/channel.h"
+#include "../whowas/whowas.h"
#define SNIRCD_VERSION 134
#define MAXGLINEUSERHITS 500
#define MAXGLINECHANNELHITS 50
+#define MAXGLINELOG 500
+
#define GLINE_IGNORE_TRUST 1
#define GLINE_ALWAYS_NICK 2
#define GLINE_ALWAYS_USER 4
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;
extern gline *glinelist;
+extern glinebuf *glinebuflog[MAXGLINELOG];
+extern int glinebuflogoffset;
/* glines.c */
gline *findgline(const char *);
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 *);
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);
-void glinebufcounthits(glinebuf *gbuf, int *users, int *channels, nick *spewto);
-int glinebufchecksane(glinebuf *gbuf, nick *spewto, int overridesanity, int overridelimit, int spewhits);
+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 glinebufchecksane(glinebuf *gbuf, nick *spewto, int overridesanity, int overridelimit);
void glinebufspew(glinebuf *gbuf, nick *spewto);
-void glinebufflush(glinebuf *gbuf, int propagate);
-void glinebufabandon(glinebuf *gbuf);
+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 *);