瀏覽代碼

BitTorrent: Allow 32KiB request

It looks like the 32KiB is the default request size of python
bittorrent client.  Previously, aria2 only allowed maximum 16KiB
request.
Tatsuhiro Tsujikawa 9 年之前
父節點
當前提交
e220c53849
共有 5 個文件被更改,包括 7 次插入6 次删除
  1. 1 1
      src/BtConstants.h
  2. 1 1
      src/BtPieceMessage.cc
  3. 2 1
      src/PeerConnection.h
  4. 2 2
      test/BtRequestMessageTest.cc
  5. 1 1
      test/PeerConnectionTest.cc

+ 1 - 1
src/BtConstants.h

@@ -46,7 +46,7 @@ constexpr size_t PIECE_HASH_LENGTH = 20;
 
 constexpr size_t PEER_ID_LENGTH = 20;
 
-constexpr size_t MAX_BLOCK_LENGTH = 16_k;
+constexpr size_t MAX_BLOCK_LENGTH = 32_k;
 
 constexpr size_t DEFAULT_MAX_OUTSTANDING_REQUEST = 6;
 

+ 1 - 1
src/BtPieceMessage.cc

@@ -212,7 +212,7 @@ void BtPieceMessage::send()
 
 void BtPieceMessage::pushPieceData(int64_t offset, int32_t length) const
 {
-  assert(length <= static_cast<int32_t>(16_k));
+  assert(length <= static_cast<int32_t>(MAX_BLOCK_LENGTH));
   auto buf = std::vector<unsigned char>(length + MESSAGE_HEADER_LENGTH);
   createMessageHeader(buf.data());
   ssize_t r;

+ 2 - 1
src/PeerConnection.h

@@ -43,6 +43,7 @@
 #include "SocketBuffer.h"
 #include "Command.h"
 #include "a2functional.h"
+#include "BtConstants.h"
 
 namespace aria2 {
 
@@ -53,7 +54,7 @@ class ARC4Encryptor;
 // The maximum length of buffer. If the message length (including 4
 // bytes length and payload length) is larger than this value, it is
 // dropped.
-constexpr size_t MAX_BUFFER_CAPACITY = 16_k + 128;
+constexpr size_t MAX_BUFFER_CAPACITY = MAX_BLOCK_LENGTH + 128;
 
 class PeerConnection {
 private:

+ 2 - 2
test/BtRequestMessageTest.cc

@@ -266,7 +266,7 @@ void BtRequestMessageTest::testValidate()
 
 void BtRequestMessageTest::testValidate_lengthTooLong()
 {
-  BtRequestMessage msg(0, 0, 16_k + 1);
+  BtRequestMessage msg(0, 0, 32_k + 1);
   msg.setBtMessageValidator(
       make_unique<RangeBtMessageValidator>(&msg, 1_k, 256_k));
   try {
@@ -274,7 +274,7 @@ void BtRequestMessageTest::testValidate_lengthTooLong()
     CPPUNIT_FAIL("exception must be thrown.");
   }
   catch (DlAbortEx& e) {
-    CPPUNIT_ASSERT_EQUAL(std::string("Length too long: 16385 > 16KB"),
+    CPPUNIT_ASSERT_EQUAL(std::string("Length too long: 32769 > 32KB"),
                          std::string(e.what()));
   }
 }

+ 1 - 1
test/PeerConnectionTest.cc

@@ -28,7 +28,7 @@ void PeerConnectionTest::testReserveBuffer()
   CPPUNIT_ASSERT_EQUAL((size_t)MAX_BUFFER_CAPACITY, con.getBufferCapacity());
   CPPUNIT_ASSERT_EQUAL((size_t)3, con.getBufferLength());
 
-  constexpr size_t newLength = 32_k;
+  constexpr size_t newLength = 64_k;
   con.reserveBuffer(newLength);
 
   CPPUNIT_ASSERT_EQUAL(newLength, con.getBufferCapacity());