diff --git a/libp2p/Host.cpp b/libp2p/Host.cpp index de3a32dd7..9a48817fc 100644 --- a/libp2p/Host.cpp +++ b/libp2p/Host.cpp @@ -542,24 +542,27 @@ void Host::doHandshake(Handshake* _h, boost::system::error_code _ech) return; } + /// capabilities handshake (encrypted magic sequence is placeholder) bytes decryptedMagic; decryptSymNoAuth(k->encryptK, h256(), &k->recvdMagicCipherAndMac, decryptedMagic); - - shared_ptr p; - p = m_peers[_h->remote]; - - if (!p) + if (decryptedMagic[0] == 0x22 && decryptedMagic[1] == 0x40 && decryptedMagic[2] == 0x08 && decryptedMagic[3] == 0x91) { - p.reset(new Peer()); - p->id = _h->remote; + shared_ptr p; + p = m_peers[_h->remote]; + + if (!p) + { + p.reset(new Peer()); + p->id = _h->remote; + } + p->endpoint.tcp.address(_h->socket->remote_endpoint().address()); + p->m_lastDisconnect = NoDisconnect; + p->m_lastConnected = std::chrono::system_clock::now(); + p->m_failedAttempts = 0; + + auto ps = std::make_shared(this, move(*_h->socket), p); + ps->start(); } - p->endpoint.tcp.address(_h->socket->remote_endpoint().address()); - p->m_lastDisconnect = NoDisconnect; - p->m_lastConnected = std::chrono::system_clock::now(); - p->m_failedAttempts = 0; - - auto ps = std::make_shared(this, move(*_h->socket), p); - ps->start(); delete k; });