diff --git a/src/seeder/bitcoin.h b/src/seeder/bitcoin.h --- a/src/seeder/bitcoin.h +++ b/src/seeder/bitcoin.h @@ -28,7 +28,6 @@ class CSeederNode { private: SOCKET sock; - CDataStream vSend; CDataStream vRecv; uint32_t nHeaderStart; uint32_t nMessageStart; @@ -55,6 +54,7 @@ bool ProcessMessages(); protected: + CDataStream vSend; PeerMessagingState ProcessMessage(std::string strCommand, CDataStream &recv); diff --git a/src/seeder/bitcoin.cpp b/src/seeder/bitcoin.cpp --- a/src/seeder/bitcoin.cpp +++ b/src/seeder/bitcoin.cpp @@ -225,9 +225,9 @@ } CSeederNode::CSeederNode(const CService &ip, std::vector *vAddrIn) - : sock(INVALID_SOCKET), vSend(SER_NETWORK, 0), vRecv(SER_NETWORK, 0), - nHeaderStart(-1), nMessageStart(-1), nVersion(0), vAddr(vAddrIn), ban(0), - doneAfter(0), you(ip, ServiceFlags(NODE_NETWORK)) { + : sock(INVALID_SOCKET), vRecv(SER_NETWORK, 0), nHeaderStart(-1), + nMessageStart(-1), nVersion(0), vAddr(vAddrIn), ban(0), doneAfter(0), + you(ip, ServiceFlags(NODE_NETWORK)), vSend(SER_NETWORK, 0) { if (time(nullptr) > 1329696000) { vSend.SetVersion(209); vRecv.SetVersion(209); 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 @@ -27,9 +27,7 @@ class TestCSeederNode : public CSeederNode { public: TestCSeederNode(const CService &service, std::vector *vAddrIn) - : CSeederNode(service, vAddrIn) { - SelectParams(CBaseChainParams::REGTEST); - } + : CSeederNode(service, vAddrIn) {} void TestProcessMessage(const std::string &strCommand, CDataStream &message, PeerMessagingState expectedState) { @@ -37,12 +35,15 @@ CSeederNode::ProcessMessage(strCommand, message); BOOST_CHECK_EQUAL(ret, expectedState); } + + CDataStream getSendBuffer() { return vSend; } }; static const unsigned short SERVICE_PORT = 18444; struct SeederTestingSetup { SeederTestingSetup() { + SelectParams(CBaseChainParams::REGTEST); CNetAddr ip; ip.SetInternal("bitcoin.test"); CService service = {ip, SERVICE_PORT}; @@ -71,7 +72,7 @@ static const int SEEDER_INIT_VERSION = 0; -BOOST_AUTO_TEST_CASE(seeder_node_version_test) { +BOOST_AUTO_TEST_CASE(process_version_msg) { CService serviceFrom; CAddress addrFrom(serviceFrom, ServiceFlags(NODE_NETWORK)); @@ -89,6 +90,20 @@ versionMessage.GetVersion()); } +BOOST_AUTO_TEST_CASE(process_verack_msg) { + CDataStream verackMessage(SER_NETWORK, 0); + verackMessage.SetVersion(INIT_PROTO_VERSION); + testNode->TestProcessMessage(NetMsgType::VERACK, verackMessage, + PeerMessagingState::AwaitingMessages); + + // Seeder should respond with an ADDR message + const CMessageHeader::MessageMagic netMagic = Params().NetMagic(); + CMessageHeader header(netMagic); + testNode->getSendBuffer() >> header; + BOOST_CHECK(header.IsValidWithoutConfig(netMagic)); + BOOST_CHECK_EQUAL(header.GetCommand(), "getaddr"); +} + static CDataStream CreateAddrMessage(std::vector sendAddrs, uint32_t nVersion = INIT_PROTO_VERSION) { CDataStream payload(SER_NETWORK, 0); @@ -97,7 +112,7 @@ return payload; } -BOOST_AUTO_TEST_CASE(seeder_node_addr_test) { +BOOST_AUTO_TEST_CASE(process_addr_msg) { // vAddrs starts with 1 entry. std::vector sendAddrs(ADDR_SOFT_CAP - 1, vAddr[0]);