From c1730aeea945f80b5bf152dc6e7b7d9a42a40b5c Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 22 Nov 2009 15:31:47 +0000 Subject: 2009-11-23 Tatsuhiro Tsujikawa Fixed ut_metadata data handling. Implemented UTMetadataDataExtensionMessage::doReceivedAction(). Initialize PeerStorage in HandshakeExtensionMessage::doReceivedAction() when metadata_size is received. * src/DefaultExtensionMessageFactory.cc * src/DefaultExtensionMessageFactory.h * src/HandshakeExtensionMessage.cc * src/HandshakeExtensionMessage.h * src/UTMetadataDataExtensionMessage.cc * src/UTMetadataDataExtensionMessage.h * src/UTMetadataRequestExtensionMessage.cc * src/UTMetadataRequestFactory.cc * src/UTMetadataRequestFactory.h * src/UTMetadataRequestTracker.cc * src/UTMetadataRequestTracker.h * test/DefaultExtensionMessageFactoryTest.cc * test/HandshakeExtensionMessageTest.cc * test/MockBtMessage.h * test/UTMetadataDataExtensionMessageTest.cc * test/UTMetadataRequestExtensionMessageTest.cc * test/UTMetadataRequestFactoryTest.cc * test/UTMetadataRequestTrackerTest.cc * test/extension_message_test_helper.h --- src/UTMetadataRequestTracker.h | 100 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/UTMetadataRequestTracker.h (limited to 'src/UTMetadataRequestTracker.h') diff --git a/src/UTMetadataRequestTracker.h b/src/UTMetadataRequestTracker.h new file mode 100644 index 00000000..3788496e --- /dev/null +++ b/src/UTMetadataRequestTracker.h @@ -0,0 +1,100 @@ +/* */ +#ifndef _UT_METADATA_REQUEST_TRACKER_H_ +#define _UT_METADATA_REQUEST_TRACKER_H_ + +#include "common.h" + +#include + +#include "TimeA2.h" + +namespace aria2 { + +class Logger; + +class UTMetadataRequestTracker { +private: + struct RequestEntry { + size_t _index; + Time _dispatchedTime; + + RequestEntry(size_t index):_index(index) {} + + bool elapsed(time_t t) const + { + return _dispatchedTime.elapsed(t); + } + + bool operator==(const RequestEntry& e) const + { + return _index == e._index; + } + }; + + std::vector _trackedRequests; + + Logger* _logger; +public: + UTMetadataRequestTracker(); + + // Add request index to tracking list. + void add(size_t index); + + // Returns true if request index is tracked. + bool tracks(size_t index); + + // Remove index from tracking list. + void remove(size_t index); + + // Returns all tracking indexes. + std::vector getAllTrackedIndex() const; + + // Removes request index which is timed out and returns their indexes. + std::vector removeTimeoutEntry(); + + // Returns the number of tracking list. + size_t count() const + { + return _trackedRequests.size(); + } + + // Returns the number of additional index this tracker can track. + size_t avail() const; +}; + +} // namespace aria2 + +#endif // _UT_METADATA_REQUEST_TRACKER_H_ -- cgit