summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-06-10 00:14:48 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-06-10 00:14:48 +0900
commite220c5384961f9261f19c28cd0b85f76f06d8993 (patch)
tree3dd3cbcc05aa11b3a36d84ed11afcc9c222d1312
parentc7d242e27d8e9c9160c58e89f0ab196eb77fc9f7 (diff)
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.
-rw-r--r--src/BtConstants.h2
-rw-r--r--src/BtPieceMessage.cc2
-rw-r--r--src/PeerConnection.h3
-rw-r--r--test/BtRequestMessageTest.cc4
-rw-r--r--test/PeerConnectionTest.cc2
5 files changed, 7 insertions, 6 deletions
diff --git a/src/BtConstants.h b/src/BtConstants.h
index 2c933888..16736847 100644
--- a/src/BtConstants.h
+++ b/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;
diff --git a/src/BtPieceMessage.cc b/src/BtPieceMessage.cc
index 1c67f2ec..8a8c5607 100644
--- a/src/BtPieceMessage.cc
+++ b/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;
diff --git a/src/PeerConnection.h b/src/PeerConnection.h
index 0779301a..17e023f0 100644
--- a/src/PeerConnection.h
+++ b/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:
diff --git a/test/BtRequestMessageTest.cc b/test/BtRequestMessageTest.cc
index a68fb4d4..1d3841cc 100644
--- a/test/BtRequestMessageTest.cc
+++ b/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()));
}
}
diff --git a/test/PeerConnectionTest.cc b/test/PeerConnectionTest.cc
index 9d580285..f1d8374d 100644
--- a/test/PeerConnectionTest.cc
+++ b/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());