mirror of https://github.com/aria2/aria2
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.hpull/1/head
parent
8129042a3a
commit
8c1894720f
16
ChangeLog
16
ChangeLog
|
@ -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.
|
||||||
|
|
27
doc/aria2c.1
27
doc/aria2c.1
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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::
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.")
|
||||||
|
|
Loading…
Reference in New Issue