From e7e214fef2c9f1a7f39a3157e2595cc7da7db608 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Tue, 30 Mar 2010 14:46:26 +0000 Subject: [PATCH] 2010-03-30 Tatsuhiro Tsujikawa Added --dht-message-timeout option. * doc/aria2c.1.txt * src/DHTConstants.h * src/DHTMessageDispatcherImpl.cc * src/DHTMessageDispatcherImpl.h * src/DHTMessageTracker.cc * src/DHTMessageTracker.h * src/DHTReplaceNodeTask.h * src/DHTSetup.cc * src/DHTTaskFactoryImpl.cc * src/DHTTaskFactoryImpl.h * src/OptionHandlerFactory.cc * src/prefs.cc * src/prefs.h * src/usage_text.h * test/DHTMessageTrackerTest.cc --- ChangeLog | 19 +++++++++++++++++++ doc/aria2c.1 | 6 ++++++ doc/aria2c.1.html | 10 +++++++++- doc/aria2c.1.txt | 4 ++++ src/DHTConstants.h | 1 + src/DHTMessageDispatcherImpl.cc | 6 ++++-- src/DHTMessageDispatcherImpl.h | 7 +++++++ src/DHTMessageTracker.cc | 5 ----- src/DHTMessageTracker.h | 4 ---- src/DHTReplaceNodeTask.h | 5 +++++ src/DHTSetup.cc | 4 ++++ src/DHTTaskFactoryImpl.cc | 6 +++++- src/DHTTaskFactoryImpl.h | 7 +++++++ src/OptionHandlerFactory.cc | 9 +++++++++ src/prefs.cc | 2 ++ src/prefs.h | 2 ++ src/usage_text.h | 2 ++ test/DHTMessageTrackerTest.cc | 6 +++--- 18 files changed, 89 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4b924077..6a70b148 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2010-03-30 Tatsuhiro Tsujikawa + + Added --dht-message-timeout option. + * doc/aria2c.1.txt + * src/DHTConstants.h + * src/DHTMessageDispatcherImpl.cc + * src/DHTMessageDispatcherImpl.h + * src/DHTMessageTracker.cc + * src/DHTMessageTracker.h + * src/DHTReplaceNodeTask.h + * src/DHTSetup.cc + * src/DHTTaskFactoryImpl.cc + * src/DHTTaskFactoryImpl.h + * src/OptionHandlerFactory.cc + * src/prefs.cc + * src/prefs.h + * src/usage_text.h + * test/DHTMessageTrackerTest.cc + 2010-03-30 Tatsuhiro Tsujikawa Added --bt-tracker-connect-timeout and --bt-tracker-timeout diff --git a/doc/aria2c.1 b/doc/aria2c.1 index 259680be..780476a0 100644 --- a/doc/aria2c.1 +++ b/doc/aria2c.1 @@ -752,6 +752,12 @@ Make sure that the specified ports are open for incoming UDP traffic\&. .sp .5v .RE .PP +\fB\-\-dht\-message\-timeout\fR=SEC +.RS 4 +Set timeout in seconds\&. Default: +\fI10\fR +.RE +.PP \fB\-\-enable\-dht\fR[=\fItrue\fR|\fIfalse\fR] .RS 4 Enable DHT functionality\&. If a private flag is set in a torrent, aria2 doesn\(cqt use DHT for that download even if diff --git a/doc/aria2c.1.html b/doc/aria2c.1.html index 37ab5da3..29c36751 100644 --- a/doc/aria2c.1.html +++ b/doc/aria2c.1.html @@ -1503,6 +1503,14 @@ writes the piece to the appropriate files.
+--dht-message-timeout=SEC +
+
+

+ Set timeout in seconds. Default: 10 +

+
+
--enable-dht[=true|false]
@@ -4076,7 +4084,7 @@ files in the program, then also delete it here.


diff --git a/doc/aria2c.1.txt b/doc/aria2c.1.txt index 34e572b3..2e2c3b1e 100644 --- a/doc/aria2c.1.txt +++ b/doc/aria2c.1.txt @@ -527,6 +527,10 @@ BitTorrent Specific Options [NOTE] Make sure that the specified ports are open for incoming UDP traffic. +*--dht-message-timeout*=SEC:: + + Set timeout in seconds. Default: '10' + *--enable-dht*[='true'|'false']:: Enable DHT functionality. If a private flag is set in a torrent, aria2 doesn't use DHT for that download even if 'true' is given. diff --git a/src/DHTConstants.h b/src/DHTConstants.h index 2fbc1106..09e9e5ae 100644 --- a/src/DHTConstants.h +++ b/src/DHTConstants.h @@ -45,6 +45,7 @@ #define DHT_TOKEN_LENGTH 4 +// See --dht-message-timeout option. #define DHT_MESSAGE_TIMEOUT 10 #define DHT_NODE_CONTACT_INTERVAL (15*60) diff --git a/src/DHTMessageDispatcherImpl.cc b/src/DHTMessageDispatcherImpl.cc index 31fe2182..bb507c52 100644 --- a/src/DHTMessageDispatcherImpl.cc +++ b/src/DHTMessageDispatcherImpl.cc @@ -46,8 +46,10 @@ namespace aria2 { -DHTMessageDispatcherImpl::DHTMessageDispatcherImpl(const SharedHandle& tracker): +DHTMessageDispatcherImpl::DHTMessageDispatcherImpl +(const SharedHandle& tracker): _tracker(tracker), + _timeout(DHT_MESSAGE_TIMEOUT), _logger(LogFactory::getInstance()) {} DHTMessageDispatcherImpl::~DHTMessageDispatcherImpl() {} @@ -65,7 +67,7 @@ void DHTMessageDispatcherImpl::addMessageToQueue(const SharedHandle& message, const SharedHandle& callback) { - addMessageToQueue(message, DHT_MESSAGE_TIMEOUT, callback); + addMessageToQueue(message, _timeout, callback); } bool diff --git a/src/DHTMessageDispatcherImpl.h b/src/DHTMessageDispatcherImpl.h index 88640a52..ea48904b 100644 --- a/src/DHTMessageDispatcherImpl.h +++ b/src/DHTMessageDispatcherImpl.h @@ -50,6 +50,8 @@ private: std::deque > _messageQueue; + time_t _timeout; + Logger* _logger; bool sendMessage(const SharedHandle& msg); @@ -72,6 +74,11 @@ public: virtual void sendMessages(); virtual size_t countMessageInQueue() const; + + void setTimeout(time_t timeout) + { + _timeout = timeout; + } }; } // namespace aria2 diff --git a/src/DHTMessageTracker.cc b/src/DHTMessageTracker.cc index 970ddf0e..60f9feff 100644 --- a/src/DHTMessageTracker.cc +++ b/src/DHTMessageTracker.cc @@ -63,11 +63,6 @@ void DHTMessageTracker::addMessage(const SharedHandle& message, time _entries.push_back(e); } -void DHTMessageTracker::addMessage(const SharedHandle& message, const SharedHandle& callback) -{ - addMessage(message, DHT_MESSAGE_TIMEOUT, callback); -} - std::pair, SharedHandle > DHTMessageTracker::messageArrived(const BDE& dict, const std::string& ipaddr, uint16_t port) diff --git a/src/DHTMessageTracker.h b/src/DHTMessageTracker.h index 0a174b38..86d70fe7 100644 --- a/src/DHTMessageTracker.h +++ b/src/DHTMessageTracker.h @@ -72,10 +72,6 @@ public: const SharedHandle& callback = SharedHandle()); - void addMessage(const SharedHandle& message, - const SharedHandle& callback = - SharedHandle()); - std::pair, SharedHandle > messageArrived(const BDE& dict, const std::string& ipaddr, uint16_t port); diff --git a/src/DHTReplaceNodeTask.h b/src/DHTReplaceNodeTask.h index d6a699a1..f9a3a0ae 100644 --- a/src/DHTReplaceNodeTask.h +++ b/src/DHTReplaceNodeTask.h @@ -67,6 +67,11 @@ public: virtual void onReceived(const SharedHandle& message); virtual void onTimeout(const SharedHandle& node); + + void setTimeout(time_t timeout) + { + _timeout = timeout; + } }; } // namespace aria2 diff --git a/src/DHTSetup.cc b/src/DHTSetup.cc index e8448e85..f5df82c2 100644 --- a/src/DHTSetup.cc +++ b/src/DHTSetup.cc @@ -141,10 +141,13 @@ void DHTSetup::setup(std::vector& commands, DownloadEngine* e) SharedHandle tokenTracker(new DHTTokenTracker()); + const time_t messageTimeout = e->option->getAsInt(PREF_DHT_MESSAGE_TIMEOUT); // wiring up tracker->setRoutingTable(routingTable); tracker->setMessageFactory(factory); + dispatcher->setTimeout(messageTimeout); + receiver->setConnection(connection); receiver->setMessageFactory(factory); receiver->setRoutingTable(routingTable); @@ -154,6 +157,7 @@ void DHTSetup::setup(std::vector& commands, DownloadEngine* e) taskFactory->setMessageDispatcher(dispatcher); taskFactory->setMessageFactory(factory); taskFactory->setTaskQueue(taskQueue); + taskFactory->setTimeout(messageTimeout); routingTable->setTaskQueue(taskQueue); routingTable->setTaskFactory(taskFactory); diff --git a/src/DHTTaskFactoryImpl.cc b/src/DHTTaskFactoryImpl.cc index ee5ade9a..77fb9514 100644 --- a/src/DHTTaskFactoryImpl.cc +++ b/src/DHTTaskFactoryImpl.cc @@ -53,7 +53,9 @@ namespace aria2 { -DHTTaskFactoryImpl::DHTTaskFactoryImpl():_logger(LogFactory::getInstance()) {} +DHTTaskFactoryImpl::DHTTaskFactoryImpl(): + _timeout(DHT_MESSAGE_TIMEOUT), + _logger(LogFactory::getInstance()) {} DHTTaskFactoryImpl::~DHTTaskFactoryImpl() {} @@ -62,6 +64,7 @@ DHTTaskFactoryImpl::createPingTask(const SharedHandle& remoteNode, size_t numRetry) { SharedHandle task(new DHTPingTask(remoteNode, numRetry)); + task->setTimeout(_timeout); setCommonProperty(task); return task; } @@ -108,6 +111,7 @@ DHTTaskFactoryImpl::createReplaceNodeTask(const SharedHandle& bucket, const SharedHandle& newNode) { SharedHandle task(new DHTReplaceNodeTask(bucket, newNode)); + task->setTimeout(_timeout); setCommonProperty(task); return task; } diff --git a/src/DHTTaskFactoryImpl.h b/src/DHTTaskFactoryImpl.h index 52f94b3f..c0076a75 100644 --- a/src/DHTTaskFactoryImpl.h +++ b/src/DHTTaskFactoryImpl.h @@ -36,6 +36,7 @@ #define _D_DHT_TASK_FACTORY_IMPL_H_ #include "DHTTaskFactory.h" +#include "a2time.h" namespace aria2 { @@ -59,6 +60,8 @@ private: WeakHandle _taskQueue; + time_t _timeout; + Logger* _logger; void setCommonProperty(const SharedHandle& task); @@ -98,6 +101,10 @@ public: void setLocalNode(const SharedHandle& localNode); + void setTimeout(time_t timeout) + { + _timeout = timeout; + } }; } // namespace aria2 diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc index 84c289f1..bc7dc63a 100644 --- a/src/OptionHandlerFactory.cc +++ b/src/OptionHandlerFactory.cc @@ -1254,6 +1254,15 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() op->addTag(TAG_BITTORRENT); handlers.push_back(op); } + { + SharedHandle op(new NumberOptionHandler + (PREF_DHT_MESSAGE_TIMEOUT, + TEXT_DHT_MESSAGE_TIMEOUT, + "10", + 1, 60)); + op->addTag(TAG_BITTORRENT); + handlers.push_back(op); + } { SharedHandle op(new BooleanOptionHandler (PREF_ENABLE_DHT, diff --git a/src/prefs.cc b/src/prefs.cc index 37406885..3f80f62b 100644 --- a/src/prefs.cc +++ b/src/prefs.cc @@ -338,6 +338,8 @@ const std::string PREF_BT_LPD_INTERFACE("bt-lpd-interface"); const std::string PREF_BT_TRACKER_TIMEOUT("bt-tracker-timeout"); // values: 1*digit const std::string PREF_BT_TRACKER_CONNECT_TIMEOUT("bt-tracker-connect-timeout"); +// values: 1*digit +const std::string PREF_DHT_MESSAGE_TIMEOUT("dht-message-timeout"); /** * Metalink related preferences diff --git a/src/prefs.h b/src/prefs.h index 99d598cf..08b09970 100644 --- a/src/prefs.h +++ b/src/prefs.h @@ -342,6 +342,8 @@ extern const std::string PREF_BT_LPD_INTERFACE; extern const std::string PREF_BT_TRACKER_TIMEOUT; // values: 1*digit extern const std::string PREF_BT_TRACKER_CONNECT_TIMEOUT; +// values: 1*digit +extern const std::string PREF_DHT_MESSAGE_TIMEOUT; /** * Metalink related preferences diff --git a/src/usage_text.h b/src/usage_text.h index 2a35d871..d4d93310 100644 --- a/src/usage_text.h +++ b/src/usage_text.h @@ -665,3 +665,5 @@ " connection is established, this option makes no\n" \ " effect and --bt-tracker-timeout option is used\n" \ " instead.") +#define TEXT_DHT_MESSAGE_TIMEOUT \ + _(" --dht-message-timeout=SEC Set timeout in seconds.") diff --git a/test/DHTMessageTrackerTest.cc b/test/DHTMessageTrackerTest.cc index c0d4fc5c..60ec2f9b 100644 --- a/test/DHTMessageTrackerTest.cc +++ b/test/DHTMessageTrackerTest.cc @@ -71,9 +71,9 @@ void DHTMessageTrackerTest::testMessageArrived() DHTMessageTracker tracker; tracker.setRoutingTable(routingTable); tracker.setMessageFactory(factory); - tracker.addMessage(m1); - tracker.addMessage(m2, c2); - tracker.addMessage(m3); + tracker.addMessage(m1, DHT_MESSAGE_TIMEOUT); + tracker.addMessage(m2, DHT_MESSAGE_TIMEOUT, c2); + tracker.addMessage(m3, DHT_MESSAGE_TIMEOUT); { BDE resDict = BDE::dict();