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
pull/1/head
Tatsuhiro Tsujikawa 2010-03-30 14:46:26 +00:00
parent 68156ef258
commit e7e214fef2
18 changed files with 89 additions and 16 deletions

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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.

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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;
}

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -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

View File

@ -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.")

View File

@ -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();