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> 2010-03-30 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added --bt-tracker-connect-timeout and --bt-tracker-timeout 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 .sp .5v
.RE .RE
.PP .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] \fB\-\-enable\-dht\fR[=\fItrue\fR|\fIfalse\fR]
.RS 4 .RS 4
Enable DHT functionality\&. If a private flag is set in a torrent, aria2 doesn\(cqt use DHT for that download even if 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>
<div class="dlist"><dl> <div class="dlist"><dl>
<dt class="hdlist1"> <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>] <strong>--enable-dht</strong>[=<em>true</em>|<em>false</em>]
</dt> </dt>
<dd> <dd>
@ -4076,7 +4084,7 @@ files in the program, then also delete it here.</p></div>
<div id="footnotes"><hr /></div> <div id="footnotes"><hr /></div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2010-03-30 23:12:40 JST Last updated 2010-03-30 23:43:40 JST
</div> </div>
</div> </div>
</body> </body>

View File

@ -527,6 +527,10 @@ BitTorrent Specific Options
[NOTE] [NOTE]
Make sure that the specified ports are open for incoming UDP traffic. 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*[='true'|'false']::
Enable DHT functionality. If a private flag is set in a torrent, aria2 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. doesn't use DHT for that download even if 'true' is given.

View File

@ -45,6 +45,7 @@
#define DHT_TOKEN_LENGTH 4 #define DHT_TOKEN_LENGTH 4
// See --dht-message-timeout option.
#define DHT_MESSAGE_TIMEOUT 10 #define DHT_MESSAGE_TIMEOUT 10
#define DHT_NODE_CONTACT_INTERVAL (15*60) #define DHT_NODE_CONTACT_INTERVAL (15*60)

View File

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

View File

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

View File

@ -63,11 +63,6 @@ void DHTMessageTracker::addMessage(const SharedHandle<DHTMessage>& message, time
_entries.push_back(e); _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> > std::pair<SharedHandle<DHTMessage>, SharedHandle<DHTMessageCallback> >
DHTMessageTracker::messageArrived(const BDE& dict, DHTMessageTracker::messageArrived(const BDE& dict,
const std::string& ipaddr, uint16_t port) const std::string& ipaddr, uint16_t port)

View File

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

View File

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

View File

@ -141,10 +141,13 @@ void DHTSetup::setup(std::vector<Command*>& commands, DownloadEngine* e)
SharedHandle<DHTTokenTracker> tokenTracker(new DHTTokenTracker()); SharedHandle<DHTTokenTracker> tokenTracker(new DHTTokenTracker());
const time_t messageTimeout = e->option->getAsInt(PREF_DHT_MESSAGE_TIMEOUT);
// wiring up // wiring up
tracker->setRoutingTable(routingTable); tracker->setRoutingTable(routingTable);
tracker->setMessageFactory(factory); tracker->setMessageFactory(factory);
dispatcher->setTimeout(messageTimeout);
receiver->setConnection(connection); receiver->setConnection(connection);
receiver->setMessageFactory(factory); receiver->setMessageFactory(factory);
receiver->setRoutingTable(routingTable); receiver->setRoutingTable(routingTable);
@ -154,6 +157,7 @@ void DHTSetup::setup(std::vector<Command*>& commands, DownloadEngine* e)
taskFactory->setMessageDispatcher(dispatcher); taskFactory->setMessageDispatcher(dispatcher);
taskFactory->setMessageFactory(factory); taskFactory->setMessageFactory(factory);
taskFactory->setTaskQueue(taskQueue); taskFactory->setTaskQueue(taskQueue);
taskFactory->setTimeout(messageTimeout);
routingTable->setTaskQueue(taskQueue); routingTable->setTaskQueue(taskQueue);
routingTable->setTaskFactory(taskFactory); routingTable->setTaskFactory(taskFactory);

View File

@ -53,7 +53,9 @@
namespace aria2 { namespace aria2 {
DHTTaskFactoryImpl::DHTTaskFactoryImpl():_logger(LogFactory::getInstance()) {} DHTTaskFactoryImpl::DHTTaskFactoryImpl():
_timeout(DHT_MESSAGE_TIMEOUT),
_logger(LogFactory::getInstance()) {}
DHTTaskFactoryImpl::~DHTTaskFactoryImpl() {} DHTTaskFactoryImpl::~DHTTaskFactoryImpl() {}
@ -62,6 +64,7 @@ DHTTaskFactoryImpl::createPingTask(const SharedHandle<DHTNode>& remoteNode,
size_t numRetry) size_t numRetry)
{ {
SharedHandle<DHTPingTask> task(new DHTPingTask(remoteNode, numRetry)); SharedHandle<DHTPingTask> task(new DHTPingTask(remoteNode, numRetry));
task->setTimeout(_timeout);
setCommonProperty(task); setCommonProperty(task);
return task; return task;
} }
@ -108,6 +111,7 @@ DHTTaskFactoryImpl::createReplaceNodeTask(const SharedHandle<DHTBucket>& bucket,
const SharedHandle<DHTNode>& newNode) const SharedHandle<DHTNode>& newNode)
{ {
SharedHandle<DHTReplaceNodeTask> task(new DHTReplaceNodeTask(bucket, newNode)); SharedHandle<DHTReplaceNodeTask> task(new DHTReplaceNodeTask(bucket, newNode));
task->setTimeout(_timeout);
setCommonProperty(task); setCommonProperty(task);
return task; return task;
} }

View File

@ -36,6 +36,7 @@
#define _D_DHT_TASK_FACTORY_IMPL_H_ #define _D_DHT_TASK_FACTORY_IMPL_H_
#include "DHTTaskFactory.h" #include "DHTTaskFactory.h"
#include "a2time.h"
namespace aria2 { namespace aria2 {
@ -59,6 +60,8 @@ private:
WeakHandle<DHTTaskQueue> _taskQueue; WeakHandle<DHTTaskQueue> _taskQueue;
time_t _timeout;
Logger* _logger; Logger* _logger;
void setCommonProperty(const SharedHandle<DHTAbstractTask>& task); void setCommonProperty(const SharedHandle<DHTAbstractTask>& task);
@ -98,6 +101,10 @@ public:
void setLocalNode(const SharedHandle<DHTNode>& localNode); void setLocalNode(const SharedHandle<DHTNode>& localNode);
void setTimeout(time_t timeout)
{
_timeout = timeout;
}
}; };
} // namespace aria2 } // namespace aria2

