mirror of https://github.com/aria2/aria2
Get the correct uploaded data size
Subtract msgHdrLen_ from writtenLength to get the uploaded data size. Without this correction, the seeder assumes it has uploaded more data than it actually has.pull/34/head
parent
31189b1222
commit
b2893f1e31
|
@ -67,6 +67,7 @@ BtPieceMessage::BtPieceMessage
|
||||||
index_(index),
|
index_(index),
|
||||||
begin_(begin),
|
begin_(begin),
|
||||||
blockLength_(blockLength),
|
blockLength_(blockLength),
|
||||||
|
msgHdrLen_(0),
|
||||||
data_(0)
|
data_(0)
|
||||||
{
|
{
|
||||||
setUploading(true);
|
setUploading(true);
|
||||||
|
@ -179,17 +180,25 @@ void BtPieceMessage::send()
|
||||||
getPeer()->getPort(),
|
getPeer()->getPort(),
|
||||||
toString().c_str()));
|
toString().c_str()));
|
||||||
unsigned char* msgHdr = createMessageHeader();
|
unsigned char* msgHdr = createMessageHeader();
|
||||||
size_t msgHdrLen = getMessageHeaderLength();
|
msgHdrLen_ = getMessageHeaderLength();
|
||||||
A2_LOG_DEBUG(fmt("msglength = %lu bytes",
|
A2_LOG_DEBUG(fmt("msglength = %lu bytes",
|
||||||
static_cast<unsigned long>(msgHdrLen+blockLength_)));
|
static_cast<unsigned long>(msgHdrLen_+blockLength_)));
|
||||||
getPeerConnection()->pushBytes(msgHdr, msgHdrLen);
|
getPeerConnection()->pushBytes(msgHdr, msgHdrLen_);
|
||||||
int64_t pieceDataOffset =
|
int64_t pieceDataOffset =
|
||||||
static_cast<int64_t>(index_)*downloadContext_->getPieceLength()+begin_;
|
static_cast<int64_t>(index_)*downloadContext_->getPieceLength()+begin_;
|
||||||
pushPieceData(pieceDataOffset, blockLength_);
|
pushPieceData(pieceDataOffset, blockLength_);
|
||||||
}
|
}
|
||||||
writtenLength = getPeerConnection()->sendPendingData();
|
writtenLength = getPeerConnection()->sendPendingData();
|
||||||
getPeer()->updateUploadLength(writtenLength);
|
// Subtract msgHdrLen_ from writtenLength to get the uploaded data
|
||||||
downloadContext_->updateUploadLength(writtenLength);
|
// size.
|
||||||
|
if(writtenLength > msgHdrLen_) {
|
||||||
|
writtenLength -= msgHdrLen_;
|
||||||
|
msgHdrLen_ = 0;
|
||||||
|
getPeer()->updateUploadLength(writtenLength);
|
||||||
|
downloadContext_->updateUploadLength(writtenLength);
|
||||||
|
} else {
|
||||||
|
msgHdrLen_ -= writtenLength;
|
||||||
|
}
|
||||||
setSendingInProgress(!getPeerConnection()->sendBufferIsEmpty());
|
setSendingInProgress(!getPeerConnection()->sendBufferIsEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@ private:
|
||||||
size_t index_;
|
size_t index_;
|
||||||
int32_t begin_;
|
int32_t begin_;
|
||||||
int32_t blockLength_;
|
int32_t blockLength_;
|
||||||
|
size_t msgHdrLen_;
|
||||||
const unsigned char* data_;
|
const unsigned char* data_;
|
||||||
SharedHandle<DownloadContext> downloadContext_;
|
SharedHandle<DownloadContext> downloadContext_;
|
||||||
SharedHandle<PeerStorage> peerStorage_;
|
SharedHandle<PeerStorage> peerStorage_;
|
||||||
|
|
Loading…
Reference in New Issue