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
Tatsuhiro Tsujikawa 2012-11-04 16:49:39 +09:00
parent 31189b1222
commit b2893f1e31
2 changed files with 15 additions and 5 deletions

View File

@ -67,6 +67,7 @@ BtPieceMessage::BtPieceMessage
index_(index),
begin_(begin),
blockLength_(blockLength),
msgHdrLen_(0),
data_(0)
{
setUploading(true);
@ -179,17 +180,25 @@ void BtPieceMessage::send()
getPeer()->getPort(),
toString().c_str()));
unsigned char* msgHdr = createMessageHeader();
size_t msgHdrLen = getMessageHeaderLength();
msgHdrLen_ = getMessageHeaderLength();
A2_LOG_DEBUG(fmt("msglength = %lu bytes",
static_cast<unsigned long>(msgHdrLen+blockLength_)));
getPeerConnection()->pushBytes(msgHdr, msgHdrLen);
static_cast<unsigned long>(msgHdrLen_+blockLength_)));
getPeerConnection()->pushBytes(msgHdr, msgHdrLen_);
int64_t pieceDataOffset =
static_cast<int64_t>(index_)*downloadContext_->getPieceLength()+begin_;
pushPieceData(pieceDataOffset, blockLength_);
}
writtenLength = getPeerConnection()->sendPendingData();
getPeer()->updateUploadLength(writtenLength);
downloadContext_->updateUploadLength(writtenLength);
// Subtract msgHdrLen_ from writtenLength to get the uploaded data
// size.
if(writtenLength > msgHdrLen_) {
writtenLength -= msgHdrLen_;
msgHdrLen_ = 0;
getPeer()->updateUploadLength(writtenLength);
downloadContext_->updateUploadLength(writtenLength);
} else {
msgHdrLen_ -= writtenLength;
}
setSendingInProgress(!getPeerConnection()->sendBufferIsEmpty());
}

View File

@ -48,6 +48,7 @@ private:
size_t index_;
int32_t begin_;
int32_t blockLength_;
size_t msgHdrLen_;
const unsigned char* data_;
SharedHandle<DownloadContext> downloadContext_;
SharedHandle<PeerStorage> peerStorage_;