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> 2008-12-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Use BDE instead of Dictionary/List/Data classes. Use BDE instead of Dictionary/List/Data classes.

View File

@ -1,11 +1,11 @@
.\" Title: aria2c .\" Title: aria2c
.\" Author: .\" Author:
.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/> .\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
.\" Date: 12/04/2008 .\" Date: 12/10/2008
.\" Manual: .\" Manual:
.\" Source: .\" Source:
.\" .\"
.TH "ARIA2C" "1" "12/04/2008" "" "" .TH "ARIA2C" "1" "12/10/2008" "" ""
.\" disable hyphenation .\" disable hyphenation
.nh .nh
.\" disable justification (adjust text to left margin only) .\" 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 Note
Make sure that the specified ports are open for incoming TCP traffic\&. Make sure that the specified ports are open for incoming TCP traffic\&.
.PP .PP
\fB\-u\fR, \fB\-\-max\-upload\-limit\fR=SPEED \fB\-\-max\-overall\-upload\-limit\fR=SPEED
.RS 4 .RS 4
Set max upload speed in bytes per sec\&. Set max overall upload speed in bytes/sec\&.
\fI0\fR \fI0\fR
means unrestricted\&. You can append means unrestricted\&. You can append
\fIK\fR \fIK\fR
or 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 \fI0\fR
.RE .RE
.PP .PP

View File

@ -1064,12 +1064,27 @@ writes the piece to the appropriate files.</td>
</div> </div>
<div class="vlist"><dl> <div class="vlist"><dl>
<dt> <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 <strong>-u</strong>, <strong>--max-upload-limit</strong>=SPEED
</dt> </dt>
<dd> <dd>
<p> <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). 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> Default: <em>0</em>
</p> </p>
</dd> </dd>
@ -2031,7 +2046,7 @@ files in the program, then also delete it here.</p></div>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2008-12-04 01:08:46 JST Last updated 2008-12-10 23:03:25 JST
</div> </div>
</div> </div>
</body> </body>

View File

@ -366,9 +366,19 @@ BitTorrent Specific Options
[NOTE] [NOTE]
Make sure that the specified ports are open for incoming TCP traffic. Make sure that the specified ports are open for incoming TCP traffic.
*-u*, *--max-upload-limit*=SPEED:: *--max-overall-upload-limit*=SPEED::
Set max upload speed in bytes per sec. '0' means unrestricted. Set max overall upload speed in bytes/sec.
'0' means unrestricted.
You can append 'K' or 'M'(1K = 1024, 1M = 1024K). 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' Default: '0'
*--peer-id-prefix*=PEERI_ID_PREFIX:: *--peer-id-prefix*=PEERI_ID_PREFIX::

View File

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

View File

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

View File

@ -824,6 +824,16 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
op->addTag(TAG_BITTORRENT); op->addTag(TAG_BITTORRENT);
handlers.push_back(op); 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 SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
(PREF_MAX_UPLOAD_LIMIT, (PREF_MAX_UPLOAD_LIMIT,

View File

@ -68,6 +68,7 @@
#include "BtAnnounce.h" #include "BtAnnounce.h"
#include "BtProgressInfoFile.h" #include "BtProgressInfoFile.h"
#include "DefaultExtensionMessageFactory.h" #include "DefaultExtensionMessageFactory.h"
#include "RequestGroupMan.h"
namespace aria2 { namespace aria2 {
@ -133,8 +134,11 @@ PeerInteractionCommand::PeerInteractionCommand
dispatcher->setPeerStorage(peerStorage); dispatcher->setPeerStorage(peerStorage);
dispatcher->setMaxUploadSpeedLimit dispatcher->setMaxUploadSpeedLimit
(e->option->getAsInt(PREF_MAX_UPLOAD_LIMIT)); (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->setRequestTimeout(e->option->getAsInt(PREF_BT_REQUEST_TIMEOUT));
dispatcher->setBtMessageFactory(factory); dispatcher->setBtMessageFactory(factory);
dispatcher->setRequestGroupMan(e->_requestGroupMan);
DefaultBtMessageReceiverHandle receiver(new DefaultBtMessageReceiver()); DefaultBtMessageReceiverHandle receiver(new DefaultBtMessageReceiver());
receiver->setCuid(cuid); 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_MAX_OPEN_FILES.c_str(), required_argument, &lopt, 33 },
{ PREF_BT_SEED_UNVERIFIED.c_str(), optional_argument, &lopt, 34 }, { PREF_BT_SEED_UNVERIFIED.c_str(), optional_argument, &lopt, 34 },
{ PREF_DHT_FILE_PATH.c_str(), required_argument, &lopt, 35 }, { PREF_DHT_FILE_PATH.c_str(), required_argument, &lopt, 35 },
{ PREF_MAX_OVERALL_UPLOAD_LIMIT.c_str(), required_argument, &lopt, 36 },
#endif // ENABLE_BITTORRENT #endif // ENABLE_BITTORRENT
#ifdef ENABLE_METALINK #ifdef ENABLE_METALINK
{ PREF_METALINK_FILE.c_str(), required_argument, NULL, 'M' }, { PREF_METALINK_FILE.c_str(), required_argument, NULL, 'M' },
@ -338,6 +339,9 @@ Option* option_processing(int argc, char* const argv[])
case 35: case 35:
cmdstream << PREF_DHT_FILE_PATH << "=" << optarg << "\n"; cmdstream << PREF_DHT_FILE_PATH << "=" << optarg << "\n";
break; break;
case 36:
cmdstream << PREF_MAX_OVERALL_UPLOAD_LIMIT << "=" << optarg << "\n";
break;
case 100: case 100:
cmdstream << PREF_METALINK_VERSION << "=" << optarg << "\n"; cmdstream << PREF_METALINK_VERSION << "=" << optarg << "\n";
break; break;

View File

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

View File

@ -221,6 +221,8 @@ extern const std::string PREF_SHOW_FILES;
// values: true | false // values: true | false
extern const std::string PREF_DIRECT_FILE_MAPPING; extern const std::string PREF_DIRECT_FILE_MAPPING;
// values: 1*digit // values: 1*digit
extern const std::string PREF_MAX_OVERALL_UPLOAD_LIMIT;
// values: 1*digit
extern const std::string PREF_MAX_UPLOAD_LIMIT; extern const std::string PREF_MAX_UPLOAD_LIMIT;
// values: a string that your file system recognizes as a file name. // values: a string that your file system recognizes as a file name.
extern const std::string PREF_TORRENT_FILE; 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"\ " for example: \"6881,6885\". You can also use '-'\n"\
" to specify a range: \"6881-6999\". ',' and '-' can\n"\ " to specify a range: \"6881-6999\". ',' and '-' can\n"\
" be used together.") " be used together.")
#define TEXT_MAX_UPLOAD_LIMIT \ #define TEXT_MAX_OVERALL_UPLOAD_LIMIT \
_(" -u, --max-upload-limit=SPEED Set max upload speed in bytes per sec.\n"\ _(" --max-overall-upload-limit=SPEED Set max overall upload speed in bytes/sec.\n"\
" 0 means unrestricted.\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 \ #define TEXT_SEED_TIME \
_(" --seed-time=MINUTES Specify seeding time in minutes. Also see the\n"\ _(" --seed-time=MINUTES Specify seeding time in minutes. Also see the\n"\
" --seed-ratio option.") " --seed-ratio option.")