From ccdd5b31a3dfa07cd13d6f7f0f5eaa3d8ff8a61e Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 31 May 2007 15:56:20 +0000 Subject: 2007-06-01 Tatsuhiro Tsujikawa * src/FileAllocationCommand.cc: Derived from RealtimeCommand. * src/CheckIntegrityCommand.cc: Derived from RealtimeCommand. * src/MetalinkEntry.h (checksum): Changed to ChecksumHandle * src/MetalinkRequestInfo.cc (checksum): Changed to ChecksumHandle * src/File.cc (mkdirs): OPEN_MODE -> DIR_OPEN_MODE * src/common.h (DIR_OPEN_MODE): New definition * src/RequestGroup.cc (prepareForNextAction): Added an argument. * src/message.h (MSG_GOOD_CHECKSUM): New definition (MSG_BAD_CHECKSUM): New definition * src/HttpResponseCommand.cc (handleDefaultEncoding): Continue download sequence in new non-segmented download. * src/FileAllocationEntry.h (_nextDownloadCommand): New variable. * src/DownloadCommand.cc (prepareForNextSegment): Create ChecksumCommand if checksum is available. * src/RealtimeCommand.h, src/RealtimeCommand.cc: New class. * src/IteratableChecksumValidator.h, src/IteratableChecksumValidator.cc: New class. * src/ChecksumCommand.h, src/ChecksumCommand.cc: New class. --- src/IteratableChecksumValidator.h | 93 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/IteratableChecksumValidator.h (limited to 'src/IteratableChecksumValidator.h') diff --git a/src/IteratableChecksumValidator.h b/src/IteratableChecksumValidator.h new file mode 100644 index 00000000..fd941072 --- /dev/null +++ b/src/IteratableChecksumValidator.h @@ -0,0 +1,93 @@ +/* */ +#ifndef _D_ITERATABLE_CHECKSUM_VALIDATOR_H_ +#define _D_ITERATABLE_CHECKSUM_VALIDATOR_H_ + +#include "common.h" +#include "BitfieldMan.h" +#include "Checksum.h" +#include "DiskWriter.h" +#include "LogFactory.h" +#include "messageDigest.h" + +class IteratableChecksumValidator +{ +private: + DiskWriterHandle _diskWriter; + BitfieldMan* _bitfield; + int64_t _currentOffset; + ChecksumHandle _checksum; + const Logger* logger; + MessageDigestContextHandle _ctx; + + string calculateActualChecksum(); +public: + IteratableChecksumValidator():_diskWriter(0), _bitfield(0), _currentOffset(0), _checksum(0), logger(LogFactory::getInstance()), _ctx(0) {} + + bool canValidate() const; + + void init(); + + void validateChunk(); + + bool finished() const + { + return _currentOffset >= _bitfield->getTotalLength(); + } + + void setDiskWriter(const DiskWriterHandle& diskWriter) + { + _diskWriter = diskWriter; + } + + void setBitfield(BitfieldMan* bitfield) + { + _bitfield = bitfield; + } + + void setChecksum(const ChecksumHandle& checksum) + { + _checksum = checksum; + } + + int64_t getCurrentOffset() const + { + return _currentOffset; + } +}; + +typedef SharedHandle IteratableChecksumValidatorHandle; + +#endif // _D_ITERATABLE_CHECKSUM_VALIDATOR_H_ -- cgit