Browse Source

Possible fix for peer servers not to connect to nodes.

cl-refactor
Gav Wood 11 years ago
parent
commit
636dadd15a
  1. 3
      libethereum/Client.cpp
  2. 19
      libethereum/PeerNetwork.cpp
  3. 2
      libethereum/PeerNetwork.h

3
libethereum/Client.cpp

@ -54,8 +54,7 @@ void Client::startNetwork(short _listenPort, std::string const& _seedHost, short
{
if (m_net)
return;
m_net = new PeerServer(m_clientVersion, m_bc, 0, _listenPort);
m_net->setMode(_mode);
m_net = new PeerServer(m_clientVersion, m_bc, 0, _listenPort, _mode);
m_net->setIdealPeerCount(_peers);
m_net->setVerbosity(_verbosity);
if (_seedHost.size())

19
libethereum/PeerNetwork.cpp

@ -74,12 +74,12 @@ bool PeerSession::interpret(RLP const& _r)
m_protocolVersion = _r[1].toInt<uint>();
m_networkId = _r[2].toInt<uint>();
auto clientVersion = _r[3].toString();
if (m_server->m_verbosity >= 2)
cout << std::setw(2) << m_socket.native_handle() << " | Hello: " << clientVersion << endl;
m_caps = _r.itemCount() > 4 ? _r[4].toInt<uint>() : 0x07;
m_listenPort = _r.itemCount() > 5 ? _r[5].toInt<short>() : -1;
if (m_server->m_verbosity >= 2)
cout << std::setw(2) << m_socket.native_handle() << " | Hello: " << clientVersion << showbase << hex << m_caps << dec << endl;
if (m_protocolVersion != 0 || m_networkId != m_reqNetworkId)
{
disconnect();
@ -662,8 +662,9 @@ struct UPnP
class NoNetworking: public std::exception {};
PeerServer::PeerServer(std::string const& _clientVersion, BlockChain const& _ch, uint _networkId, short _port):
PeerServer::PeerServer(std::string const& _clientVersion, BlockChain const& _ch, uint _networkId, short _port, NodeMode _m):
m_clientVersion(_clientVersion),
m_mode(_m),
m_listenPort(_port),
m_chain(&_ch),
m_acceptor(m_ioService, bi::tcp::endpoint(bi::tcp::v4(), _port)),
@ -674,7 +675,7 @@ PeerServer::PeerServer(std::string const& _clientVersion, BlockChain const& _ch,
determinePublic();
ensureAccepting();
if (m_verbosity)
cout << "Genesis: " << m_chain->genesisHash() << endl;
cout << "Mode: " << (_m == NodeMode::PeerServer ? "PeerServer" : "Full") << endl;
}
PeerServer::PeerServer(std::string const& _clientVersion, uint _networkId):
@ -911,6 +912,7 @@ bool PeerServer::process(BlockChain& _bc, TransactionQueue& _tq, Overlay& _o)
// Send any new transactions.
if (fullProcess)
{
for (auto j: m_peers)
if (auto p = j.lock())
{
@ -937,8 +939,6 @@ bool PeerServer::process(BlockChain& _bc, TransactionQueue& _tq, Overlay& _o)
}
// Send any new blocks.
if (fullProcess)
{
auto h = _bc.currentHash();
if (h != m_latestBlockSent)
{
@ -958,9 +958,7 @@ bool PeerServer::process(BlockChain& _bc, TransactionQueue& _tq, Overlay& _o)
}
}
m_latestBlockSent = h;
}
if (fullProcess)
for (bool accepted = 1; accepted;)
{
accepted = 0;
@ -988,9 +986,8 @@ bool PeerServer::process(BlockChain& _bc, TransactionQueue& _tq, Overlay& _o)
break;
}
}
// Connect to additional peers
if (fullProcess)
{
while (m_peers.size() < m_idealPeerCount)
{
if (m_incomingPeers.empty())

2
libethereum/PeerNetwork.h

@ -125,7 +125,7 @@ class PeerServer
public:
/// Start server, listening for connections on the given port.
PeerServer(std::string const& _clientVersion, BlockChain const& _ch, uint _networkId, short _port);
PeerServer(std::string const& _clientVersion, BlockChain const& _ch, uint _networkId, short _port, NodeMode _m = NodeMode::Full);
/// Start server, but don't listen.
PeerServer(std::string const& _clientVersion, uint _networkId);
~PeerServer();

Loading…
Cancel
Save