X-Git-Url: http://git.dolda2000.com/gitweb/?p=doldaconnect.git;a=blobdiff_plain;f=daemon%2Ftransfer.c;h=62e81d64244f7263b10197c0d881caf4bfedbf77;hp=177353cae655a1881ccddede583e96b7c76fc3c5;hb=284e199aabf3b1149ec24f1aa16e9bed06ec7e91;hpb=cac2915d81f71d6f778a80c40216e48129b444df diff --git a/daemon/transfer.c b/daemon/transfer.c index 177353c..62e81d6 100644 --- a/daemon/transfer.c +++ b/daemon/transfer.c @@ -130,16 +130,21 @@ static void localread(struct socket *sk, struct transfer *transfer) { void *buf; size_t blen; + off_t curpos; if((transfer->datapipe != NULL) && (sockqueueleft(transfer->datapipe) > 0)) { buf = sockgetinbuf(sk, &blen); - if((transfer->endpos >= 0) && (transfer->curpos + blen > transfer->endpos)) - blen = transfer->endpos - transfer->curpos; + if((transfer->endpos >= 0) && (transfer->localpos + blen > transfer->endpos)) + blen = transfer->endpos - transfer->localpos; sockqueue(transfer->datapipe, buf, blen); free(buf); time(&transfer->activity); - transfer->curpos += blen; + transfer->localpos += blen; bytesupload += blen; + } + curpos = transfer->localpos - socktqueuesize(transfer->datapipe); + if(curpos != transfer->curpos) { + transfer->curpos = curpos; CBCHAINDOCB(transfer, trans_p, transfer); } } @@ -306,7 +311,7 @@ static void transexpire(int cancelled, struct transfer *transfer) void transferprepul(struct transfer *transfer, off_t size, off_t start, off_t end, struct socket *lesk) { transfersetsize(transfer, size); - transfer->curpos = start; + transfer->curpos = transfer->localpos = start; transfer->endpos = end; transfersetlocalend(transfer, lesk); }