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), 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());
} }

View File

@ -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_;