From ecb06feb85d7926d4f2dce518e9f98a2d43a1819 Mon Sep 17 00:00:00 2001 From: subtly Date: Tue, 17 Feb 2015 18:57:25 -0500 Subject: [PATCH] verification of and placeholder for capabilities handshake --- libp2p/Host.cpp | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) 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; });