if (!cp) {
localcreatechannel(trojanscan_nick, TROJANSCAN_OPERCHANNEL);
} else {
- localjoinchannel(trojanscan_nick, cp);
- localgetops(trojanscan_nick, cp);
+ if(!localjoinchannel(trojanscan_nick, cp))
+ localgetops(trojanscan_nick, cp);
}
cp = findchannel(TROJANSCAN_CHANNEL);
if (!cp) {
localcreatechannel(trojanscan_nick, TROJANSCAN_CHANNEL);
} else {
- localjoinchannel(trojanscan_nick, cp);
- localgetops(trojanscan_nick, cp);
+ if(!localjoinchannel(trojanscan_nick, cp))
+ localgetops(trojanscan_nick, cp);
}
freesstring(mnick);
int trojanscan_chanlist(void *sender, int cargc, char **cargv) {
int i;
nick *np = (nick *)sender;
+ char buf[CHANNELLEN * 2 + 20];
trojanscan_reply(np, "Channel list (%d total):", trojanscan_activechans);
- for(i=0;i<trojanscan_activechans;i++)
- trojanscan_reply(np, "%s", trojanscan_chans[i].channel->content);
+ buf[0] = '\0';
+
+ for(i=0;i<trojanscan_activechans;i++) {
+ if(trojanscan_chans[i].channel->length + 3 > sizeof(buf) - strlen(buf)) {
+ trojanscan_reply(np, "%s", buf);
+ buf[0] = '\0';
+ }
+
+ /* if splidge sees this I'm going to die */
+ strlcat(buf, trojanscan_chans[i].channel->content, sizeof(buf));
+ strlcat(buf, " ", sizeof(buf));
+ }
+ if(buf[0])
+ trojanscan_reply(np, "%s", buf);
+
trojanscan_reply(np, "Done.");
return CMD_OK;
}
for(i=0;i<TROJANSCAN_CLONE_TOTAL;i++) {
if(trojanscan_swarm[i].clone->nick && !ircd_strcmp(trojanscan_swarm[i].clone->nick, np2->nick)) { /* PPA: ircd_strncmp ? - order of args? */
trojanscan_reply(np, "Nickname : %s", np2->nick);
- trojanscan_reply(np, "Swarm nick : yes", trojanscan_swarm[i].clone->nick);
+ trojanscan_reply(np, "Swarm : yes", trojanscan_swarm[i].clone->nick);
return CMD_OK;
}
}
trojanscan_generateclone((void *)rc->index);
}
}
- rc->remaining--;
- rc->sitting++;
}
return rc;
if (rc->clone && rc->clone->clone) {
if (!localjoinchannel(rc->clone->clone, rc->chan)) {
+ rc->clone->remaining--;
+ rc->clone->sitting++;
if (trojanscan_minmaxrand(1, TROJANSCAN_NICKCHANGE_ODDS)%TROJANSCAN_NICKCHANGE_ODDS == 0)
trojanscan_donickchange((void *)rc->clone);
return;
}
- if (rc->clone && rc->clone->clone && (!(rc->donotpart))) {
+ if (rc->clone->clone && (!(rc->donotpart)))
localpartchannel(rc->clone->clone, rc->chan);
- } else {
-/*
- trojanscan_mainchanmsg("d: clone could not part: %s, most likely due to kill, flag: %d.", rc->chan->index->name->content, rc->donotpart);
-*/
- }
+
rc->clone->sitting--;
for(rp=trojanscan_realchanlist;rp;rp=rp->next) {
void trojanscan_rejoin_channel(void *arg) {
struct trojanscan_rejoinlist *rj2, *lrj, *rj = (struct trojanscan_rejoinlist *)arg;
- /* TODO: there is a pretty major bug here */
channel *cp = findchannel(rj->channel->content);
freesstring(rj->channel);
#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.52"
+#define TROJANSCAN_VERSION "2.53"
-#define TROJANSCAN_CLONE_MAX 250
-#define TROJANSCAN_WATCHCLONE_MAX 75
+#define TROJANSCAN_CLONE_MAX 150
+#define TROJANSCAN_WATCHCLONE_MAX 100
#define TROJANSCAN_CLONE_TOTAL TROJANSCAN_CLONE_MAX + TROJANSCAN_WATCHCLONE_MAX
#define TROJANSCAN_POOLSIZE 1000
#define TROJANSCAN_MINIMUM_HOSTS_BEFORE_POOL 5000 /* 500 */
-#define TROJANSCAN_DEFAULT_MAXCHANS 500
+#define TROJANSCAN_DEFAULT_MAXCHANS 750
#define TROJANSCAN_DEFAULT_CYCLETIME 600
#define TROJANSCAN_DEFAULT_MINIMUM_CHANNEL_SIZE 100 /* 100 */
#define TROJANSCAN_HOST_POOL 0x00
#define TROJANSCAN_STEAL_HOST 0x01
-#define TROJANSCAN_EPIDEMIC_MULTIPLIER 20
+#define TROJANSCAN_EPIDEMIC_MULTIPLIER 40
#define TROJANSCAN_HOST_MODE TROJANSCAN_STEAL_HOST
#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"