summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-03-30 14:46:26 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-03-30 14:46:26 +0000
commite7e214fef2c9f1a7f39a3157e2595cc7da7db608 (patch)
treeaad51976c6d503fe93373e09b9de4efa9fd3b5c9 /src
parent68156ef258079c50965b86483ea7b119a82c93ad (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/DHTConstants.h1
-rw-r--r--src/DHTMessageDispatcherImpl.cc6
-rw-r--r--src/DHTMessageDispatcherImpl.h7
-rw-r--r--src/DHTMessageTracker.cc5
-rw-r--r--src/DHTMessageTracker.h4
-rw-r--r--src/DHTReplaceNodeTask.h5
-rw-r--r--src/DHTSetup.cc4
-rw-r--r--src/DHTTaskFactoryImpl.cc6
-rw-r--r--src/DHTTaskFactoryImpl.h7
-rw-r--r--src/OptionHandlerFactory.cc9
-rw-r--r--src/prefs.cc2
-rw-r--r--src/prefs.h2
-rw-r--r--src/usage_text.h2
13 files changed, 48 insertions, 12 deletions
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<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
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<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
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<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)
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<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);
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<DHTMessage>& message);
virtual void onTimeout(const SharedHandle<DHTNode>& 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<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);
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<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;
}
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<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
diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc
index 84c289f1..bc7dc63a 100644
--- a/src/OptionHandlerFactory.cc
+++ b/src/OptionHandlerFactory.cc
@@ -1255,6 +1255,15 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
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,
TEXT_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.")