mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-26 06:44:32 +00:00
net: require a verack before responding to anything else
7a8c251901 made this logic hard to follow. After that change, messages would not be sent to a peer via SendMessages() before the handshake was complete, but messages could still be sent as a response to an incoming message. For example, if a peer had not yet sent a verack, we wouldn't notify it about new blocks, but we would respond to a PING with a PONG. This change makes the behavior straightforward: until we've received a verack, never send any message other than version/verack/reject. The behavior until a VERACK is received has always been undefined, this change just tightens our policy. This also makes testing much easier, because we can now connect but not send version/verack, and anything sent to us is an error.
This commit is contained in:
parent
8502e7acbe
commit
cbfc5a6728
@ -1420,6 +1420,13 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|||||||
pfrom->fSuccessfullyConnected = true;
|
pfrom->fSuccessfullyConnected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (!pfrom->fSuccessfullyConnected)
|
||||||
|
{
|
||||||
|
// Must have a verack message before anything else
|
||||||
|
LOCK(cs_main);
|
||||||
|
Misbehaving(pfrom->GetId(), 1);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
else if (strCommand == NetMsgType::ADDR)
|
else if (strCommand == NetMsgType::ADDR)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user