X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=d77179db4bc692ea9086575e3abba64892698acd;hb=1fc81821e3bc450a6b95588ebe7c90bf6363bed9;hp=ed01d06a468a4a42e8dd186f967272787d917973;hpb=485090895614fdf8c01ea9f0c8d32e43a623ddd4;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index ed01d06..d77179d 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -729,23 +729,30 @@ static void sendmyinfo(struct socket *sk, struct fnetnode *fn) 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, "$ $"); @@ -1445,6 +1452,16 @@ static void cmd_getpass(struct socket *sk, struct fnetnode *fn, char *cmd, char } qstrf(sk, "$MyPass %s|", mbspw); free(mbspw); + fn->regstatus = FNNS_REG; + hubhandleaction(sk, fn, cmd, args); +} + +static void cmd_logedin(struct socket *sk, struct fnetnode *fn, char *cmd, char *args) +{ + struct dchub *hub; + + hub = fn->data; + fn->regstatus = FNNS_OP; hubhandleaction(sk, fn, cmd, args); } @@ -1598,6 +1615,7 @@ static void startul(struct dcpeer *peer) static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, char *args) { int size; + struct transfer *transfer; if(peer->transfer == NULL) { @@ -1608,7 +1626,9 @@ static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, ch if(peer->transfer->size != size) { transfersetsize(peer->transfer, size); + transfer = peer->transfer; freedcpeer(peer); + trytransferbypeer(transfer->fnet, transfer->peerid); return; } startdl(peer); @@ -2494,6 +2514,7 @@ struct command hubcmds[] = {"$SR", cc(cmd_sr)}, {"$UserCommand", cc(cmd_usercommand)}, {"$GetPass", cc(cmd_getpass)}, + {"$LogedIn", cc(cmd_logedin)}, /* sic */ {NULL, NULL} };