char *inbuf;
size_t inbufdata, inbufsize;
struct qcommand *queue;
- int extended, isop;
+ int extended;
char *nativename;
char *nativenick;
};
int extended;
int direction; /* Using the constants from transfer.h */
int compress;
- int hascurpos, notthl;
+ int hascurpos, fetchingtthl, notthl;
struct tigertreehash tth;
void *cprsdata;
char *key;
sendadc(peer->sk, "0");
sendadc(peer->sk, "-1");
qstr(peer->sk, "|");
+ peer->fetchingtthl = 1;
return;
}
}
struct dchub *hub;
char *buf;
struct fnetnode *cfn;
- int numhubs;
+ int hn1, hn2, hn3;
hub = fn->data;
qstrf(sk, "$MyINFO $ALL %s ", hub->nativenick);
buf = tr(icswcstombs(confgetstr("dc", "desc"), DCCHARSET, "Charset_conv_failure"), "$_|_");
qstrf(sk, "%s", buf);
- numhubs = 0;
+ hn1 = hn2 = hn3 = 0;
for(cfn = fnetnodes; cfn != NULL; cfn = cfn->next)
{
if((cfn->state == FNN_EST) || (cfn->state == FNN_HS))
- numhubs++;
+ {
+ if(cfn->regstatus == FNNS_OP)
+ hn3++;
+ else if(cfn->regstatus == FNNS_REG)
+ hn2++;
+ else
+ hn1++;
+ }
}
- qstrf(sk, "<%s V:%s,M:%c,H:%i/0/0,S:%i>",
+ qstrf(sk, "<%s V:%s,M:%c,H:%i/%i/%i,S:%i>",
DCIDTAG,
DCIDTAGV,
(tcpsock == NULL)?'P':'A',
- numhubs,
+ hn1, hn2, hn3,
confgetint("transfer", "slots")
);
qstrf(sk, "$ $");
}
qstrf(sk, "$MyPass %s|", mbspw);
free(mbspw);
+ fn->regstatus = FNNS_REG;
hubhandleaction(sk, fn, cmd, args);
}
struct dchub *hub;
hub = fn->data;
- hub->isop = 1;
+ fn->regstatus = FNNS_OP;
hubhandleaction(sk, fn, cmd, args);
}
static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
int size;
+ struct transfer *transfer;
if(peer->transfer == NULL)
{
if(peer->transfer->size != size)
{
transfersetsize(peer->transfer, size);
+ transfer = peer->transfer;
freedcpeer(peer);
+ trytransferbypeer(transfer->fnet, transfer->peerid);
return;
}
startdl(peer);
static void cmd_error(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
+ if(peer->fetchingtthl)
+ {
+ peer->fetchingtthl = 0;
+ peer->notthl = 1;
+ requestfile(peer);
+ return;
+ }
if((peer->transfer != NULL) && (peer->transfer->dir == TRNSD_DOWN))
{
transferseterror(peer->transfer, TRNSE_NOTFOUND);
peer->state = PEER_TTHL;
peer->totalsize = numbytes;
peer->curread = 0;
+ peer->fetchingtthl = 0;
inittigertree(&peer->tth);
handletthl(peer);
} else if(!strcmp(argv[0], "file")) {