瀏覽代碼

2010-03-30 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	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
Tatsuhiro Tsujikawa 15 年之前
父節點
當前提交
e7e214fef2

+ 19 - 0
ChangeLog

@@ -1,3 +1,22 @@
+2010-03-30  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	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  <t-tujikawa@users.sourceforge.net>
 
 	Added --bt-tracker-connect-timeout and --bt-tracker-timeout

+ 6 - 0
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

+ 9 - 1
doc/aria2c.1.html

@@ -1503,6 +1503,14 @@ writes the piece to the appropriate files.</td>
 </div>
 <div class="dlist"><dl>
 <dt class="hdlist1">
+<strong>--dht-message-timeout</strong>=SEC
+</dt>
+<dd>
+<p>
+  Set timeout in seconds. Default: <em>10</em>
+</p>
+</dd>
+<dt class="hdlist1">
 <strong>--enable-dht</strong>[=<em>true</em>|<em>false</em>]
 </dt>
 <dd>
@@ -4076,7 +4084,7 @@ files in the program, then also delete it here.</p></div>
 <div id="footnotes"><hr /></div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2010-03-30 23:12:40 JST
+Last updated 2010-03-30 23:43:40 JST
 </div>
 </div>
 </body>

+ 4 - 0
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.

+ 1 - 0
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)

+ 4 - 2
src/DHTMessageDispatcherImpl.cc

@@ -46,8 +46,10 @@
 
 namespace aria2 {
 
-DHTMessageDispatcherImpl::DHTMessageDispatcherImpl(const SharedHandle<DHTMessageTracker>& tracker):
+DHTMessageDispatcherImpl::DHTMessageDispatcherImpl
+(const SharedHandle<DHTMessageTracker>& tracker):
   _tracker(tracker),
+  _timeout(DHT_MESSAGE_TIMEOUT),
   _logger(LogFactory::getInstance()) {}
 
 DHTMessageDispatcherImpl::~DHTMessageDispatcherImpl() {}
@@ -65,7 +67,7 @@ void
 DHTMessageDispatcherImpl::addMessageToQueue(const SharedHandle<DHTMessage>& message,
                                             const SharedHandle<DHTMessageCallback>& callback)
 {
-  addMessageToQueue(message, DHT_MESSAGE_TIMEOUT, callback);
+  addMessageToQueue(message, _timeout, callback);
 }
 
 bool

+ 7 - 0
src/DHTMessageDispatcherImpl.h

@@ -50,6 +50,8 @@ private:
 
   std::deque<SharedHandle<DHTMessageEntry> > _messageQueue;
 
+  time_t _timeout;
+
   Logger* _logger;
 
   bool sendMessage(const SharedHandle<DHTMessageEntry>& msg);
@@ -72,6 +74,11 @@ public:
   virtual void sendMessages();
 
   virtual size_t countMessageInQueue() const;
+
+  void setTimeout(time_t timeout)
+  {
+    _timeout = timeout;
+  }
 };
 
 } // namespace aria2

+ 0 - 5
src/DHTMessageTracker.cc

@@ -63,11 +63,6 @@ void DHTMessageTracker::addMessage(const SharedHandle<DHTMessage>& message, time
   _entries.push_back(e);
 }
 
-void DHTMessageTracker::addMessage(const SharedHandle<DHTMessage>& message, const SharedHandle<DHTMessageCallback>& callback)
-{
-  addMessage(message, DHT_MESSAGE_TIMEOUT, callback);
-}
-
 std::pair<SharedHandle<DHTMessage>, SharedHandle<DHTMessageCallback> >
 DHTMessageTracker::messageArrived(const BDE& dict,
                                   const std::string& ipaddr, uint16_t port)

+ 0 - 4
src/DHTMessageTracker.h

@@ -72,10 +72,6 @@ public:
                   const SharedHandle<DHTMessageCallback>& callback =
                   SharedHandle<DHTMessageCallback>());
 
-  void addMessage(const SharedHandle<DHTMessage>& message,
-                  const SharedHandle<DHTMessageCallback>& callback =
-                  SharedHandle<DHTMessageCallback>());
-
   std::pair<SharedHandle<DHTMessage>, SharedHandle<DHTMessageCallback> >
   messageArrived(const BDE& dict,
                  const std::string& ipaddr, uint16_t port);

+ 5 - 0
src/DHTReplaceNodeTask.h

@@ -67,6 +67,11 @@ public:
   virtual void onReceived(const SharedHandle<DHTMessage>& message);
 
   virtual void onTimeout(const SharedHandle<DHTNode>& node);  
+
+  void setTimeout(time_t timeout)
+  {
+    _timeout = timeout;
+  }
 };
 
 } // namespace aria2

+ 4 - 0
src/DHTSetup.cc

@@ -141,10 +141,13 @@ void DHTSetup::setup(std::vector<Command*>& commands, DownloadEngine* e)
 
     SharedHandle<DHTTokenTracker> 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<Command*>& commands, DownloadEngine* e)
     taskFactory->setMessageDispatcher(dispatcher);
     taskFactory->setMessageFactory(factory);
     taskFactory->setTaskQueue(taskQueue);
+    taskFactory->setTimeout(messageTimeout);
 
     routingTable->setTaskQueue(taskQueue);
     routingTable->setTaskFactory(taskFactory);

+ 5 - 1
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<DHTNode>& remoteNode,
                                    size_t numRetry)
 {
   SharedHandle<DHTPingTask> task(new DHTPingTask(remoteNode, numRetry));
+  task->setTimeout(_timeout);
   setCommonProperty(task);
   return task;
 }
@@ -108,6 +111,7 @@ DHTTaskFactoryImpl::createReplaceNodeTask(const SharedHandle<DHTBucket>& bucket,
                                           const SharedHandle<DHTNode>& newNode)
 {
   SharedHandle<DHTReplaceNodeTask> task(new DHTReplaceNodeTask(bucket, newNode));
+  task->setTimeout(_timeout);
   setCommonProperty(task);
   return task;
 }

+ 7 - 0
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<DHTTaskQueue> _taskQueue;
 
+  time_t _timeout;
+
   Logger* _logger;
 
   void setCommonProperty(const SharedHandle<DHTAbstractTask>& task);
@@ -98,6 +101,10 @@ public:
 
   void setLocalNode(const SharedHandle<DHTNode>& localNode);
 
+  void setTimeout(time_t timeout)
+  {
+    _timeout = timeout;
+  }
 };
 
 } // namespace aria2

+ 9 - 0
src/OptionHandlerFactory.cc

@@ -1254,6 +1254,15 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
     op->addTag(TAG_BITTORRENT);
     handlers.push_back(op);
   }
+  {
+    SharedHandle<OptionHandler> op(new NumberOptionHandler
+                                   (PREF_DHT_MESSAGE_TIMEOUT,
+                                    TEXT_DHT_MESSAGE_TIMEOUT,
+                                    "10",
+                                    1, 60));
+    op->addTag(TAG_BITTORRENT);
+    handlers.push_back(op);
+  }
   {
     SharedHandle<OptionHandler> op(new BooleanOptionHandler
                                    (PREF_ENABLE_DHT,

+ 2 - 0
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

+ 2 - 0
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

+ 2 - 0
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.")

+ 3 - 3
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();