{
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);
freedcpeer(peer);
return;
}
- requestfile(peer);
+ if(peer->direction == TRNSD_DOWN)
+ requestfile(peer);
} else {
if(peer->wcsname == NULL)
{
return;
}
startdl(peer);
+ if(peer->inbufdata > 0)
+ {
+ sockpushdata(sk, peer->inbuf, peer->inbufdata);
+ peer->inbufdata = 0;
+ transread(sk, peer);
+ }
}
/*
newqcmd(&peer->queue, peer->inbuf);
for(cmd = peercmds; cmd->handler != NULL; cmd++)
{
- if(!memcmp(peer->inbuf, cmd->name, strlen(cmd->name)) && (peer->inbuf[strlen(cmd->name)] == 0))
+ if(!memcmp(peer->inbuf, cmd->name, strlen(cmd->name)) && ((peer->inbuf[strlen(cmd->name)] == ' ') || (peer->inbuf[strlen(cmd->name)] == '|')))
break;
}
+ memmove(peer->inbuf, p, peer->inbufdata -= p - peer->inbuf);
if(cmd->stop)
{
peer->state = PEER_STOP;
break;
}
- memmove(peer->inbuf, p, peer->inbufdata -= p - peer->inbuf);
}
} else if(peer->state == PEER_TTHL) {
handletthl(peer);