summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-07-09 18:08:35 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-07-09 21:36:57 +0900
commit570d46725fda98e546acab1d338cd72336836188 (patch)
tree2f264606a9f831c7de59431da9cafdc8a24fdf5c
parent360ca57231276648c8a26556ee06f7484176323c (diff)
Fix frequent choke/unchoke message transmission
-rw-r--r--src/BtChokeMessage.cc25
-rw-r--r--src/BtChokeMessage.h4
-rw-r--r--src/BtUnchokeMessage.cc20
-rw-r--r--src/BtUnchokeMessage.h4
-rw-r--r--src/DefaultBtInteractive.cc3
-rw-r--r--test/BtChokeMessageTest.cc17
-rw-r--r--test/BtUnchokeMessageTest.cc16
7 files changed, 3 insertions, 86 deletions
diff --git a/src/BtChokeMessage.cc b/src/BtChokeMessage.cc
index 7d75df02..066e8b26 100644
--- a/src/BtChokeMessage.cc
+++ b/src/BtChokeMessage.cc
@@ -60,29 +60,4 @@ void BtChokeMessage::doReceivedAction()
getBtRequestFactory()->doChokedAction();
}
-bool BtChokeMessage::sendPredicate() const { return !getPeer()->amChoking(); }
-
-namespace {
-struct ThisProgressUpdate : public ProgressUpdate {
- ThisProgressUpdate(std::shared_ptr<Peer> peer, BtMessageDispatcher* disp)
- : peer(std::move(peer)), disp(disp)
- {
- }
- virtual void update(size_t length, bool complete) CXX11_OVERRIDE
- {
- if (complete) {
- peer->amChoking(true);
- disp->doChokingAction();
- }
- }
- std::shared_ptr<Peer> peer;
- BtMessageDispatcher* disp;
-};
-} // namespace
-
-std::unique_ptr<ProgressUpdate> BtChokeMessage::getProgressUpdate()
-{
- return make_unique<ThisProgressUpdate>(getPeer(), getBtMessageDispatcher());
-}
-
} // namespace aria2
diff --git a/src/BtChokeMessage.h b/src/BtChokeMessage.h
index 3ad96dd1..70675fc1 100644
--- a/src/BtChokeMessage.h
+++ b/src/BtChokeMessage.h
@@ -51,10 +51,6 @@ public:
static std::unique_ptr<BtChokeMessage> create(const unsigned char* data,
size_t dataLength);
-
- virtual bool sendPredicate() const CXX11_OVERRIDE;
-
- virtual std::unique_ptr<ProgressUpdate> getProgressUpdate() CXX11_OVERRIDE;
};
} // namespace aria2
diff --git a/src/BtUnchokeMessage.cc b/src/BtUnchokeMessage.cc
index cc9e203a..55938851 100644
--- a/src/BtUnchokeMessage.cc
+++ b/src/BtUnchokeMessage.cc
@@ -56,24 +56,4 @@ void BtUnchokeMessage::doReceivedAction()
getPeer()->peerChoking(false);
}
-bool BtUnchokeMessage::sendPredicate() const { return getPeer()->amChoking(); }
-
-namespace {
-struct ThisProgressUpdate : public ProgressUpdate {
- ThisProgressUpdate(std::shared_ptr<Peer> peer) : peer(std::move(peer)) {}
- virtual void update(size_t length, bool complete) CXX11_OVERRIDE
- {
- if (complete) {
- peer->amChoking(false);
- }
- }
- std::shared_ptr<Peer> peer;
-};
-} // namespace
-
-std::unique_ptr<ProgressUpdate> BtUnchokeMessage::getProgressUpdate()
-{
- return make_unique<ThisProgressUpdate>(getPeer());
-}
-
} // namespace aria2
diff --git a/src/BtUnchokeMessage.h b/src/BtUnchokeMessage.h
index bd9e6109..409e2207 100644
--- a/src/BtUnchokeMessage.h
+++ b/src/BtUnchokeMessage.h
@@ -54,10 +54,6 @@ public:
size_t dataLength);
virtual void doReceivedAction() CXX11_OVERRIDE;
-
- virtual bool sendPredicate() const CXX11_OVERRIDE;
-
- virtual std::unique_ptr<ProgressUpdate> getProgressUpdate() CXX11_OVERRIDE;
};
} // namespace aria2
diff --git a/src/DefaultBtInteractive.cc b/src/DefaultBtInteractive.cc
index c74d8e7a..d3e6d0a4 100644
--- a/src/DefaultBtInteractive.cc
+++ b/src/DefaultBtInteractive.cc
@@ -251,11 +251,14 @@ void DefaultBtInteractive::decideChoking()
{
if (peer_->shouldBeChoking()) {
if (!peer_->amChoking()) {
+ peer_->amChoking(true);
+ dispatcher_->doChokingAction();
dispatcher_->addMessageToQueue(messageFactory_->createChokeMessage());
}
}
else {
if (peer_->amChoking()) {
+ peer_->amChoking(false);
dispatcher_->addMessageToQueue(messageFactory_->createUnchokeMessage());
}
}
diff --git a/test/BtChokeMessageTest.cc b/test/BtChokeMessageTest.cc
index debd2530..0dafc82f 100644
--- a/test/BtChokeMessageTest.cc
+++ b/test/BtChokeMessageTest.cc
@@ -19,7 +19,6 @@ class BtChokeMessageTest : public CppUnit::TestFixture {
CPPUNIT_TEST(testCreate);
CPPUNIT_TEST(testCreateMessage);
CPPUNIT_TEST(testDoReceivedAction);
- CPPUNIT_TEST(testOnSendComplete);
CPPUNIT_TEST(testToString);
CPPUNIT_TEST_SUITE_END();
@@ -36,7 +35,6 @@ public:
void testCreate();
void testCreateMessage();
void testDoReceivedAction();
- void testOnSendComplete();
void testToString();
class MockBtMessageDispatcher2 : public MockBtMessageDispatcher {
@@ -130,21 +128,6 @@ void BtChokeMessageTest::testDoReceivedAction()
CPPUNIT_ASSERT(peer->peerChoking());
}
-void BtChokeMessageTest::testOnSendComplete()
-{
- BtChokeMessage msg;
- msg.setPeer(peer);
-
- auto dispatcher = make_unique<MockBtMessageDispatcher2>();
- msg.setBtMessageDispatcher(dispatcher.get());
-
- auto pu = std::unique_ptr<ProgressUpdate>{msg.getProgressUpdate()};
- pu->update(0, true);
-
- CPPUNIT_ASSERT(dispatcher->doChokingActionCalled);
- CPPUNIT_ASSERT(peer->amChoking());
-}
-
void BtChokeMessageTest::testToString()
{
BtChokeMessage msg;
diff --git a/test/BtUnchokeMessageTest.cc b/test/BtUnchokeMessageTest.cc
index 1fe0bbe9..d01266f8 100644
--- a/test/BtUnchokeMessageTest.cc
+++ b/test/BtUnchokeMessageTest.cc
@@ -15,7 +15,6 @@ class BtUnchokeMessageTest : public CppUnit::TestFixture {
CPPUNIT_TEST(testCreate);
CPPUNIT_TEST(testCreateMessage);
CPPUNIT_TEST(testDoReceivedAction);
- CPPUNIT_TEST(testOnSendComplete);
CPPUNIT_TEST(testToString);
CPPUNIT_TEST_SUITE_END();
@@ -26,7 +25,6 @@ public:
void testCreate();
void testCreateMessage();
void testDoReceivedAction();
- void testOnSendComplete();
void testToString();
};
@@ -82,20 +80,6 @@ void BtUnchokeMessageTest::testDoReceivedAction()
CPPUNIT_ASSERT(!peer->peerChoking());
}
-void BtUnchokeMessageTest::testOnSendComplete()
-{
- std::shared_ptr<Peer> peer(new Peer("host", 6969));
- peer->allocateSessionResource(1_k, 1_m);
- peer->amChoking(true);
- BtUnchokeMessage msg;
- msg.setPeer(peer);
-
- CPPUNIT_ASSERT(peer->amChoking());
- std::shared_ptr<ProgressUpdate> pu(msg.getProgressUpdate());
- pu->update(0, true);
- CPPUNIT_ASSERT(!peer->amChoking());
-}
-
void BtUnchokeMessageTest::testToString()
{
BtUnchokeMessage msg;