#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 <ctype.h>
#include <strings.h>
-#define TROJANSCAN_VERSION "2.51"
+#define TROJANSCAN_VERSION "2.72"
-#define TROJANSCAN_CLONE_MAX 300 /* 80 */
+#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 500
-#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_NICKCHANGE_ODDS 16
#define TROJANSCAN_INVISIBLE_ODDS 8
-#define TROJANSCAN_DEFAULT_PARTTIME 100
+#define TROJANSCAN_DEFAULT_PARTTIME 260
#define TROJANSCAN_DEFAULT_MAXUSERS 20
#define TROJANSCAN_POOL_REGENERATION 3600
#define TROJANSCAN_HOST_MODE TROJANSCAN_STEAL_HOST
+#define TROJANSCAN_MAX_CLONE_COUNT 3
+
#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.16 Khaled Mardam-Bey"
+#define TROJANSCAN_DEFAULT_VERSION_REPLY "mIRC v6.35 Khaled Mardam-Bey"
typedef struct trojanscan_clones {
int remaining, sitting, index;
nick *clone;
+ patricia_node_t *fakeipnode;
} trojanscan_clones;
typedef struct trojanscan_channels {
typedef struct trojanscan_rejoinlist {
sstring *channel;
- nick *clone;
+ trojanscan_clones *clone;
void *schedule;
struct trojanscan_realchannels *rp;
struct trojanscan_rejoinlist *next;
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_reply(nick *target, char *message, ... );
-void trojanscan_privmsg_chan_or_nick(channel *cp, nick *np, char *text, ...);
+void trojanscan_mainchanmsg(char *message, ...) __attribute__ ((format (printf, 1, 2)));
+void trojanscan_peonchanmsg(char *message, ...) __attribute__ ((format (printf, 1, 2)));
+void trojanscan_reply(nick *target, char *message, ... ) __attribute__ ((format (printf, 2, 3)));
+void trojanscan_privmsg_chan_or_nick(channel *cp, nick *np, char *text, ...) __attribute__ ((format (printf, 3, 4)));
void trojanscan_connect(void *arg);
void trojanscan_dojoin(void *arg);
int trojanscan_database_connect(char *dbhost, char *dbuser, char *dbpass, char *db, unsigned int port);
void trojanscan_database_close(void);
void trojanscan_database_escape_string(char *dest, char *source, size_t length);
-int trojanscan_database_query(char *format, ...);
+int trojanscan_database_query(char *format, ...) __attribute__ ((format (printf, 1, 2)));
int trojanscan_database_num_rows(trojanscan_database_res *res);
trojanscan_database_res *trojanscan_database_store_result();
trojanscan_database_row trojanscan_database_fetch_row(trojanscan_database_res *res);
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);
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;