mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-17 18:40:09 +00:00
net: Disallow sending messages until the version handshake is complete
This is a change in behavior, though it's much more sane now than before.
This commit is contained in:
parent
12752af0cc
commit
7a8c251901
@ -1277,7 +1277,6 @@ bool static ProcessMessage(CNode* pfrom, std::string strCommand, CDataStream& vR
|
|||||||
// Change version
|
// Change version
|
||||||
pfrom->SetSendVersion(nSendVersion);
|
pfrom->SetSendVersion(nSendVersion);
|
||||||
pfrom->nVersion = nVersion;
|
pfrom->nVersion = nVersion;
|
||||||
pfrom->fSuccessfullyConnected = true;
|
|
||||||
|
|
||||||
if((nServices & NODE_WITNESS))
|
if((nServices & NODE_WITNESS))
|
||||||
{
|
{
|
||||||
@ -1387,6 +1386,7 @@ bool static ProcessMessage(CNode* pfrom, std::string strCommand, CDataStream& vR
|
|||||||
nCMPCTBLOCKVersion = 1;
|
nCMPCTBLOCKVersion = 1;
|
||||||
connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
|
connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
|
||||||
}
|
}
|
||||||
|
pfrom->fSuccessfullyConnected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2725,8 +2725,8 @@ bool SendMessages(CNode* pto, CConnman& connman, std::atomic<bool>& interruptMsg
|
|||||||
{
|
{
|
||||||
const Consensus::Params& consensusParams = Params().GetConsensus();
|
const Consensus::Params& consensusParams = Params().GetConsensus();
|
||||||
{
|
{
|
||||||
// Don't send anything until we get its version message
|
// Don't send anything until the version handshake is complete
|
||||||
if (pto->nVersion == 0 || pto->fDisconnect)
|
if (!pto->fSuccessfullyConnected || pto->fDisconnect)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// If we get here, the outgoing message serialization version is set and can't change.
|
// If we get here, the outgoing message serialization version is set and can't change.
|
||||||
|
@ -55,6 +55,7 @@ BOOST_AUTO_TEST_CASE(DoS_banning)
|
|||||||
dummyNode1.SetSendVersion(PROTOCOL_VERSION);
|
dummyNode1.SetSendVersion(PROTOCOL_VERSION);
|
||||||
GetNodeSignals().InitializeNode(&dummyNode1, *connman);
|
GetNodeSignals().InitializeNode(&dummyNode1, *connman);
|
||||||
dummyNode1.nVersion = 1;
|
dummyNode1.nVersion = 1;
|
||||||
|
dummyNode1.fSuccessfullyConnected = true;
|
||||||
Misbehaving(dummyNode1.GetId(), 100); // Should get banned
|
Misbehaving(dummyNode1.GetId(), 100); // Should get banned
|
||||||
SendMessages(&dummyNode1, *connman, interruptDummy);
|
SendMessages(&dummyNode1, *connman, interruptDummy);
|
||||||
BOOST_CHECK(connman->IsBanned(addr1));
|
BOOST_CHECK(connman->IsBanned(addr1));
|
||||||
@ -65,6 +66,7 @@ BOOST_AUTO_TEST_CASE(DoS_banning)
|
|||||||
dummyNode2.SetSendVersion(PROTOCOL_VERSION);
|
dummyNode2.SetSendVersion(PROTOCOL_VERSION);
|
||||||
GetNodeSignals().InitializeNode(&dummyNode2, *connman);
|
GetNodeSignals().InitializeNode(&dummyNode2, *connman);
|
||||||
dummyNode2.nVersion = 1;
|
dummyNode2.nVersion = 1;
|
||||||
|
dummyNode2.fSuccessfullyConnected = true;
|
||||||
Misbehaving(dummyNode2.GetId(), 50);
|
Misbehaving(dummyNode2.GetId(), 50);
|
||||||
SendMessages(&dummyNode2, *connman, interruptDummy);
|
SendMessages(&dummyNode2, *connman, interruptDummy);
|
||||||
BOOST_CHECK(!connman->IsBanned(addr2)); // 2 not banned yet...
|
BOOST_CHECK(!connman->IsBanned(addr2)); // 2 not banned yet...
|
||||||
@ -85,6 +87,7 @@ BOOST_AUTO_TEST_CASE(DoS_banscore)
|
|||||||
dummyNode1.SetSendVersion(PROTOCOL_VERSION);
|
dummyNode1.SetSendVersion(PROTOCOL_VERSION);
|
||||||
GetNodeSignals().InitializeNode(&dummyNode1, *connman);
|
GetNodeSignals().InitializeNode(&dummyNode1, *connman);
|
||||||
dummyNode1.nVersion = 1;
|
dummyNode1.nVersion = 1;
|
||||||
|
dummyNode1.fSuccessfullyConnected = true;
|
||||||
Misbehaving(dummyNode1.GetId(), 100);
|
Misbehaving(dummyNode1.GetId(), 100);
|
||||||
SendMessages(&dummyNode1, *connman, interruptDummy);
|
SendMessages(&dummyNode1, *connman, interruptDummy);
|
||||||
BOOST_CHECK(!connman->IsBanned(addr1));
|
BOOST_CHECK(!connman->IsBanned(addr1));
|
||||||
@ -110,6 +113,7 @@ BOOST_AUTO_TEST_CASE(DoS_bantime)
|
|||||||
dummyNode.SetSendVersion(PROTOCOL_VERSION);
|
dummyNode.SetSendVersion(PROTOCOL_VERSION);
|
||||||
GetNodeSignals().InitializeNode(&dummyNode, *connman);
|
GetNodeSignals().InitializeNode(&dummyNode, *connman);
|
||||||
dummyNode.nVersion = 1;
|
dummyNode.nVersion = 1;
|
||||||
|
dummyNode.fSuccessfullyConnected = true;
|
||||||
|
|
||||||
Misbehaving(dummyNode.GetId(), 100);
|
Misbehaving(dummyNode.GetId(), 100);
|
||||||
SendMessages(&dummyNode, *connman, interruptDummy);
|
SendMessages(&dummyNode, *connman, interruptDummy);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user