ソースを参照

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.
Tatsuhiro Tsujikawa 18 年 前
コミット
47ce21a469
4 ファイル変更22 行追加2 行削除
  1. 9 0
      ChangeLog
  2. 1 0
      TODO
  3. 6 2
      src/PeerListenCommand.cc
  4. 6 0
      src/PeerListenCommand.h

+ 9 - 0
ChangeLog

@@ -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 - 0
TODO

@@ -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.

+ 6 - 2
src/PeerListenCommand.cc

@@ -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()));

+ 6 - 0
src/PeerListenCommand.h

@@ -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_