/* */ #ifndef _D_METALINK_ENTRY_H_ #define _D_METALINK_ENTRY_H_ #include "common.h" #include #include #include #include #include "SharedHandle.h" namespace aria2 { class MetalinkResource; class MetalinkMetaurl; class FileEntry; #ifdef ENABLE_MESSAGE_DIGEST class Checksum; class ChunkChecksum; #endif // ENABLE_MESSAGE_DIGEST class Signature; class MetalinkEntry { public: SharedHandle file; std::string version; std::vector languages; std::vector oses; // True if size is specified in Metalink document. bool sizeKnown; std::deque > resources; std::vector > metaurls; int maxConnections; // Metalink3Spec #ifdef ENABLE_MESSAGE_DIGEST SharedHandle checksum; SharedHandle chunkChecksum; #endif // ENABLE_MESSAGE_DIGEST private: SharedHandle _signature; public: MetalinkEntry(); ~MetalinkEntry(); MetalinkEntry& operator=(const MetalinkEntry& metalinkEntry); const std::string& getPath() const; uint64_t getLength() const; const SharedHandle& getFile() const { return file; } void dropUnsupportedResource(); void reorderResourcesByPriority(); void reorderMetaurlsByPriority(); bool containsLanguage(const std::string& lang) const { return std::find(languages.begin(), languages.end(), lang) != languages.end(); } bool containsOS(const std::string& os) const { return std::find(oses.begin(), oses.end(), os) != oses.end(); } void setLocationPriority (const std::deque& locations, int priorityToAdd); void setProtocolPriority(const std::string& protocol, int priorityToAdd); static void toFileEntry (std::deque >& fileEntries, const std::deque >& metalinkEntries); void setSignature(const SharedHandle& signature); const SharedHandle& getSignature() const { return _signature; } }; } // namespace aria2 #endif // _D_METALINK_ENTRY_H_