/* */ #ifndef D_DOWNLOAD_CONTEXT_H #define D_DOWNLOAD_CONTEXT_H #include "common.h" #include #include #include #include "SharedHandle.h" #include "TimerA2.h" #include "A2STR.h" #include "ValueBase.h" #include "IntSequence.h" namespace aria2 { class RequestGroup; class Signature; class FileEntry; class ContextAttribute; class DownloadContext { private: std::vector > fileEntries_; std::vector pieceHashes_; size_t pieceLength_; std::string pieceHashAlgo_; std::string checksum_; std::string checksumHashAlgo_; bool checksumVerified_; std::string basePath_; bool knowsTotalLength_; RequestGroup* ownerRequestGroup_; std::map > attrs_; Timer downloadStartTime_; Timer downloadStopTime_; SharedHandle signature_; public: DownloadContext(); // Convenient constructor that creates single file download. path // should be escaped with util::escapePath(...). DownloadContext(size_t pieceLength, uint64_t totalLength, const std::string& path = A2STR::NIL); ~DownloadContext(); const std::string& getPieceHash(size_t index) const; const std::vector& getPieceHashes() const { return pieceHashes_; } template void setPieceHashes(InputIterator first, InputIterator last) { pieceHashes_.assign(first, last); } uint64_t getTotalLength() const; bool knowsTotalLength() const { return knowsTotalLength_; } void markTotalLengthIsUnknown() { knowsTotalLength_ = false; } void markTotalLengthIsKnown() { knowsTotalLength_ = true; } const std::vector >& getFileEntries() const { return fileEntries_; } const SharedHandle& getFirstFileEntry() const { assert(!fileEntries_.empty()); return fileEntries_[0]; } // This function returns first FileEntry whose isRequested() returns // true. If there is no such FileEntry, returns // SharedHandle(). SharedHandle getFirstRequestedFileEntry() const; size_t countRequestedFileEntry() const; template void setFileEntries(InputIterator first, InputIterator last) { fileEntries_.assign(first, last); } size_t getPieceLength() const { return pieceLength_; } void setPieceLength(size_t length) { pieceLength_ = length; } size_t getNumPieces() const; const std::string& getPieceHashAlgo() const { return pieceHashAlgo_; } void setPieceHashAlgo(const std::string& algo); const std::string& getChecksum() const { return checksum_; } void setChecksum(const std::string& checksum); const std::string& getChecksumHashAlgo() const { return checksumHashAlgo_; } void setChecksumHashAlgo(const std::string& algo); // The representative path name for this context. It is used as a // part of .aria2 control file. If basePath_ is set, returns // basePath_. Otherwise, the first FileEntry's getFilePath() is // returned. const std::string& getBasePath() const; void setBasePath(const std::string& basePath); const SharedHandle& getSignature() const { return signature_; } void setSignature(const SharedHandle& signature); RequestGroup* getOwnerRequestGroup() { return ownerRequestGroup_; } void setOwnerRequestGroup(RequestGroup* owner) { ownerRequestGroup_ = owner; } void setFileFilter(IntSequence seq); // Sets file path for specified index. index starts from 1. The // index is the same used in setFileFilter(). Please note that path // is not the actual file path. The actual file path is // getDir()+"/"+path. path is not escaped by util::escapePath() in // this function. void setFilePathWithIndex(size_t index, const std::string& path); // Returns true if hash check(whole file hash, not piece hash) is // need to be done bool isChecksumVerificationNeeded() const; // Returns true if whole hash(not piece hash) is available. bool isChecksumVerificationAvailable() const; // Returns true if piece hash(not whole file hash) is available. bool isPieceHashVerificationAvailable() const; void setChecksumVerified(bool f) { checksumVerified_ = f; } void setAttribute (const std::string& key, const SharedHandle& value); const SharedHandle& getAttribute(const std::string& key); bool hasAttribute(const std::string& key) const; void resetDownloadStartTime(); void resetDownloadStopTime(); const Timer& getDownloadStopTime() const { return downloadStopTime_; } int64_t calculateSessionTime() const; // Returns FileEntry at given offset. SharedHandle() is // returned if no such FileEntry is found. SharedHandle findFileEntryByOffset(off_t offset) const; void releaseRuntimeResource(); }; } // namespace aria2 #endif // D_DOWNLOAD_CONTEXT_H