/* */ #ifndef _D_URL_REQUEST_INFO_H_ #define _D_URL_REQUEST_INFO_H_ #include "RequestInfo.h" class HeadResult { public: string filename; int64_t totalLength; public: HeadResult():totalLength(0) {} }; std::ostream& operator<<(std::ostream& o, const HeadResult& hr); typedef SharedHandle HeadResultHandle; class UrlRequestInfo : public RequestInfo { private: Strings urls; int32_t maxConnections; string _filename; int64_t _totalLength; #ifdef ENABLE_MESSAGE_DIGEST MessageDigestContext::DigestAlgo digestAlgo; int32_t chunkChecksumLength; Strings chunkChecksums; #endif // ENABLE_MESSAGE_DIGEST RequestInfo* createNextRequestInfo() const; void adjustRequestSize(Requests& requests, Requests& reserved, int32_t maxConnections) const; void printUrls(const Strings& urls) const; HeadResultHandle getHeadResult(); public: UrlRequestInfo(const Strings& urls, int32_t maxConnections, Option* op): RequestInfo(op), urls(urls), maxConnections(maxConnections), _totalLength(0) #ifdef ENABLE_MESSAGE_DIGEST , digestAlgo(DIGEST_ALGO_SHA1), chunkChecksumLength(0) #endif // ENABLE_MESSAGE_DIGEST {} virtual ~UrlRequestInfo() {} virtual RequestInfos execute(); #ifdef ENABLE_MESSAGE_DIGEST void setDigestAlgo(const MessageDigestContext::DigestAlgo& algo) { this->digestAlgo = algo; } #endif // ENABLE_MESSAGE_DIGEST #ifdef ENABLE_MESSAGE_DIGEST void setChunkChecksumLength(int32_t chunkChecksumLength) { this->chunkChecksumLength = chunkChecksumLength; } #endif // ENABLE_MESSAGE_DIGEST #ifdef ENABLE_MESSAGE_DIGEST void setChunkChecksums(const Strings& chunkChecksums) { this->chunkChecksums = chunkChecksums; } #endif // ENABLE_MESSAGE_DIGEST void setTotalLength(int64_t totalLength) { _totalLength = totalLength; } void setFilename(const string& filename) { _filename = filename; } }; typedef SharedHandle UrlRequestInfoHandle; #endif // _D_URL_REQUEST_INFO_H_