/* */ #ifndef D_METALINK_ENTRY_H #define D_METALINK_ENTRY_H #include "common.h" #include #include #include namespace aria2 { class MetalinkResource; class MetalinkMetaurl; class FileEntry; class Checksum; class ChunkChecksum; class Signature; class MetalinkEntry { public: std::unique_ptr file; std::string version; std::vector languages; std::vector oses; // True if size is specified in Metalink document. bool sizeKnown; std::vector> resources; std::vector> metaurls; int maxConnections; // Metalink3Spec std::unique_ptr checksum; std::unique_ptr chunkChecksum; private: std::unique_ptr signature_; public: MetalinkEntry(); ~MetalinkEntry(); const std::string& getPath() const; int64_t getLength() const; const std::unique_ptr& getFile() const { return file; } std::unique_ptr popFile(); void dropUnsupportedResource(); void reorderResourcesByPriority(); void reorderMetaurlsByPriority(); bool containsLanguage(const std::string& lang) const; bool containsOS(const std::string& os) const; void setLocationPriority(const std::vector& locations, int priorityToAdd); void setProtocolPriority(const std::string& protocol, int priorityToAdd); static std::vector> toFileEntry(std::vector> metalinkEntries); void setSignature(std::unique_ptr signature); const std::unique_ptr& getSignature() const { return signature_; } std::unique_ptr popSignature(); }; } // namespace aria2 #endif // D_METALINK_ENTRY_H