X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=110c1e937d5c7807f3c03b0d26c4f1ffdc019bee;hb=fcd0627b625708acf84d783e3b2a41cd0cd1ac37;hp=ec19a5632913dbc0ecff932f54e7f333bfa5d174;hpb=1b14d3d88207a2640b403947a593bb6a0b558039;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index ec19a56..110c1e9 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -575,8 +575,11 @@ static char *getadcid(struct dcpeer *peer) { char *buf; char *ret; + int isfilelist; - if((peer->transfer->hash != NULL) && isdchash(peer->transfer->hash) && supports(peer, "tthf")) + if(!wcscmp(peer->transfer->path, L"files.xml") || !wcscmp(peer->transfer->path, L"files.xml.bz2") || !wcscmp(peer->transfer->path, L"MyList.DcLst")) + isfilelist = 1; + if(!isfilelist && (peer->transfer->hash != NULL) && isdchash(peer->transfer->hash) && supports(peer, "tthf")) { buf = base32encode(peer->transfer->hash->buf, 24); ret = sprintf2("TTH/%.39s", buf); @@ -993,7 +996,7 @@ static void cmd_forcemove(struct socket *sk, struct fnetnode *fn, char *cmd, cha } else { freeargs = 0; } - if((newfn = fnetinitconnect(L"dc", args)) != NULL) + if((newfn = fnetinitconnect(L"dc", args, NULL)) != NULL) { linkfnetnode(newfn); putfnetnode(newfn); @@ -1423,6 +1426,38 @@ static void cmd_usercommand(struct socket *sk, struct fnetnode *fn, char *cmd, c /* Do nothing for now. */ } +static void cmd_getpass(struct socket *sk, struct fnetnode *fn, char *cmd, char *args) +{ + struct dchub *hub; + struct wcspair *arg; + char *mbspw; + + hub = fn->data; + for(arg = fn->args; arg != NULL; arg = arg->next) + { + if(!wcscmp(arg->key, L"password")) + break; + } + if((arg == NULL) || ((mbspw = icwcstombs(arg->val, DCCHARSET)) == NULL)) + { + killfnetnode(fn); + return; + } + 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); +} + static void cmd_mynick(struct socket *sk, struct dcpeer *peer, char *cmd, char *args) { struct dcexppeer *expect; @@ -2468,6 +2503,8 @@ struct command hubcmds[] = {"$To:", cc(cmd_to)}, {"$SR", cc(cmd_sr)}, {"$UserCommand", cc(cmd_usercommand)}, + {"$GetPass", cc(cmd_getpass)}, + {"$LogedIn", cc(cmd_logedin)}, /* sic */ {NULL, NULL} };