2008-12-10 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Added --max-overall-upload-limit option. This option limits the
	overall upload speed.  Stated in help message that the existing
	--max-upload-limit option limits the upload speed per each
	torrent.  Man page is also updated.
	* doc/aria2c.1.txt
	* src/DefaultBtMessageDispatcher.cc
	* src/DefaultBtMessageDispatcher.h
	* src/OptionHandlerFactory.cc
	* src/PeerInteractionCommand.cc
	* src/option_processing.cc
	* src/prefs.cc
	* src/prefs.h
	* src/usage_text.h
pull/1/head
Tatsuhiro Tsujikawa 2008-12-10 14:14:11 +00:00
parent 8129042a3a
commit 8c1894720f
12 changed files with 143 additions and 22 deletions

View File

@ -1,3 +1,19 @@
2008-12-10 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added --max-overall-upload-limit option. This option limits the
overall upload speed. Stated in help message that the existing
--max-upload-limit option limits the upload speed per each
torrent. Man page is also updated.
* doc/aria2c.1.txt
* src/DefaultBtMessageDispatcher.cc
* src/DefaultBtMessageDispatcher.h
* src/OptionHandlerFactory.cc
* src/PeerInteractionCommand.cc
* src/option_processing.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
2008-12-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Use BDE instead of Dictionary/List/Data classes.

View File

@ -1,11 +1,11 @@
.\" Title: aria2c
.\" Author:
.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
.\" Date: 12/04/2008
.\" Date: 12/10/2008
.\" Manual:
.\" Source:
.\"
.TH "ARIA2C" "1" "12/04/2008" "" ""
.TH "ARIA2C" "1" "12/10/2008" "" ""
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
@ -507,14 +507,31 @@ Set TCP port number for BitTorrent downloads\&. Multiple ports can be specified
Note
Make sure that the specified ports are open for incoming TCP traffic\&.
.PP
\fB\-u\fR, \fB\-\-max\-upload\-limit\fR=SPEED
\fB\-\-max\-overall\-upload\-limit\fR=SPEED
.RS 4
Set max upload speed in bytes per sec\&.
Set max overall upload speed in bytes/sec\&.
\fI0\fR
means unrestricted\&. You can append
\fIK\fR
or
\fIM\fR(1K = 1024, 1M = 1024K)\&. Default:
\fIM\fR(1K = 1024, 1M = 1024K)\&. To limit the upload speed per torrent, use
\fB\-\-max\-upload\-limit\fR
option\&. If non\-zero value is specified,
\fB\-\-max\-upload\-limit\fR
option is ignored\&. Default:
\fI0\fR
.RE
.PP
\fB\-u\fR, \fB\-\-max\-upload\-limit\fR=SPEED
.RS 4
Set max upload speed per each torrent in bytes/sec\&.
\fI0\fR
means unrestricted\&. You can append
\fIK\fR
or
\fIM\fR(1K = 1024, 1M = 1024K)\&. To limit the overall upload speed, use
\fB\-\-max\-overall\-upload\-limit\fR
option\&. Default:
\fI0\fR
.RE
.PP

View File

@ -1064,12 +1064,27 @@ writes the piece to the appropriate files.</td>
</div>
<div class="vlist"><dl>
<dt>
<strong>--max-overall-upload-limit</strong>=SPEED
</dt>
<dd>
<p>
Set max overall upload speed in bytes/sec.
<em>0</em> means unrestricted.
You can append <em>K</em> or <em>M</em>(1K = 1024, 1M = 1024K).
To limit the upload speed per torrent, use <strong>--max-upload-limit</strong> option.
If non-zero value is specified, <strong>--max-upload-limit</strong> option is ignored.
Default: <em>0</em>
</p>
</dd>
<dt>
<strong>-u</strong>, <strong>--max-upload-limit</strong>=SPEED
</dt>
<dd>
<p>
Set max upload speed in bytes per sec. <em>0</em> means unrestricted.
Set max upload speed per each torrent in bytes/sec.
<em>0</em> means unrestricted.
You can append <em>K</em> or <em>M</em>(1K = 1024, 1M = 1024K).
To limit the overall upload speed, use <strong>--max-overall-upload-limit</strong> option.
Default: <em>0</em>
</p>
</dd>
@ -2031,7 +2046,7 @@ files in the program, then also delete it here.</p></div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2008-12-04 01:08:46 JST
Last updated 2008-12-10 23:03:25 JST
</div>
</div>
</body>

View File

