#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
-#include <mysql/mysql.h>
#include <errno.h>
#include <pcre.h>
#include <string.h>
#define RG_MINIMUM_DELAY_TIME 5
#define RG_MAXIMUM_RAND_TIME 15
#define RG_EXPIRY_TIME_DEFAULT 1800
+#define RG_NETWORK_WIDE_MAX_GLINES_PER_8_SEC 625*8 /* 5000 / 8 */
#define RGStringise(x) #x
#define RGBuildHostname(buf, np) snprintf(buf, sizeof(buf), "%s!%s@%s\r%s", np->nick, np->ident, np->host->name->content, np->realname->name->content);
#define RGMasksEqual(a, b) !strcasecmp(a, b)
-typedef MYSQL_RES *rg_sqlresult;
-typedef MYSQL_ROW rg_sqlrow;
-typedef MYSQL rg_sqlconnection;
-
typedef struct rg_struct {
int id; /* database id */
sstring *mask; /* gline mask */
pcre *regex; /* pcre expression */
pcre_extra *hint; /* pcre hint */
long glineid; /* gline ID */
+ const char *class; /* class of gline */
+ unsigned long hits; /* hits since we were loaded */
+ unsigned long hitssaved; /* hits (persistent) */
+ unsigned int marker; /* newserv style marker */
+ time_t lastseen; /* ... */
+ short dirty; /* whether or not we need to flush to the db */
struct rg_struct *next; /* ... pointer to next item */
} rg_struct;
-rg_sqlconnection rg_sql;
struct rg_struct *rg_list = NULL;
int rg_max_casualties, rg_max_spew, rg_expiry_time, rg_max_per_gline;
-int rg_sqlconnected = 0;
void *rg_schedule = NULL;
void rg_nick(int hooknum, void *arg);
void rg_lostnick(int hooknum, void *arg);
+void rg_rename(int hooknum, void *arg);
void rg_startup(void);
int rg_gline(void *source, int cargc, char **cargv);
int rg_spew(void *source, int cargc, char **cargv);
int rg_sanitycheck(char *mask, int *count);
-int rg_dbconnect(void);
-int rg_dbload(void);
-int rg_sqlconnect(char *dbhost, char *dbuser, char *dbpass, char *db, unsigned int port);
-void rg_sqldisconnect(void);
-void rg_sqlescape_string(char *dest, char *source, size_t length);
-int rg_sqlquery(char *format, ...);
-rg_sqlresult rg_sqlstoreresult(void);
-rg_sqlrow rg_sqlgetrow(rg_sqlresult res);
-void rg_sqlfree(rg_sqlresult res);
+int rg_dbconnect(void);
+void rg_dbload(void);
void rg_freestruct(struct rg_struct *rp);
struct rg_struct *rg_newstruct(time_t expires);
-struct rg_struct *rg_newsstruct(char *id, char *mask, char *setby, char *reason, char *expires, char *type, time_t iexpires, int iid);
+struct rg_struct *rg_newsstruct(unsigned long id, char *mask, char *setby, char *reason, char *expires, char *type, time_t iexpires, char *class, time_t lastseen, unsigned int hitssaved);
-void rg_displaygline(nick *np, struct rg_struct *rp);
+void rg_displaygline(nick *np, struct rg_struct *rp, int longest);
void rg_checkexpiry(void *arg);
-void rg_logevent(nick *np, char *event, char *details, ...);
+void rg_logevent(nick *np, char *event, char *details, ...) __attribute__ ((format (printf, 3, 4)));
void rg_loggline(struct rg_struct *rg, nick *np);
unsigned char rc_hexlookup[256] = {