diff --git a/ChangeLog b/ChangeLog index 0ccf0ad4..5b6e4670 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2008-03-08 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com> + + Type clarification: size_t for length or size, uint64_t for file + length, off_t for file offset. + * src/DefaultBtProgressInfoFile.cc + * src/DefaultBtContext.{h, cc} + * src/DefaultBtInteractive.cc + * src/DownloadCommand.{h, cc} + * src/IteratableChunkChecksumValidator.{h, cc} + * src/SegmentMan.{h, cc} + * src/SingleFileDownloadContext.{h, cc} + * src/IteratableChecksumValidator.{h, cc} + * src/BtContext.h + * src/IteratableValidator.h + * src/DownloadContext.h + * test/SingleFileDownloadContextTest.cc + * test/DefaultBtContextTest.cc + * test/MockBtContext.h + * test/Metalink2RequestGroupTest.cc + 2008-03-08 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com> Type clarification: size_t for length or size, uint64_t for file diff --git a/src/BtContext.h b/src/BtContext.h index 9344589e..62d8e5fe 100644 --- a/src/BtContext.h +++ b/src/BtContext.h @@ -54,7 +54,7 @@ public: virtual const unsigned char* getInfoHash() const = 0; - virtual int32_t getInfoHashLength() const = 0; + virtual size_t getInfoHashLength() const = 0; virtual std::string getInfoHashAsString() const = 0; @@ -73,8 +73,8 @@ public: return _private; } - virtual std::deque<int32_t> - computeFastSet(const std::string& ipaddr, int32_t fastSetSize) = 0; + virtual std::deque<size_t> + computeFastSet(const std::string& ipaddr, size_t fastSetSize) = 0; virtual RequestGroup* getOwnerRequestGroup() = 0; diff --git a/src/DefaultBtContext.cc b/src/DefaultBtContext.cc index 3d9831c7..8ef2c62f 100644 --- a/src/DefaultBtContext.cc +++ b/src/DefaultBtContext.cc @@ -76,7 +76,7 @@ const unsigned char* DefaultBtContext::getInfoHash() const { return infoHash; } -int32_t DefaultBtContext::getInfoHashLength() const { +size_t DefaultBtContext::getInfoHashLength() const { return INFO_HASH_LENGTH; } @@ -99,8 +99,8 @@ void DefaultBtContext::clear() { } void DefaultBtContext::extractPieceHash(const unsigned char* hashData, - int32_t hashDataLength, - int32_t hashLength) { + size_t hashDataLength, + size_t hashLength) { int32_t numPieces = hashDataLength/hashLength; for(int32_t i = 0; i < numPieces; i++) { pieceHashes.push_back(Util::toHex(&hashData[i*hashLength], @@ -119,8 +119,8 @@ void DefaultBtContext::extractFileEntries(const Dictionary* infoDic, } const List* files = dynamic_cast<const List*>(infoDic->get("files")); if(files) { - int64_t length = 0; - int64_t offset = 0; + uint64_t length = 0; + off_t offset = 0; // multi-file mode fileMode = BtContext::MULTI; const std::deque<MetaEntry*>& metaList = files->getList(); @@ -142,7 +142,7 @@ void DefaultBtContext::extractFileEntries(const Dictionary* infoDic, } const std::deque<MetaEntry*>& paths = pathList->getList(); std::string path; - for(int32_t i = 0; i < (int32_t)paths.size()-1; i++) { + for(size_t i = 0; i < paths.size()-1; i++) { const Data* subpath = dynamic_cast<const Data*>(paths[i]); if(subpath) { path += subpath->toString()+"/"; @@ -259,7 +259,7 @@ void DefaultBtContext::extractNodes(const List* nodes) } void DefaultBtContext::loadFromMemory(const unsigned char* content, - int32_t length, + size_t length, const std::string& defaultName) { SharedHandle<MetaEntry> rootEntry = MetaFileUtil::bdecoding(content, length); @@ -344,14 +344,15 @@ void DefaultBtContext::processRootDictionary(const Dictionary* rootDic, const st } } -std::string DefaultBtContext::getPieceHash(int32_t index) const { - if(index < 0 || numPieces <= index) { +std::string DefaultBtContext::getPieceHash(size_t index) const { + if(index < numPieces) { + return pieceHashes[index]; + } else { return ""; } - return pieceHashes[index]; } -int64_t DefaultBtContext::getTotalLength() const { +uint64_t DefaultBtContext::getTotalLength() const { return totalLength; } @@ -371,11 +372,11 @@ std::string DefaultBtContext::getName() const { return name; } -int32_t DefaultBtContext::getPieceLength() const { +size_t DefaultBtContext::getPieceLength() const { return pieceLength; } -int32_t DefaultBtContext::getNumPieces() const { +size_t DefaultBtContext::getNumPieces() const { return numPieces; } @@ -384,9 +385,9 @@ std::string DefaultBtContext::getActualBasePath() const return _dir+"/"+name; } -std::deque<int32_t> DefaultBtContext::computeFastSet(const std::string& ipaddr, int32_t fastSetSize) +std::deque<size_t> DefaultBtContext::computeFastSet(const std::string& ipaddr, size_t fastSetSize) { - std::deque<int32_t> fastSet; + std::deque<size_t> fastSet; unsigned char compact[6]; if(!PeerMessageUtil::createcompact(compact, ipaddr, 0)) { return fastSet; @@ -402,13 +403,13 @@ std::deque<int32_t> DefaultBtContext::computeFastSet(const std::string& ipaddr, memcpy(tx+4, infoHash, 20); unsigned char x[20]; MessageDigestHelper::digest(x, sizeof(x), "sha1", tx, 24); - while((int32_t)fastSet.size() < fastSetSize) { - for(int32_t i = 0; i < 5 && (int32_t)fastSet.size() < fastSetSize; i++) { - int32_t j = i*4; + while(fastSet.size() < fastSetSize) { + for(size_t i = 0; i < 5 && fastSet.size() < fastSetSize; i++) { + size_t j = i*4; uint32_t ny; memcpy(&ny, x+j, 4); uint32_t y = ntohl(ny); - int32_t index = y%numPieces; + size_t index = y%numPieces; if(std::find(fastSet.begin(), fastSet.end(), index) == fastSet.end()) { fastSet.push_back(index); } diff --git a/src/DefaultBtContext.h b/src/DefaultBtContext.h index 2b646002..42a25455 100644 --- a/src/DefaultBtContext.h +++ b/src/DefaultBtContext.h @@ -57,10 +57,10 @@ private: std::deque<std::string> pieceHashes; std::deque<SharedHandle<FileEntry> > fileEntries; FILE_MODE fileMode; - int64_t totalLength; - int32_t pieceLength; + uint64_t totalLength; + size_t pieceLength; std::string name; - int32_t numPieces; + size_t numPieces; std::string peerId; std::string _peerIdPrefix; std::deque<SharedHandle<AnnounceTier> > announceTiers; @@ -73,8 +73,8 @@ private: void clear(); void extractPieceHash(const unsigned char* hashData, - int32_t hashDataLength, - int32_t hashLength); + size_t hashDataLength, + size_t hashLength); void extractFileEntries(const Dictionary* infoDic, const std::string& defaultName, const std::deque<std::string>& urlList); @@ -93,18 +93,18 @@ private: virtual const unsigned char* getInfoHash() const; - virtual int32_t getInfoHashLength() const; + virtual size_t getInfoHashLength() const; virtual std::string getInfoHashAsString() const; - virtual std::string getPieceHash(int32_t index) const; + virtual std::string getPieceHash(size_t index) const; virtual const std::deque<std::string>& getPieceHashes() const { return pieceHashes; } - virtual int64_t getTotalLength() const; + virtual uint64_t getTotalLength() const; virtual FILE_MODE getFileMode() const; @@ -119,7 +119,7 @@ private: virtual void load(const std::string& torrentFile); - void loadFromMemory(const unsigned char* content, int32_t length, + void loadFromMemory(const unsigned char* content, size_t length, const std::string& defaultName); void loadFromMemory(const std::string& context, const std::string& defaultName) @@ -130,9 +130,9 @@ private: virtual std::string getName() const; - virtual int32_t getPieceLength() const; + virtual size_t getPieceLength() const; - virtual int32_t getNumPieces() const; + virtual size_t getNumPieces() const; virtual std::string getActualBasePath() const; @@ -143,7 +143,7 @@ private: return reinterpret_cast<const unsigned char*>(peerId.c_str()); } - virtual std::deque<int32_t> computeFastSet(const std::string& ipaddr, int32_t fastSetSize); + virtual std::deque<size_t> computeFastSet(const std::string& ipaddr, size_t fastSetSize); virtual RequestGroup* getOwnerRequestGroup() { @@ -165,7 +165,7 @@ private: memcpy(this->infoHash, infoHash, sizeof(this->infoHash)); } - void setNumPieces(int32_t numPieces) + void setNumPieces(size_t numPieces) { this->numPieces = numPieces; } diff --git a/src/DefaultBtInteractive.cc b/src/DefaultBtInteractive.cc index fa0a5992..99767a0a 100644 --- a/src/DefaultBtInteractive.cc +++ b/src/DefaultBtInteractive.cc @@ -177,9 +177,9 @@ void DefaultBtInteractive::addBitfieldMessageToQueue() { void DefaultBtInteractive::addAllowedFastMessageToQueue() { if(peer->isFastExtensionEnabled()) { - std::deque<int32_t> fastSet = btContext->computeFastSet(peer->ipaddr, + std::deque<size_t> fastSet = btContext->computeFastSet(peer->ipaddr, allowedFastSetSize); - for(std::deque<int32_t>::const_iterator itr = fastSet.begin(); + for(std::deque<size_t>::const_iterator itr = fastSet.begin(); itr != fastSet.end(); itr++) { dispatcher->addMessageToQueue(messageFactory->createAllowedFastMessage(*itr)); } diff --git a/src/DefaultBtProgressInfoFile.cc b/src/DefaultBtProgressInfoFile.cc index 7fc1291b..85158e78 100644 --- a/src/DefaultBtProgressInfoFile.cc +++ b/src/DefaultBtProgressInfoFile.cc @@ -83,8 +83,8 @@ void DefaultBtProgressInfoFile::save() { bool torrentDownload = isTorrentDownload(); // file version: 16 bits // value: '0' - int16_t version = 0; - o.write(reinterpret_cast<const char*>(&version), sizeof(int16_t)); + uint16_t version = 0; + o.write(reinterpret_cast<const char*>(&version), sizeof(version)); // extension: 32 bits // If this is BitTorrent download, then 0x00000001 // Otherwise, 0x00000000 @@ -98,49 +98,49 @@ void DefaultBtProgressInfoFile::save() { // infoHashLength: // length: 32 bits BtContextHandle btContext = _dctx; - int32_t infoHashLength = btContext->getInfoHashLength(); - o.write(reinterpret_cast<const char*>(&infoHashLength), sizeof(int32_t)); + uint32_t infoHashLength = btContext->getInfoHashLength(); + o.write(reinterpret_cast<const char*>(&infoHashLength), sizeof(infoHashLength)); // infoHash: o.write(reinterpret_cast<const char*>(btContext->getInfoHash()), btContext->getInfoHashLength()); } else { // infoHashLength: // length: 32 bits - int32_t infoHashLength = 0; - o.write(reinterpret_cast<const char*>(&infoHashLength), sizeof(int32_t)); + uint32_t infoHashLength = 0; + o.write(reinterpret_cast<const char*>(&infoHashLength), sizeof(infoHashLength)); } // pieceLength: 32 bits - int32_t pieceLength = _dctx->getPieceLength(); - o.write(reinterpret_cast<const char*>(&pieceLength), sizeof(int32_t)); + uint32_t pieceLength = _dctx->getPieceLength(); + o.write(reinterpret_cast<const char*>(&pieceLength), sizeof(pieceLength)); // totalLength: 64 bits - int64_t totalLength = _dctx->getTotalLength(); - o.write(reinterpret_cast<const char*>(&totalLength), sizeof(int64_t)); + uint64_t totalLength = _dctx->getTotalLength(); + o.write(reinterpret_cast<const char*>(&totalLength), sizeof(totalLength)); // uploadLength: 64 bits - int64_t uploadLength = 0; + uint64_t uploadLength = 0; if(torrentDownload) { BtContextHandle btContext = _dctx; TransferStat stat = PEER_STORAGE(btContext)->calculateStat(); uploadLength = stat.getAllTimeUploadLength(); } - o.write(reinterpret_cast<const char*>(&uploadLength), sizeof(int64_t)); + o.write(reinterpret_cast<const char*>(&uploadLength), sizeof(uploadLength)); // bitfieldLength: 32 bits - int32_t bitfieldLength = _pieceStorage->getBitfieldLength(); - o.write(reinterpret_cast<const char*>(&bitfieldLength), sizeof(int32_t)); + uint32_t bitfieldLength = _pieceStorage->getBitfieldLength(); + o.write(reinterpret_cast<const char*>(&bitfieldLength), sizeof(bitfieldLength)); // bitfield o.write(reinterpret_cast<const char*>(_pieceStorage->getBitfield()), _pieceStorage->getBitfieldLength()); // the number of in-flight piece: 32 bits // TODO implement this - int32_t numInFlightPiece = _pieceStorage->countInFlightPiece(); - o.write(reinterpret_cast<const char*>(&numInFlightPiece), sizeof(int32_t)); + uint32_t numInFlightPiece = _pieceStorage->countInFlightPiece(); + o.write(reinterpret_cast<const char*>(&numInFlightPiece), sizeof(numInFlightPiece)); Pieces inFlightPieces = _pieceStorage->getInFlightPieces(); for(Pieces::const_iterator itr = inFlightPieces.begin(); itr != inFlightPieces.end(); ++itr) { - int32_t index = (*itr)->getIndex(); - o.write(reinterpret_cast<const char*>(&index), sizeof(int32_t)); - int32_t length = (*itr)->getLength(); - o.write(reinterpret_cast<const char*>(&length), sizeof(int32_t)); - int32_t bitfieldLength = (*itr)->getBitfieldLength(); - o.write(reinterpret_cast<const char*>(&bitfieldLength), sizeof(int32_t)); + uint32_t index = (*itr)->getIndex(); + o.write(reinterpret_cast<const char*>(&index), sizeof(index)); + uint32_t length = (*itr)->getLength(); + o.write(reinterpret_cast<const char*>(&length), sizeof(length)); + uint32_t bitfieldLength = (*itr)->getBitfieldLength(); + o.write(reinterpret_cast<const char*>(&bitfieldLength), sizeof(bitfieldLength)); o.write(reinterpret_cast<const char*>((*itr)->getBitfield()), bitfieldLength); } @@ -180,7 +180,7 @@ void DefaultBtProgressInfoFile::load() _logger->debug("InfoHash checking enabled."); } - int32_t infoHashLength; + uint32_t infoHashLength; in.read(reinterpret_cast<char*>(&infoHashLength), sizeof(infoHashLength)); if(infoHashLength < 0 || infoHashLength == 0 && infoHashCheckEnabled) { throw new DlAbortEx("Invalid info hash length: %d", infoHashLength); @@ -199,26 +199,26 @@ void DefaultBtProgressInfoFile::load() savedInfoHash = 0; } - int32_t pieceLength; + uint32_t pieceLength; in.read(reinterpret_cast<char*>(&pieceLength), sizeof(pieceLength)); - int64_t totalLength; + uint64_t totalLength; in.read(reinterpret_cast<char*>(&totalLength), sizeof(totalLength)); if(totalLength != _dctx->getTotalLength()) { throw new DlAbortEx("total length mismatch. expected: %s, actual: %s", Util::itos(_dctx->getTotalLength()).c_str(), Util::itos(totalLength).c_str()); } - int64_t uploadLength; + uint64_t uploadLength; in.read(reinterpret_cast<char*>(&uploadLength), sizeof(uploadLength)); if(isTorrentDownload()) { BT_RUNTIME(BtContextHandle(_dctx))->setUploadLengthAtStartup(uploadLength); } // TODO implement the conversion mechanism between different piece length. - int32_t bitfieldLength; + uint32_t bitfieldLength; in.read(reinterpret_cast<char*>(&bitfieldLength), sizeof(bitfieldLength)); - int32_t expectedBitfieldLength = ((totalLength+pieceLength-1)/pieceLength+7)/8; + uint32_t expectedBitfieldLength = ((totalLength+pieceLength-1)/pieceLength+7)/8; if(expectedBitfieldLength != bitfieldLength) { throw new DlAbortEx("bitfield length mismatch. expected: %d, actual: %d", expectedBitfieldLength, diff --git a/src/DownloadCommand.cc b/src/DownloadCommand.cc index 4a9f8d23..821224c0 100644 --- a/src/DownloadCommand.cc +++ b/src/DownloadCommand.cc @@ -162,7 +162,7 @@ void DownloadCommand::checkLowestDownloadSpeed() const { // calculate downloading speed if(peerStat->getDownloadStartTime().elapsed(startupIdleTime)) { - int32_t nowSpeed = peerStat->calculateDownloadSpeed(); + unsigned int nowSpeed = peerStat->calculateDownloadSpeed(); if(lowestDownloadSpeedLimit > 0 && nowSpeed <= lowestDownloadSpeedLimit) { throw new DlAbortEx(EX_TOO_SLOW_DOWNLOAD_SPEED, nowSpeed, diff --git a/src/DownloadCommand.h b/src/DownloadCommand.h index a8ae9ad1..da3c465e 100644 --- a/src/DownloadCommand.h +++ b/src/DownloadCommand.h @@ -47,9 +47,9 @@ class MessageDigestContext; class DownloadCommand : public AbstractCommand { private: - int32_t maxDownloadSpeedLimit; - int32_t startupIdleTime; - int32_t lowestDownloadSpeedLimit; + unsigned int maxDownloadSpeedLimit; + time_t startupIdleTime; + unsigned int lowestDownloadSpeedLimit; SharedHandle<PeerStat> peerStat; #ifdef ENABLE_MESSAGE_DIGEST MessageDigestContext* _messageDigestContext; @@ -75,15 +75,15 @@ public: void setTransferDecoder(const SharedHandle<TransferEncoding>& transferDecoder); - void setMaxDownloadSpeedLimit(int32_t maxDownloadSpeedLimit) { + void setMaxDownloadSpeedLimit(unsigned int maxDownloadSpeedLimit) { this->maxDownloadSpeedLimit = maxDownloadSpeedLimit; } - void setStartupIdleTime(int32_t startupIdleTime) { + void setStartupIdleTime(time_t startupIdleTime) { this->startupIdleTime = startupIdleTime; } - void setLowestDownloadSpeedLimit(int32_t lowestDownloadSpeedLimit) { + void setLowestDownloadSpeedLimit(unsigned int lowestDownloadSpeedLimit) { this->lowestDownloadSpeedLimit = lowestDownloadSpeedLimit; } }; diff --git a/src/DownloadContext.h b/src/DownloadContext.h index 4fc8658d..6565d5b9 100644 --- a/src/DownloadContext.h +++ b/src/DownloadContext.h @@ -60,11 +60,11 @@ public: MULTI }; - virtual std::string getPieceHash(int32_t index) const = 0; + virtual std::string getPieceHash(size_t index) const = 0; virtual const std::deque<std::string>& getPieceHashes() const = 0; - virtual int64_t getTotalLength() const = 0; + virtual uint64_t getTotalLength() const = 0; virtual FILE_MODE getFileMode() const = 0; @@ -72,9 +72,9 @@ public: virtual std::string getName() const = 0; - virtual int32_t getPieceLength() const = 0; + virtual size_t getPieceLength() const = 0; - virtual int32_t getNumPieces() const = 0; + virtual size_t getNumPieces() const = 0; virtual std::string getPieceHashAlgo() const = 0; diff --git a/src/IteratableChecksumValidator.cc b/src/IteratableChecksumValidator.cc index 4d57c63d..415ad594 100644 --- a/src/IteratableChecksumValidator.cc +++ b/src/IteratableChecksumValidator.cc @@ -66,9 +66,9 @@ IteratableChecksumValidator::~IteratableChecksumValidator() void IteratableChecksumValidator::validateChunk() { if(!finished()) { - int32_t length = _pieceStorage->getDiskAdaptor()->readData(_buffer, - BUFSIZE, - _currentOffset); + size_t length = _pieceStorage->getDiskAdaptor()->readData(_buffer, + BUFSIZE, + _currentOffset); _ctx->digestUpdate(_buffer, length); _currentOffset += length; if(finished()) { @@ -85,7 +85,7 @@ void IteratableChecksumValidator::validateChunk() bool IteratableChecksumValidator::finished() const { - if(_currentOffset >= _dctx->getTotalLength()) { + if((uint16_t)_currentOffset >= _dctx->getTotalLength()) { _pieceStorage->getDiskAdaptor()->disableDirectIO(); return true; } else { @@ -93,7 +93,7 @@ bool IteratableChecksumValidator::finished() const } } -int64_t IteratableChecksumValidator::getTotalLength() const +uint64_t IteratableChecksumValidator::getTotalLength() const { return _dctx->getTotalLength(); } diff --git a/src/IteratableChecksumValidator.h b/src/IteratableChecksumValidator.h index 7c056d2d..5150e6a0 100644 --- a/src/IteratableChecksumValidator.h +++ b/src/IteratableChecksumValidator.h @@ -51,7 +51,7 @@ private: SharedHandle<PieceStorage> _pieceStorage; - int64_t _currentOffset; + off_t _currentOffset; SharedHandle<MessageDigestContext> _ctx; @@ -71,12 +71,12 @@ public: virtual bool finished() const; - virtual int64_t getCurrentOffset() const + virtual off_t getCurrentOffset() const { return _currentOffset; } - virtual int64_t getTotalLength() const; + virtual uint64_t getTotalLength() const; }; typedef SharedHandle<IteratableChecksumValidator> IteratableChecksumValidatorHandle; diff --git a/src/IteratableChunkChecksumValidator.cc b/src/IteratableChunkChecksumValidator.cc index 5fa757af..2d2c2590 100644 --- a/src/IteratableChunkChecksumValidator.cc +++ b/src/IteratableChunkChecksumValidator.cc @@ -101,10 +101,10 @@ void IteratableChunkChecksumValidator::validateChunk() std::string IteratableChunkChecksumValidator::calculateActualChecksum() { - int64_t offset = getCurrentOffset(); - int32_t length; + off_t offset = getCurrentOffset(); + size_t length; // When validating last piece - if(_currentIndex+1 == (uint32_t)_dctx->getNumPieces()) { + if(_currentIndex+1 == _dctx->getNumPieces()) { length = _dctx->getTotalLength()-offset; } else { length = _dctx->getPieceLength(); @@ -129,25 +129,25 @@ void IteratableChunkChecksumValidator::init() _currentIndex = 0; } -std::string IteratableChunkChecksumValidator::digest(int64_t offset, int32_t length) +std::string IteratableChunkChecksumValidator::digest(off_t offset, size_t length) { _ctx->digestReset(); - int64_t curoffset = offset/ALIGNMENT*ALIGNMENT; - int64_t max = offset+length; - int32_t woffset; + off_t curoffset = offset/ALIGNMENT*ALIGNMENT; + off_t max = offset+length; + off_t woffset; if(curoffset < offset) { woffset = offset-curoffset; } else { woffset = 0; } while(curoffset < max) { - int32_t r = _pieceStorage->getDiskAdaptor()->readData(_buffer, BUFSIZE, - curoffset); + size_t r = _pieceStorage->getDiskAdaptor()->readData(_buffer, BUFSIZE, + curoffset); if(r == 0) { throw new DlAbortEx(EX_FILE_READ, _dctx->getActualBasePath().c_str(), strerror(errno)); } - int32_t wlength; + size_t wlength; if(max < curoffset+r) { wlength = max-curoffset-woffset; } else { @@ -163,7 +163,7 @@ std::string IteratableChunkChecksumValidator::digest(int64_t offset, int32_t len bool IteratableChunkChecksumValidator::finished() const { - if(_currentIndex >= (uint32_t)_dctx->getNumPieces()) { + if(_currentIndex >= _dctx->getNumPieces()) { _pieceStorage->getDiskAdaptor()->disableDirectIO(); return true; } else { @@ -171,12 +171,12 @@ bool IteratableChunkChecksumValidator::finished() const } } -int64_t IteratableChunkChecksumValidator::getCurrentOffset() const +off_t IteratableChunkChecksumValidator::getCurrentOffset() const { - return (int64_t)_currentIndex*_dctx->getPieceLength(); + return (off_t)_currentIndex*_dctx->getPieceLength(); } -int64_t IteratableChunkChecksumValidator::getTotalLength() const +uint64_t IteratableChunkChecksumValidator::getTotalLength() const { return _dctx->getTotalLength(); } diff --git a/src/IteratableChunkChecksumValidator.h b/src/IteratableChunkChecksumValidator.h index 68fa6fbb..6d5e3e75 100644 --- a/src/IteratableChunkChecksumValidator.h +++ b/src/IteratableChunkChecksumValidator.h @@ -51,14 +51,14 @@ private: SharedHandle<DownloadContext> _dctx; SharedHandle<PieceStorage> _pieceStorage; BitfieldMan* _bitfield; - uint32_t _currentIndex; + size_t _currentIndex; const Logger* _logger; SharedHandle<MessageDigestContext> _ctx; unsigned char* _buffer; std::string calculateActualChecksum(); - std::string digest(int64_t offset, int32_t length); + std::string digest(off_t offset, size_t length); public: IteratableChunkChecksumValidator(const SharedHandle<DownloadContext>& dctx, @@ -72,9 +72,9 @@ public: virtual bool finished() const; - virtual int64_t getCurrentOffset() const; + virtual off_t getCurrentOffset() const; - virtual int64_t getTotalLength() const; + virtual uint64_t getTotalLength() const; }; typedef SharedHandle<IteratableChunkChecksumValidator> IteratableChunkChecksumValidatorHandle; diff --git a/src/IteratableValidator.h b/src/IteratableValidator.h index 23fa3c65..4737c39d 100644 --- a/src/IteratableValidator.h +++ b/src/IteratableValidator.h @@ -59,9 +59,9 @@ public: virtual bool finished() const = 0; - virtual int64_t getCurrentOffset() const = 0; + virtual off_t getCurrentOffset() const = 0; - virtual int64_t getTotalLength() const = 0; + virtual uint64_t getTotalLength() const = 0; }; typedef SharedHandle<IteratableValidator> IteratableValidatorHandle; diff --git a/src/SegmentMan.cc b/src/SegmentMan.cc index d8eddb0e..084b4bc3 100644 --- a/src/SegmentMan.cc +++ b/src/SegmentMan.cc @@ -78,7 +78,7 @@ void SegmentMan::init() // TODO Do we have to do something about DownloadContext and PieceStorage here? } -int64_t SegmentMan::getTotalLength() const +uint64_t SegmentMan::getTotalLength() const { if(_pieceStorage.isNull()) { return 0; @@ -123,7 +123,7 @@ SegmentHandle SegmentMan::checkoutSegment(int32_t cuid, } SegmentEntryHandle SegmentMan::findSlowerSegmentEntry(const PeerStatHandle& peerStat) const { - int32_t speed = (int32_t)(peerStat->getAvgDownloadSpeed()*0.8); + unsigned int speed = peerStat->getAvgDownloadSpeed()*0.8; SegmentEntryHandle slowSegmentEntry(0); for(SegmentEntries::const_iterator itr = usedSegmentEntries.begin(); itr != usedSegmentEntries.end(); ++itr) { @@ -137,7 +137,7 @@ SegmentEntryHandle SegmentMan::findSlowerSegmentEntry(const PeerStatHandle& peer !p->getDownloadStartTime().elapsed(_option->getAsInt(PREF_STARTUP_IDLE_TIME))) { continue; } - int32_t pSpeed = p->calculateDownloadSpeed(); + unsigned int pSpeed = p->calculateDownloadSpeed(); if(pSpeed < speed) { speed = pSpeed; slowSegmentEntry = segmentEntry; @@ -184,8 +184,8 @@ SegmentHandle SegmentMan::getSegment(int32_t cuid) { } } -SegmentHandle SegmentMan::getSegment(int32_t cuid, int32_t index) { - if(index < 0 || _downloadContext->getNumPieces() <= index) { +SegmentHandle SegmentMan::getSegment(int32_t cuid, size_t index) { + if(_downloadContext->getNumPieces() <= index) { return 0; } return checkoutSegment(cuid, _pieceStorage->getMissingPiece(index)); @@ -229,11 +229,11 @@ bool SegmentMan::completeSegment(int32_t cuid, const SegmentHandle& segment) { } } -bool SegmentMan::hasSegment(int32_t index) const { +bool SegmentMan::hasSegment(size_t index) const { return _pieceStorage->hasPiece(index); } -int64_t SegmentMan::getDownloadLength() const { +uint64_t SegmentMan::getDownloadLength() const { if(_pieceStorage.isNull()) { return 0; } else { @@ -259,8 +259,8 @@ PeerStatHandle SegmentMan::getPeerStat(int32_t cuid) const return 0; } -int32_t SegmentMan::calculateDownloadSpeed() const { - int32_t speed = 0; +unsigned int SegmentMan::calculateDownloadSpeed() const { + unsigned int speed = 0; for(std::deque<SharedHandle<PeerStat> >::const_iterator itr = peerStats.begin(); itr != peerStats.end(); itr++) { const PeerStatHandle& peerStat = *itr; if(peerStat->getStatus() == PeerStat::ACTIVE) { @@ -270,9 +270,10 @@ int32_t SegmentMan::calculateDownloadSpeed() const { return speed; } -int32_t SegmentMan::countFreePieceFrom(int32_t index) const +size_t SegmentMan::countFreePieceFrom(size_t index) const { - for(int32_t i = index; i < _downloadContext->getNumPieces(); ++i) { + size_t numPieces = _downloadContext->getNumPieces(); + for(size_t i = index; i < numPieces; ++i) { if(_pieceStorage->hasPiece(i) || _pieceStorage->isPieceUsed(i)) { return i-index; } diff --git a/src/SegmentMan.h b/src/SegmentMan.h index 3e4cc03e..3d933538 100644 --- a/src/SegmentMan.h +++ b/src/SegmentMan.h @@ -100,7 +100,7 @@ public: * If Transfer-Encoding is Chunked or Content-Length header is not provided, * then this value is set to be 0. */ - int64_t getTotalLength() const; + uint64_t getTotalLength() const; /** * Returs true when the download has finished. @@ -124,7 +124,7 @@ public: * to another cuid or has been downloaded, then returns a segment instance * whose isNull call is true. */ - SharedHandle<Segment> getSegment(int32_t cuid, int32_t index); + SharedHandle<Segment> getSegment(int32_t cuid, size_t index); /** * Updates download status. */ @@ -152,11 +152,11 @@ public: /** * Returns true if the segment whose index is index has been downloaded. */ - bool hasSegment(int32_t index) const; + bool hasSegment(size_t index) const; /** * Returns the length of bytes downloaded. */ - int64_t getDownloadLength() const; + uint64_t getDownloadLength() const; /** * Registers given peerStat if it has not been registerd. @@ -173,9 +173,9 @@ public: /** * Returns current download speed in bytes per sec. */ - int32_t calculateDownloadSpeed() const; + unsigned int calculateDownloadSpeed() const; - int32_t countFreePieceFrom(int32_t index) const; + size_t countFreePieceFrom(size_t index) const; }; typedef SharedHandle<SegmentMan> SegmentManHandle; diff --git a/src/SingleFileDownloadContext.cc b/src/SingleFileDownloadContext.cc index 4eae5b63..2bfa6ae6 100644 --- a/src/SingleFileDownloadContext.cc +++ b/src/SingleFileDownloadContext.cc @@ -37,8 +37,8 @@ namespace aria2 { -SingleFileDownloadContext::SingleFileDownloadContext(int32_t pieceLength, - int64_t totalLength, +SingleFileDownloadContext::SingleFileDownloadContext(size_t pieceLength, + uint64_t totalLength, const std::string& filename, const std::string& ufilename): _pieceLength(pieceLength), @@ -66,7 +66,7 @@ SingleFileDownloadContext::getPieceHashes() const return _pieceHashes; } -int64_t SingleFileDownloadContext::getTotalLength() const +uint64_t SingleFileDownloadContext::getTotalLength() const { return _fileEntry->getLength(); } @@ -79,7 +79,7 @@ SingleFileDownloadContext::getFileEntries() const return fs; } -int32_t SingleFileDownloadContext::getNumPieces() const +size_t SingleFileDownloadContext::getNumPieces() const { return (_fileEntry->getLength()+_pieceLength-1)/_pieceLength; } @@ -89,7 +89,7 @@ std::string SingleFileDownloadContext::getActualBasePath() const return _dir+"/"+_fileEntry->getPath(); } -void SingleFileDownloadContext::setTotalLength(int64_t totalLength) +void SingleFileDownloadContext::setTotalLength(uint64_t totalLength) { _fileEntry->setLength(totalLength); } diff --git a/src/SingleFileDownloadContext.h b/src/SingleFileDownloadContext.h index d02a4f9f..1964c65c 100644 --- a/src/SingleFileDownloadContext.h +++ b/src/SingleFileDownloadContext.h @@ -44,7 +44,7 @@ namespace aria2 { class SingleFileDownloadContext:public DownloadContext { private: - int32_t _pieceLength; + size_t _pieceLength; /** * Actual file path is _dir + _filename. * If _ufilename is not zero-length string, then _dir + _ufilename. @@ -67,24 +67,25 @@ private: void updateFileEntry(); public: - SingleFileDownloadContext(int32_t pieceLength, - int64_t totalLength, + SingleFileDownloadContext(size_t pieceLength, + uint64_t totalLength, const std::string& filename, const std::string& ufilename = ""); virtual ~SingleFileDownloadContext() {} - virtual std::string getPieceHash(int32_t index) const + virtual std::string getPieceHash(size_t index) const { - if(index < 0 || _pieceHashes.size() <= (size_t)index) { + if(index < _pieceHashes.size()) { + return _pieceHashes[index]; + } else { return ""; } - return _pieceHashes[index]; } virtual const std::deque<std::string>& getPieceHashes() const; - virtual int64_t getTotalLength() const; + virtual uint64_t getTotalLength() const; virtual FILE_MODE getFileMode() const { @@ -98,12 +99,12 @@ public: return _filename; } - virtual int32_t getPieceLength() const + virtual size_t getPieceLength() const { return _pieceLength; } - virtual int32_t getNumPieces() const; + virtual size_t getNumPieces() const; virtual std::string getActualBasePath() const; @@ -149,7 +150,7 @@ public: updateFileEntry(); } - void setTotalLength(int64_t totalLength); + void setTotalLength(uint64_t totalLength); void setPieceHashAlgo(const std::string& algo) { diff --git a/test/DefaultBtContextTest.cc b/test/DefaultBtContextTest.cc index ce9c4c48..983e22e1 100644 --- a/test/DefaultBtContextTest.cc +++ b/test/DefaultBtContextTest.cc @@ -70,7 +70,7 @@ void DefaultBtContextTest::testGetInfoHash() { std::string correctHash = "248d0a1cd08284299de78d5c1ed359bb46717d8c"; - CPPUNIT_ASSERT_EQUAL((int32_t)20, btContext.getInfoHashLength()); + CPPUNIT_ASSERT_EQUAL((size_t)20, btContext.getInfoHashLength()); CPPUNIT_ASSERT_EQUAL(correctHash, Util::toHex(btContext.getInfoHash(), btContext.getInfoHashLength())); } @@ -127,48 +127,42 @@ void DefaultBtContextTest::testGetTotalLength() { DefaultBtContext btContext; btContext.load("test.torrent"); - CPPUNIT_ASSERT_EQUAL((long long int)384, - btContext.getTotalLength()); + CPPUNIT_ASSERT_EQUAL(384ULL, btContext.getTotalLength()); } void DefaultBtContextTest::testGetTotalLengthSingle() { DefaultBtContext btContext; btContext.load("single.torrent"); - CPPUNIT_ASSERT_EQUAL((long long int)384, - btContext.getTotalLength()); + CPPUNIT_ASSERT_EQUAL(384ULL, btContext.getTotalLength()); } void DefaultBtContextTest::testGetFileModeMulti() { DefaultBtContext btContext; btContext.load("test.torrent"); - CPPUNIT_ASSERT_EQUAL(BtContext::MULTI, - btContext.getFileMode()); + CPPUNIT_ASSERT_EQUAL(BtContext::MULTI, btContext.getFileMode()); } void DefaultBtContextTest::testGetFileModeSingle() { DefaultBtContext btContext; btContext.load("single.torrent"); - CPPUNIT_ASSERT_EQUAL(BtContext::SINGLE, - btContext.getFileMode()); + CPPUNIT_ASSERT_EQUAL(BtContext::SINGLE, btContext.getFileMode()); } void DefaultBtContextTest::testGetNameMulti() { DefaultBtContext btContext; btContext.load("test.torrent"); - CPPUNIT_ASSERT_EQUAL(std::string("aria2-test"), - btContext.getName()); + CPPUNIT_ASSERT_EQUAL(std::string("aria2-test"), btContext.getName()); } void DefaultBtContextTest::testGetNameSingle() { DefaultBtContext btContext; btContext.load("single.torrent"); - CPPUNIT_ASSERT_EQUAL(std::string("aria2-0.8.2.tar.bz2"), - btContext.getName()); + CPPUNIT_ASSERT_EQUAL(std::string("aria2-0.8.2.tar.bz2"), btContext.getName()); } void DefaultBtContextTest::testGetAnnounceTier() { @@ -178,13 +172,11 @@ void DefaultBtContextTest::testGetAnnounceTier() { std::deque<SharedHandle<AnnounceTier> > tiers = btContext.getAnnounceTiers(); // There is 1 tier. - CPPUNIT_ASSERT_EQUAL((size_t)1, - tiers.size()); + CPPUNIT_ASSERT_EQUAL((size_t)1, tiers.size()); std::deque<SharedHandle<AnnounceTier> >::iterator itr = tiers.begin(); SharedHandle<AnnounceTier> tier1 = *itr; - CPPUNIT_ASSERT_EQUAL((size_t)1, - tier1->urls.size()); + CPPUNIT_ASSERT_EQUAL((size_t)1, tier1->urls.size()); CPPUNIT_ASSERT_EQUAL(std::string("http://aria.rednoah.com/announce.php"), tier1->urls.at(0)); @@ -197,35 +189,27 @@ void DefaultBtContextTest::testGetAnnounceTierAnnounceList() { std::deque<SharedHandle<AnnounceTier> > tiers = btContext.getAnnounceTiers(); // There are 3 tiers. - CPPUNIT_ASSERT_EQUAL((size_t)3, - tiers.size()); + CPPUNIT_ASSERT_EQUAL((size_t)3, tiers.size()); SharedHandle<AnnounceTier> tier1 = tiers.at(0); - CPPUNIT_ASSERT_EQUAL((size_t)1, - tier1->urls.size()); + CPPUNIT_ASSERT_EQUAL((size_t)1, tier1->urls.size()); CPPUNIT_ASSERT_EQUAL(std::string("http://tracker1"), tier1->urls.at(0)); SharedHandle<AnnounceTier> tier2 = tiers.at(1); - CPPUNIT_ASSERT_EQUAL((size_t)1, - tier2->urls.size()); - CPPUNIT_ASSERT_EQUAL(std::string("http://tracker2"), - tier2->urls.at(0)); + CPPUNIT_ASSERT_EQUAL((size_t)1, tier2->urls.size()); + CPPUNIT_ASSERT_EQUAL(std::string("http://tracker2"), tier2->urls.at(0)); SharedHandle<AnnounceTier> tier3 = tiers.at(2); - CPPUNIT_ASSERT_EQUAL((size_t)1, - tier3->urls.size()); - CPPUNIT_ASSERT_EQUAL(std::string("http://tracker3"), - tier3->urls.at(0)); - + CPPUNIT_ASSERT_EQUAL((size_t)1, tier3->urls.size()); + CPPUNIT_ASSERT_EQUAL(std::string("http://tracker3"), tier3->urls.at(0)); } void DefaultBtContextTest::testGetPieceLength() { DefaultBtContext btContext; btContext.load("test.torrent"); - CPPUNIT_ASSERT_EQUAL((int32_t)128, - btContext.getPieceLength()); + CPPUNIT_ASSERT_EQUAL((size_t)128, btContext.getPieceLength()); } void DefaultBtContextTest::testGetInfoHashAsString() { @@ -256,18 +240,18 @@ void DefaultBtContextTest::testComputeFastSet() btContext.setInfoHash(infoHash); btContext.setNumPieces(pieces); - std::deque<int32_t> fastSet = btContext.computeFastSet(ipaddr, fastSetSize); + std::deque<size_t> fastSet = btContext.computeFastSet(ipaddr, fastSetSize); //for_each(fastSet.begin(), fastSet.end(), Printer()); //cerr << endl; - int ans1[] = { 686, 459, 278, 200, 404, 834, 64, 203, 760, 950 }; - std::deque<int32_t> ansSet1(&ans1[0], &ans1[10]); - CPPUNIT_ASSERT(equal(fastSet.begin(), fastSet.end(), ansSet1.begin())); + size_t ans1[] = { 686, 459, 278, 200, 404, 834, 64, 203, 760, 950 }; + std::deque<size_t> ansSet1(&ans1[0], &ans1[10]); + CPPUNIT_ASSERT(std::equal(fastSet.begin(), fastSet.end(), ansSet1.begin())); ipaddr = "10.0.0.1"; fastSet = btContext.computeFastSet(ipaddr, fastSetSize); - int ans2[] = { 568, 188, 466, 452, 550, 662, 109, 226, 398, 11 }; - std::deque<int32_t> ansSet2(&ans2[0], &ans2[10]); - CPPUNIT_ASSERT(equal(fastSet.begin(), fastSet.end(), ansSet2.begin())); + size_t ans2[] = { 568, 188, 466, 452, 550, 662, 109, 226, 398, 11 }; + std::deque<size_t> ansSet2(&ans2[0], &ans2[10]); + CPPUNIT_ASSERT(std::equal(fastSet.begin(), fastSet.end(), ansSet2.begin())); } void DefaultBtContextTest::testGetFileEntries_multiFileUrlList() { @@ -327,7 +311,7 @@ void DefaultBtContextTest::testLoadFromMemory() std::string correctHash = "248d0a1cd08284299de78d5c1ed359bb46717d8c"; - CPPUNIT_ASSERT_EQUAL((int32_t)20, btContext.getInfoHashLength()); + CPPUNIT_ASSERT_EQUAL((size_t)20, btContext.getInfoHashLength()); CPPUNIT_ASSERT_EQUAL(correctHash, Util::toHex(btContext.getInfoHash(), btContext.getInfoHashLength())); } diff --git a/test/Metalink2RequestGroupTest.cc b/test/Metalink2RequestGroupTest.cc index d4bb9327..ef50293f 100644 --- a/test/Metalink2RequestGroupTest.cc +++ b/test/Metalink2RequestGroupTest.cc @@ -44,7 +44,7 @@ void Metalink2RequestGroupTest::testGenerate() CPPUNIT_ASSERT_EQUAL(std::string("http://httphost/aria2-0.5.2.tar.bz2"), uris[1]); SharedHandle<SingleFileDownloadContext> dctx = rg->getDownloadContext(); CPPUNIT_ASSERT(!dctx.isNull()); - CPPUNIT_ASSERT_EQUAL((int64_t)0, dctx->getTotalLength()); + CPPUNIT_ASSERT_EQUAL(0ULL, dctx->getTotalLength()); #ifdef ENABLE_MESSAGE_DIGEST CPPUNIT_ASSERT_EQUAL(std::string("sha1"), dctx->getChecksumHashAlgo()); CPPUNIT_ASSERT_EQUAL(std::string("a96cf3f0266b91d87d5124cf94326422800b627d"), @@ -61,7 +61,7 @@ void Metalink2RequestGroupTest::testGenerate() #ifdef ENABLE_MESSAGE_DIGEST CPPUNIT_ASSERT_EQUAL(std::string("sha1"), dctx->getPieceHashAlgo()); CPPUNIT_ASSERT_EQUAL((size_t)2, dctx->getPieceHashes().size()); - CPPUNIT_ASSERT_EQUAL((int32_t)262144, dctx->getPieceLength()); + CPPUNIT_ASSERT_EQUAL((size_t)262144, dctx->getPieceLength()); CPPUNIT_ASSERT_EQUAL(std::string(""), dctx->getChecksumHashAlgo()); CPPUNIT_ASSERT_EQUAL(std::string(""), dctx->getChecksum()); #endif // ENABLE_MESSAGE_DIGEST diff --git a/test/MockBtContext.h b/test/MockBtContext.h index 622bd38f..9f143dc6 100644 --- a/test/MockBtContext.h +++ b/test/MockBtContext.h @@ -11,16 +11,16 @@ class MockBtContext : public BtContext { private: unsigned char infoHash[20]; std::deque<std::string> pieceHashes; - int64_t totalLength; + uint64_t totalLength; FILE_MODE fileMode; std::string name; - int32_t pieceLength; - int32_t numPieces; + size_t pieceLength; + size_t numPieces; unsigned char peerId[20]; std::deque<SharedHandle<FileEntry> > fileEntries; std::deque<SharedHandle<AnnounceTier> > announceTiers; std::deque<std::pair<std::string, uint16_t> > _nodes; - std::deque<int32_t> fastSet; + std::deque<size_t> fastSet; public: MockBtContext():totalLength(0), pieceLength(0), @@ -36,7 +36,7 @@ public: memcpy(this->infoHash, infoHash, sizeof(this->infoHash)); } - virtual int32_t getInfoHashLength() const { + virtual size_t getInfoHashLength() const { return sizeof(infoHash); } @@ -44,7 +44,7 @@ public: return Util::toHex(infoHash, sizeof(infoHash)); } - virtual std::string getPieceHash(int32_t index) const { + virtual std::string getPieceHash(size_t index) const { return pieceHashes.at(index); } @@ -56,11 +56,11 @@ public: pieceHashes.push_back(pieceHash); } - virtual int64_t getTotalLength() const { + virtual uint64_t getTotalLength() const { return totalLength; } - void setTotalLength(int64_t length) { + void setTotalLength(uint64_t length) { this->totalLength = length; } @@ -98,19 +98,19 @@ public: this->name = name; } - virtual int32_t getPieceLength() const { + virtual size_t getPieceLength() const { return pieceLength; } - void setPieceLength(int32_t pieceLength) { + void setPieceLength(size_t pieceLength) { this->pieceLength = pieceLength; } - virtual int32_t getNumPieces() const { + virtual size_t getNumPieces() const { return numPieces; } - void setNumPieces(int32_t numPieces) { + void setNumPieces(size_t numPieces) { this->numPieces = numPieces; } @@ -122,12 +122,12 @@ public: memcpy(this->peerId, peerId, sizeof(this->peerId)); } - virtual std::deque<int32_t> computeFastSet(const std::string& ipaddr, int32_t fastSetSize) + virtual std::deque<size_t> computeFastSet(const std::string& ipaddr, size_t fastSetSize) { return fastSet; } - void setFastSet(const std::deque<int32_t>& fastSet) + void setFastSet(const std::deque<size_t>& fastSet) { this->fastSet = fastSet; } diff --git a/test/SingleFileDownloadContextTest.cc b/test/SingleFileDownloadContextTest.cc index bd4af71d..c99cb015 100644 --- a/test/SingleFileDownloadContextTest.cc +++ b/test/SingleFileDownloadContextTest.cc @@ -40,7 +40,7 @@ void SingleFileDownloadContextTest::testGetPieceHash() void SingleFileDownloadContextTest::testGetNumPieces() { SingleFileDownloadContext ctx(345, 9889, ""); - CPPUNIT_ASSERT_EQUAL((int32_t)29, ctx.getNumPieces()); + CPPUNIT_ASSERT_EQUAL((size_t)29, ctx.getNumPieces()); } void SingleFileDownloadContextTest::testGetActualBasePath()