View File

@ -1254,6 +1254,15 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
op->addTag(TAG_BITTORRENT); op->addTag(TAG_BITTORRENT);
handlers.push_back(op); 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 SharedHandle<OptionHandler> op(new BooleanOptionHandler
(PREF_ENABLE_DHT, (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"); const std::string PREF_BT_TRACKER_TIMEOUT("bt-tracker-timeout");
// values: 1*digit // values: 1*digit
const std::string PREF_BT_TRACKER_CONNECT_TIMEOUT("bt-tracker-connect-timeout"); 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 * 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; extern const std::string PREF_BT_TRACKER_TIMEOUT;
// values: 1*digit // values: 1*digit
extern const std::string PREF_BT_TRACKER_CONNECT_TIMEOUT; extern const std::string PREF_BT_TRACKER_CONNECT_TIMEOUT;
// values: 1*digit
extern const std::string PREF_DHT_MESSAGE_TIMEOUT;
/** /**
* Metalink related preferences * Metalink related preferences

View File

@ -665,3 +665,5 @@
" connection is established, this option makes no\n" \ " connection is established, this option makes no\n" \
" effect and --bt-tracker-timeout option is used\n" \ " effect and --bt-tracker-timeout option is used\n" \
" instead.") " 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; DHTMessageTracker tracker;
tracker.setRoutingTable(routingTable); tracker.setRoutingTable(routingTable);
tracker.setMessageFactory(factory); tracker.setMessageFactory(factory);
tracker.addMessage(m1); tracker.addMessage(m1, DHT_MESSAGE_TIMEOUT);
tracker.addMessage(m2, c2); tracker.addMessage(m2, DHT_MESSAGE_TIMEOUT, c2);
tracker.addMessage(m3); tracker.addMessage(m3, DHT_MESSAGE_TIMEOUT);
{ {
BDE resDict = BDE::dict(); BDE resDict = BDE::dict();