mirror of
https://github.com/Qortal/qortal.git
synced 2025-02-22 07:05:48 +00:00
If a node accepts a connection from an inbound peer then remote peer will send RESPONSE first and local node would previously change handshaking state to COMPLETED while computing their own RESPONSE. This meant that the local node would sometimes also start sending post-handshake messages to the remote peer, e.g. TRANSACTION_SIGNATURES. Remote peer is only expecting a RESPONSE message, so would close connection. So we introduce an extra handshaking state "RESPONDING" for use by local node while they compute RESPONSE in a separate thread. Once the RESPONSE has been sent, local node moves to COMPLETED state and called onHandshakeCompleted() as per usual. Note that the code path when connecting outbound to a remote peer is not changed, and the RESPONDING state is not used. Also in this commit: Network.onPeerReady now bypasses call to onMessage and instead calls onHandshakingMessage() directly to avoid race condition where peer's handshake status could change between onPeerReady's caller and onMessage() calling peer.getHandshakeStatus()