summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-05-07 08:40:45 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-05-07 08:40:45 +0000
commit40d5c1e763206bfe1d2e4aa9508ec8b3f4e66641 (patch)
treefeefd0c0a33f9c9a781c51d392f1727488081966 /src
parent22ab845df55f950a82adab8934a516005747a868 (diff)
2009-05-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Don't retrieve PREF_MAX_DOWNLOAD_LIMIT and PREF_MAX_UPLOAD_LIMIT from option directly. Instead, get them from RequestGroup. * src/ActivePeerConnectionCommand.cc * src/ActivePeerConnectionCommand.h * src/PeerReceiveHandshakeCommand.cc * src/RequestGroup.h
Diffstat (limited to 'src')
-rw-r--r--src/ActivePeerConnectionCommand.cc17
-rw-r--r--src/ActivePeerConnectionCommand.h1
-rw-r--r--src/PeerReceiveHandshakeCommand.cc13
-rw-r--r--src/RequestGroup.h10
4 files changed, 27 insertions, 14 deletions
diff --git a/src/ActivePeerConnectionCommand.cc b/src/ActivePeerConnectionCommand.cc
index 79405c87..828488e0 100644
--- a/src/ActivePeerConnectionCommand.cc
+++ b/src/ActivePeerConnectionCommand.cc
@@ -64,13 +64,8 @@ ActivePeerConnectionCommand::ActivePeerConnectionCommand
interval(interval),
e(e),
_thresholdSpeed(e->option->getAsInt(PREF_BT_REQUEST_PEER_SPEED_LIMIT)),
- _maxUploadSpeedLimit(e->option->getAsInt(PREF_MAX_UPLOAD_LIMIT)),
_numNewConnection(5)
{
- unsigned int maxDownloadSpeed = e->option->getAsInt(PREF_MAX_DOWNLOAD_LIMIT);
- if(maxDownloadSpeed > 0) {
- _thresholdSpeed = std::min(maxDownloadSpeed, _thresholdSpeed);
- }
_requestGroup->increaseNumCommand();
}
@@ -86,13 +81,19 @@ bool ActivePeerConnectionCommand::execute() {
if(checkPoint.elapsed(interval)) {
checkPoint.reset();
TransferStat tstat = _requestGroup->calculateStat();
+ const unsigned int maxDownloadLimit =
+ _requestGroup->getMaxDownloadSpeedLimit();
+ const unsigned int maxUploadLimit = _requestGroup->getMaxUploadSpeedLimit();
+ unsigned int thresholdSpeed = _thresholdSpeed;
+ if(maxDownloadLimit > 0) {
+ thresholdSpeed = std::min(maxDownloadLimit, _thresholdSpeed);
+ }
if(// for seeder state
(_pieceStorage->downloadFinished() && _btRuntime->lessThanMaxPeers() &&
- (_maxUploadSpeedLimit == 0 ||
- tstat.getUploadSpeed() < _maxUploadSpeedLimit*0.8)) ||
+ (maxUploadLimit == 0 || tstat.getUploadSpeed() < maxUploadLimit*0.8)) ||
// for leecher state
(!_pieceStorage->downloadFinished() &&
- (tstat.getDownloadSpeed() < _thresholdSpeed ||
+ (tstat.getDownloadSpeed() < thresholdSpeed ||
_btRuntime->lessThanMinPeers()))) {
unsigned int numConnection = 0;
diff --git a/src/ActivePeerConnectionCommand.h b/src/ActivePeerConnectionCommand.h
index aae2e5dc..f99f07ce 100644
--- a/src/ActivePeerConnectionCommand.h
+++ b/src/ActivePeerConnectionCommand.h
@@ -63,7 +63,6 @@ private:
DownloadEngine* e;
Time checkPoint;
unsigned int _thresholdSpeed; // UNIT: byte/sec
- unsigned int _maxUploadSpeedLimit;
unsigned int _numNewConnection; // the number of the connection to establish.
public:
ActivePeerConnectionCommand(int cuid,
diff --git a/src/PeerReceiveHandshakeCommand.cc b/src/PeerReceiveHandshakeCommand.cc
index ad89c13f..e5bf415a 100644
--- a/src/PeerReceiveHandshakeCommand.cc
+++ b/src/PeerReceiveHandshakeCommand.cc
@@ -73,10 +73,6 @@ PeerReceiveHandshakeCommand::PeerReceiveHandshakeCommand
if(_peerConnection.isNull()) {
_peerConnection.reset(new PeerConnection(cuid, socket, e->option));
}
- unsigned int maxDownloadSpeed = e->option->getAsInt(PREF_MAX_DOWNLOAD_LIMIT);
- if(maxDownloadSpeed > 0) {
- _thresholdSpeed = std::min(maxDownloadSpeed, _thresholdSpeed);
- }
}
PeerReceiveHandshakeCommand::~PeerReceiveHandshakeCommand() {}
@@ -111,8 +107,15 @@ bool PeerReceiveHandshakeCommand::executeInternal()
(StringFormat("Unknown info hash %s", infoHash.c_str()).str());
}
TransferStat tstat = btContext->getOwnerRequestGroup()->calculateStat();
+ const unsigned int maxDownloadLimit =
+ btContext->getOwnerRequestGroup()->getMaxDownloadSpeedLimit();
+ unsigned int thresholdSpeed = _thresholdSpeed;
+ if(maxDownloadLimit > 0) {
+ thresholdSpeed = std::min(maxDownloadLimit, _thresholdSpeed);
+ }
+
if((!pieceStorage->downloadFinished() &&
- tstat.getDownloadSpeed() < _thresholdSpeed) ||
+ tstat.getDownloadSpeed() < thresholdSpeed) ||
btRuntime->lessThanMaxPeers()) {
if(peerStorage->addPeer(peer)) {
diff --git a/src/RequestGroup.h b/src/RequestGroup.h
index e51b224d..c3e678b8 100644
--- a/src/RequestGroup.h
+++ b/src/RequestGroup.h
@@ -458,6 +458,16 @@ public:
// _maxUploadSpeedLimit. Always returns false if
// _maxUploadSpeedLimit == 0. Otherwise returns false.
bool doesUploadSpeedExceed();
+
+ unsigned int getMaxDownloadSpeedLimit() const
+ {
+ return _maxDownloadSpeedLimit;
+ }
+
+ unsigned int getMaxUploadSpeedLimit() const
+ {
+ return _maxUploadSpeedLimit;
+ }
};
typedef SharedHandle<RequestGroup> RequestGroupHandle;