diff --git a/src/seeder/bitcoin.h b/src/seeder/bitcoin.h --- a/src/seeder/bitcoin.h +++ b/src/seeder/bitcoin.h @@ -19,6 +19,11 @@ // The network magic to use. extern CMessageHeader::MessageMagic netMagic; +enum PeerMessagingState : bool { + AwaitingMessages = false, + Finished = true, +}; + class CSeederNode { private: SOCKET sock; @@ -49,7 +54,8 @@ bool ProcessMessages(); protected: - bool ProcessMessage(std::string strCommand, CDataStream &recv); + PeerMessagingState ProcessMessage(std::string strCommand, + CDataStream &recv); public: CSeederNode(const CService &ip, std::vector *vAddrIn); diff --git a/src/seeder/bitcoin.cpp b/src/seeder/bitcoin.cpp --- a/src/seeder/bitcoin.cpp +++ b/src/seeder/bitcoin.cpp @@ -90,7 +90,8 @@ EndMessage(); } -bool CSeederNode::ProcessMessage(std::string strCommand, CDataStream &recv) { +PeerMessagingState CSeederNode::ProcessMessage(std::string strCommand, + CDataStream &recv) { // fprintf(stdout, "%s: RECV %s\n", ToString(you).c_str(), // strCommand.c_str()); if (strCommand == "version") { @@ -108,7 +109,7 @@ BeginMessage("verack"); EndMessage(); vSend.SetVersion(std::min(nVersion, PROTOCOL_VERSION)); - return false; + return PeerMessagingState::AwaitingMessages; } if (strCommand == "verack") { @@ -122,7 +123,7 @@ } else { doneAfter = time(nullptr) + 1; } - return false; + return PeerMessagingState::AwaitingMessages; } if (strCommand == "addr" && vAddr) { @@ -154,13 +155,13 @@ // addr.ToString().c_str(), (int)(vAddr->size())); if (vAddr->size() > 1000) { doneAfter = 1; - return true; + return PeerMessagingState::Finished; } } - return false; + return PeerMessagingState::AwaitingMessages; } - return false; + return PeerMessagingState::AwaitingMessages; } bool CSeederNode::ProcessMessages() { @@ -212,7 +213,7 @@ CDataStream vMsg(vRecv.begin(), vRecv.begin() + nMessageSize, vRecv.GetType(), vRecv.GetVersion()); vRecv.ignore(nMessageSize); - if (ProcessMessage(strCommand, vMsg)) { + if (ProcessMessage(strCommand, vMsg) == PeerMessagingState::Finished) { return true; } // fprintf(stdout, "%s: done processing %s\n", diff --git a/src/seeder/test/p2p_messaging_tests.cpp b/src/seeder/test/p2p_messaging_tests.cpp --- a/src/seeder/test/p2p_messaging_tests.cpp +++ b/src/seeder/test/p2p_messaging_tests.cpp @@ -21,11 +21,6 @@ #include -enum PeerMessagingState : bool { - Finished = true, - AwaitingMessages = false, -}; - class TestCSeederNode : public CSeederNode { public: TestCSeederNode(const CService &service, std::vector *vAddrIn) @@ -34,9 +29,10 @@ } void TestProcessMessage(const std::string &strCommand, CDataStream &message, - PeerMessagingState state) { - bool ret = CSeederNode::ProcessMessage(strCommand, message); - BOOST_CHECK_EQUAL(ret, bool(state)); + PeerMessagingState expectedState) { + PeerMessagingState ret = + CSeederNode::ProcessMessage(strCommand, message); + BOOST_CHECK_EQUAL(ret, expectedState); } };