@ -366,9 +366,19 @@ BitTorrent Specific Options
[NOTE]
Make sure that the specified ports are open for incoming TCP traffic.
*-u*, *--max-upload-limit*=SPEED::
Set max upload speed in bytes per sec. '0' means unrestricted.
*--max-overall-upload-limit*=SPEED::
Set max overall upload speed in bytes/sec.
'0' means unrestricted.
You can append 'K' or 'M'(1K = 1024, 1M = 1024K).
To limit the upload speed per torrent, use *--max-upload-limit* option.
If non-zero value is specified, *--max-upload-limit* option is ignored.
Default: '0'
*-u*, *--max-upload-limit*=SPEED::
Set max upload speed per each torrent in bytes/sec.
'0' means unrestricted.
You can append 'K' or 'M'(1K = 1024, 1M = 1024K).
To limit the overall upload speed, use *--max-overall-upload-limit* option.
Default: '0'
*--peer-id-prefix*=PEERI_ID_PREFIX::

View File

@ -52,12 +52,14 @@
#include "LogFactory.h"
#include "Logger.h"
#include "a2functional.h"
#include "RequestGroupMan.h"
namespace aria2 {
DefaultBtMessageDispatcher::DefaultBtMessageDispatcher():
cuid(0),
maxUploadSpeedLimit(0),
_maxOverallSpeedLimit(0),
_maxUploadSpeedLimit(0),
requestTimeout(0),
logger(LogFactory::getInstance()) {}
@ -79,16 +81,22 @@ void DefaultBtMessageDispatcher::addMessageToQueue(const BtMessages& btMessages)
}
}
void DefaultBtMessageDispatcher::sendMessages() {
BtMessages tempQueue;
while(!messageQueue.empty()) {
BtMessageHandle msg = messageQueue.front();
messageQueue.pop_front();
if(maxUploadSpeedLimit > 0 &&
msg->isUploading() && !msg->isSendingInProgress()) {
TransferStat stat = _peerStorage->calculateStat();
if(maxUploadSpeedLimit < stat.getUploadSpeed()) {
if(msg->isUploading() && !msg->isSendingInProgress()) {
if(// See whether upload speed is exceeding overall limit.
(_maxOverallSpeedLimit > 0 &&
_maxOverallSpeedLimit <
_requestGroupMan->calculateStat().getUploadSpeed()) ||
// See whether uplaod speed is exceeding upload limit for each torrent.
// _maxUploadLimit is ignored when _maxOverallSpeedLimit is specified.
(_maxOverallSpeedLimit == 0 &&
_maxUploadSpeedLimit > 0 &&
_maxUploadSpeedLimit <
_peerStorage->calculateStat().getUploadSpeed())) {
tempQueue.push_back(msg);
continue;
}
@ -457,4 +465,23 @@ void DefaultBtMessageDispatcher::setBtMessageFactory(const WeakHandle<BtMessageF
this->messageFactory = factory;
}
void DefaultBtMessageDispatcher::setRequestGroupMan
(const WeakHandle<RequestGroupMan>& rgman)
{
_requestGroupMan = rgman;
}
void DefaultBtMessageDispatcher::setMaxUploadSpeedLimit
(unsigned int maxUploadSpeedLimit)
{
_maxUploadSpeedLimit = maxUploadSpeedLimit;
}
void DefaultBtMessageDispatcher::setMaxOverallSpeedLimit
(unsigned int maxOverallSpeedLimit)
{
_maxOverallSpeedLimit = maxOverallSpeedLimit;
}
} // namespace aria2

View File

@ -48,6 +48,7 @@ class BtMessageFactory;
class Peer;
class Piece;
class Logger;
class RequestGroupMan;
class DefaultBtMessageDispatcher : public BtMessageDispatcher {
private:
@ -59,7 +60,9 @@ private:
SharedHandle<PieceStorage> _pieceStorage;
WeakHandle<BtMessageFactory> messageFactory;
SharedHandle<Peer> peer;
unsigned int maxUploadSpeedLimit;
WeakHandle<RequestGroupMan> _requestGroupMan;
unsigned int _maxOverallSpeedLimit;
unsigned int _maxUploadSpeedLimit;
time_t requestTimeout;
Logger* logger;
public:
@ -117,13 +120,15 @@ public:
void setBtMessageFactory(const WeakHandle<BtMessageFactory>& factory);
void setRequestGroupMan(const WeakHandle<RequestGroupMan>& rgman);
void setCuid(int32_t cuid) {
this->cuid = cuid;
}
void setMaxUploadSpeedLimit(unsigned int maxUploadSpeedLimit) {
this->maxUploadSpeedLimit = maxUploadSpeedLimit;
}
void setMaxUploadSpeedLimit(unsigned int maxUploadSpeedLimit);
void setMaxOverallSpeedLimit(unsigned int maxOverallSpeedLimit);
void setRequestTimeout(time_t requestTimeout) {
this->requestTimeout = requestTimeout;

View File

@ -824,6 +824,16 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
op->addTag(TAG_BITTORRENT);
handlers.push_back(op);
}
{
SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
(PREF_MAX_OVERALL_UPLOAD_LIMIT,
TEXT_MAX_OVERALL_UPLOAD_LIMIT,
"0",
0));
op->addTag(TAG_BASIC);
op->addTag(TAG_BITTORRENT);
handlers.push_back(op);
}
{
SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
(PREF_MAX_UPLOAD_LIMIT,

View File

@ -68,6 +68,7 @@
#include "BtAnnounce.h"
#include "BtProgressInfoFile.h"
#include "DefaultExtensionMessageFactory.h"
#include "RequestGroupMan.h"
namespace aria2 {
@ -133,8 +134,11 @@ PeerInteractionCommand::PeerInteractionCommand
dispatcher->setPeerStorage(peerStorage);
dispatcher->setMaxUploadSpeedLimit
(e->option->getAsInt(PREF_MAX_UPLOAD_LIMIT));
dispatcher->setMaxOverallSpeedLimit
(e->option->getAsInt(PREF_MAX_OVERALL_UPLOAD_LIMIT));
dispatcher->setRequestTimeout(e->option->getAsInt(PREF_BT_REQUEST_TIMEOUT));
dispatcher->setBtMessageFactory(factory);
dispatcher->setRequestGroupMan(e->_requestGroupMan);
DefaultBtMessageReceiverHandle receiver(new DefaultBtMessageReceiver());
receiver->setCuid(cuid);

View File

@ -214,6 +214,7 @@ Option* option_processing(int argc, char* const argv[])
{ PREF_BT_MAX_OPEN_FILES.c_str(), required_argument, &lopt, 33 },
{ PREF_BT_SEED_UNVERIFIED.c_str(), optional_argument, &lopt, 34 },
{ PREF_DHT_FILE_PATH.c_str(), required_argument, &lopt, 35 },
{ PREF_MAX_OVERALL_UPLOAD_LIMIT.c_str(), required_argument, &lopt, 36 },
#endif // ENABLE_BITTORRENT
#ifdef ENABLE_METALINK
{ PREF_METALINK_FILE.c_str(), required_argument, NULL, 'M' },
@ -338,6 +339,9 @@ Option* option_processing(int argc, char* const argv[])
case 35:
cmdstream << PREF_DHT_FILE_PATH << "=" << optarg << "\n";
break;
case 36:
cmdstream << PREF_MAX_OVERALL_UPLOAD_LIMIT << "=" << optarg << "\n";
break;
case 100:
cmdstream << PREF_METALINK_VERSION << "=" << optarg << "\n";
break;

View File

@ -217,6 +217,8 @@ const std::string PREF_SHOW_FILES("show-files");
// values: true | false
const std::string PREF_DIRECT_FILE_MAPPING("direct-file-mapping");
// values: 1*digit
const std::string PREF_MAX_OVERALL_UPLOAD_LIMIT("max-overall-upload-limit");
// values: 1*digit
const std::string PREF_MAX_UPLOAD_LIMIT("max-upload-limit");
// values: a string that your file system recognizes as a file name.
const std::string PREF_TORRENT_FILE("torrent-file");

View File

@ -221,6 +221,8 @@ extern const std::string PREF_SHOW_FILES;
// values: true | false
extern const std::string PREF_DIRECT_FILE_MAPPING;
// values: 1*digit
extern const std::string PREF_MAX_OVERALL_UPLOAD_LIMIT;
// values: 1*digit
extern const std::string PREF_MAX_UPLOAD_LIMIT;
// values: a string that your file system recognizes as a file name.
extern const std::string PREF_TORRENT_FILE;

View File

@ -227,10 +227,19 @@ _(" --listen-port=PORT... Set TCP port number for BitTorrent downloads.\n
" for example: \"6881,6885\". You can also use '-'\n"\
" to specify a range: \"6881-6999\". ',' and '-' can\n"\
" be used together.")
#define TEXT_MAX_UPLOAD_LIMIT \
_(" -u, --max-upload-limit=SPEED Set max upload speed in bytes per sec.\n"\
#define TEXT_MAX_OVERALL_UPLOAD_LIMIT \
_(" --max-overall-upload-limit=SPEED Set max overall upload speed in bytes/sec.\n"\
" 0 means unrestricted.\n"\
" You can append K or M(1K = 1024, 1M = 1024K).")
" You can append K or M(1K = 1024, 1M = 1024K).\n"\
" To limit the upload speed per torrent, use\n"\
" --max-upload-limit option. If non-zero value is\n"\
" specified, --max-upload-limit option is ignored.")
#define TEXT_MAX_UPLOAD_LIMIT \
_(" -u, --max-upload-limit=SPEED Set max upload speed per each torrent in\n"\
" bytes/sec. 0 means unrestricted.\n"\
" You can append K or M(1K = 1024, 1M = 1024K).\n"\
" To limit the overall upload speed, use\n"\
" --max-overall-upload-limit option.")
#define TEXT_SEED_TIME \
_(" --seed-time=MINUTES Specify seeding time in minutes. Also see the\n"\
" --seed-ratio option.")