#include "../core/schedule.h"
#include "../lib/irc_string.h"
#include "../lib/splitline.h"
+#include "../lib/strlfunc.h"
#include "../localuser/localuserchannel.h"
#include <assert.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
+#include <ctype.h>
+#include <strings.h>
-#define TROJANSCAN_VERSION "2.33"
+#define TROJANSCAN_VERSION "2.71"
-#define TROJANSCAN_CLONE_MAX 80
-#define TROJANSCAN_WATCHCLONE_MAX 20
+#define TROJANSCAN_MAX_HOST_GLINE 5
+
+#define TROJANSCAN_CLONE_MAX 75
+#define TROJANSCAN_WATCHCLONE_MAX 75
#define TROJANSCAN_CLONE_TOTAL TROJANSCAN_CLONE_MAX + TROJANSCAN_WATCHCLONE_MAX
#define TROJANSCAN_POOLSIZE 1000
-#define TROJANSCAN_MINPOOLSIZE 100
+#define TROJANSCAN_MINPOOLSIZE 500 /* 500 */
-#define TROJANSCAN_MINIMUM_HOSTS_BEFORE_POOL 500
+#define TROJANSCAN_MINIMUM_HOSTS_BEFORE_POOL 5000 /* 5000 */
-#define TROJANSCAN_DEFAULT_MAXCHANS 300
-#define TROJANSCAN_DEFAULT_CYCLETIME 600
+#define TROJANSCAN_DEFAULT_MAXCHANS 750
+#define TROJANSCAN_DEFAULT_CYCLETIME 1600
-#define TROJANSCAN_DEFAULT_MINIMUM_CHANNEL_SIZE 100
+#define TROJANSCAN_DEFAULT_MINIMUM_CHANNEL_SIZE 100 /* 100 */
#define TROJANSCAN_NICKCHANGE_ODDS 8
#define TROJANSCAN_INVISIBLE_ODDS 8
-#define TROJANSCAN_DEFAULT_PARTTIME 100
+#define TROJANSCAN_DEFAULT_PARTTIME 150
#define TROJANSCAN_DEFAULT_MAXUSERS 20
#define TROJANSCAN_POOL_REGENERATION 3600
+#define TROJANSCAN_HOST_POOL 0x00
+#define TROJANSCAN_STEAL_HOST 0x01
+
+#define TROJANSCAN_EPIDEMIC_MULTIPLIER 40
+
+#define TROJANSCAN_HOST_MODE TROJANSCAN_STEAL_HOST
+
+#define TROJANSCAN_MAX_CLONE_COUNT 5
+
#define TROJANSCAN_CAT "./trojanscan/cat.txt"
-#define TROJANSCAN_CHANNEL "#qnet.sec.trj"
+#define TROJANSCAN_CHANNEL "#qnet.trj"
#define TROJANSCAN_OPERCHANNEL "#twilightzone"
#define TROJANSCAN_URL_PREFIX "http://trojanscan.quakenet.org/?"
#define TROJANSCAN_QUERY_TEMP_BUF_SIZE 1040
#define TROJANSCAN_QUERY_BUF_SIZE 5040
-#define TROJANSCAN_FIRST_OFFENSE 2
+#define TROJANSCAN_FIRST_OFFENSE 12
#define TROJANSCAN_IPLEN 20
#define TROJANSCAN_VERSION_DETECT "\001VERSION"
-#define TROJANSCAN_CLONE_VERSION_REPLY "mIRC v6.14 Khaled Mardam-Bey"
+#define TROJANSCAN_DEFAULT_VERSION_REPLY "mIRC v6.31 Khaled Mardam-Bey"
typedef struct trojanscan_clones {
int remaining, sitting, index;
nick *clone;
+ patricia_node_t *fakeipnode;
} trojanscan_clones;
typedef struct trojanscan_channels {
unsigned datalen : 1;
unsigned hitpriv : 1;
unsigned hitchans : 1;
+ unsigned epidemic : 1;
} trojanscan_worms;
typedef struct trojanscan_phrases {
typedef struct trojanscan_prechannels {
sstring *name;
int size;
+ struct trojanscan_clones *watch_clone;
struct trojanscan_prechannels *next;
unsigned exempt : 1;
} trojanscan_prechannels;
typedef struct trojanscan_rejoinlist {
sstring *channel;
- nick *clone;
+ trojanscan_clones *clone;
void *schedule;
struct trojanscan_realchannels *rp;
struct trojanscan_rejoinlist *next;
} trojanscan_rejoinlist;
+typedef struct trojanscan_inchannel {
+ sstring *channel;
+ struct trojanscan_clones *watch_clone;
+} trojanscan_inchannel;
+
+typedef struct trojanscan_templist {
+ struct trojanscan_clones *watch_clone;
+ char active; /* required as copy of trojanscan_inchannel could be nil unfortunatly */
+} trojanscan_templist;
+
typedef MYSQL_RES trojanscan_database_res;
typedef MYSQL_ROW trojanscan_database_row;
typedef MYSQL trojanscan_database_connection;
void trojanscan_handlemessages(nick *target, int messagetype, void **args);
void trojanscan_clonehandlemessages(nick *target, int messagetype, void **args);
void trojanscan_mainchanmsg(char *message, ...);
+void trojanscan_peonchanmsg(char *message, ...);
void trojanscan_reply(nick *target, char *message, ... );
void trojanscan_privmsg_chan_or_nick(channel *cp, nick *np, char *text, ...);
trojanscan_database_res *trojanscan_database_store_result();
trojanscan_database_row trojanscan_database_fetch_row(trojanscan_database_res *res);
void trojanscan_database_free_result(trojanscan_database_res *res);
+nick *trojanscan_selectuser(void);
int trojanscan_is_not_octet(char *begin, int length);
void trojanscan_genreal(char *ptc, char size);
char trojanscan_genchar(int ty);
void trojanscan_gennick(char *ptc, char size);
void trojanscan_genident(char *ptc, char size);
-void trojanscan_genhost(char *ptc, char size);
+void trojanscan_genhost(char *ptc, char size, patricia_node_t **fakeipnode);
int trojanscan_generatepool(void);
void trojanscan_watch_clone_update(struct trojanscan_prechannels *hp, int count);
void trojanscan_repool(void *arg);
-void trojanscan_generatehost(char *buf, int maxsize);
+void trojanscan_generatehost(char *buf, int maxsize, patricia_node_t **fakeipnode);
void trojanscan_generatenick(char *buf, int maxsize);
void trojanscan_generateident(char *buf, int maxsize);
void trojanscan_generaterealname(char *buf, int maxsize);
sstring *trojanscan_getsstring(char *string, int length);
int trojanscan_strip_codes(char *buf, size_t max, char *original);
+int trojanscan_isip(char *host);
struct trojanscan_clones trojanscan_swarm[TROJANSCAN_CLONE_TOTAL];
struct trojanscan_db trojanscan_database;
sstring *trojanscan_hostpool[TROJANSCAN_POOLSIZE], *trojanscan_tailpool[TROJANSCAN_POOLSIZE];
-sstring **trojanscan_chans = NULL;
+struct trojanscan_inchannel *trojanscan_chans = NULL;
unsigned int trojanscan_cycletime, trojanscan_maxchans, trojanscan_part_time, trojanscan_activechans = 0, trojanscan_tailpoolsize = 0, trojanscan_hostpoolsize = 0, trojanscan_channumber = 0, trojanscan_maxusers;
int trojanscan_watchclones_count = 0;
void *trojanscan_schedule, *trojanscan_connect_schedule;
void *trojanscan_initialschedule, *trojanscan_rehashschedule, *trojanscan_poolschedule, *trojanscan_cloneschedule;
-int trojanscan_minchansize;
+int trojanscan_minchansize, trojanscan_min_hosts;
int trojanscan_swarm_created = 0;
nick *trojanscan_nick;