2007-06-04 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

Accept incoming connections if download rate is low.
	* src/PeerListenCommand.h, src/PeerListenCommand.cc:
	(_lowestSpeedLimit): New variable.
	(setLowestSpeedLimit): New function.
	(execute): Accept incoming connections if download rate is low.
	MAX_PEERS is ignored in this case.
This commit is contained in:
Tatsuhiro Tsujikawa 2007-06-04 12:33:29 +00:00
parent 453e2f10dd
commit 47ce21a469
4 changed files with 22 additions and 2 deletions

View File

@ -1,3 +1,12 @@
2007-06-04 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Accept incoming connections if download rate is low.
* src/PeerListenCommand.h, src/PeerListenCommand.cc:
(_lowestSpeedLimit): New variable.
(setLowestSpeedLimit): New function.
(execute): Accept incoming connections if download rate is low.
MAX_PEERS is ignored in this case.
2007-06-03 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
RequestGroup::getNextCommand() was renamed to createNextCommand().

1
TODO
View File

@ -34,3 +34,4 @@
* Do not use ufilename in multi-simultaneous download mode.
* Create download command directly when 1connection download.
Consider timeout when file allocation/check integrity is enabled.
* Accept incoming connections if download rate is low.

View File

@ -41,7 +41,8 @@ PeerListenCommand::PeerListenCommand(int cuid,
TorrentDownloadEngine* e,
const BtContextHandle& btContext)
:BtContextAwareCommand(cuid, btContext),
e(e) {}
e(e),
_lowestSpeedLimit(20*1024) {}
PeerListenCommand::~PeerListenCommand() {}
@ -77,8 +78,11 @@ bool PeerListenCommand::execute() {
peerSocket->getPeerInfo(peerInfo);
pair<string, int> localInfo;
peerSocket->getAddrInfo(localInfo);
TransferStat tstat = peerStorage->calculateStat();
if(peerInfo.first != localInfo.first &&
btRuntime->getConnections() < MAX_PEERS) {
(!pieceStorage->downloadFinished() && tstat.getDownloadSpeed() < _lowestSpeedLimit ||
btRuntime->getConnections() < MAX_PEERS)) {
PeerHandle peer = PeerHandle(new Peer(peerInfo.first, peerInfo.second,
btContext->getPieceLength(),
btContext->getTotalLength()));

View File

@ -42,6 +42,7 @@ class PeerListenCommand : public BtContextAwareCommand {
private:
TorrentDownloadEngine* e;
SocketHandle socket;
int32_t _lowestSpeedLimit;
public:
PeerListenCommand(int cuid,
TorrentDownloadEngine* e,
@ -52,6 +53,11 @@ public:
bool execute();
int bindPort(int portRangeStart, int portRangeEnd);
void setLowestSpeedLimit(int32_t speed)
{
_lowestSpeedLimit = speed;
}
};
#endif // _D_PEER_LISTEN_COMMAND_H_