Browse Source

Merge pull request #2667 from LefterisJP/resolve_host_error_checks

Error checking in resolveHost()
cl-refactor
Gav Wood 9 years ago
parent
commit
6b15f440c4
  1. 18
      libp2p/Network.cpp
  2. 3
      libweb3jsonrpc/WebThreeStubServerBase.cpp

18
libp2p/Network.cpp

@ -211,14 +211,23 @@ bi::tcp::endpoint Network::traverseNAT(std::set<bi::address> const& _ifAddresses
bi::tcp::endpoint Network::resolveHost(string const& _addr)
{
static boost::asio::io_service s_resolverIoService;
vector<string> split;
boost::split(split, _addr, boost::is_any_of(":"));
unsigned port = split.size() > 1 ? stoi(split[1]) : dev::p2p::c_defaultIPPort;
int givenPort;
try
{
givenPort = stoi(split[1]);
}
catch (...)
{
clog(NetWarn) << "Error resolving host address..." << LogTag::Url << _addr << ". Could not find a port after ':'";
return bi::tcp::endpoint();
}
unsigned port = split.size() > 1 ? givenPort : dev::p2p::c_defaultIPPort;
bi::tcp::endpoint ep(bi::address(), port);
boost::system::error_code ec;
bi::address address = bi::address::from_string(split[0], ec);
bi::tcp::endpoint ep(bi::address(), port);
if (!ec)
ep.address(address);
else
@ -228,7 +237,10 @@ bi::tcp::endpoint Network::resolveHost(string const& _addr)
bi::tcp::resolver r(s_resolverIoService);
auto it = r.resolve({bi::tcp::v4(), split[0], toString(port)}, ec);
if (ec)
{
clog(NetWarn) << "Error resolving host address..." << LogTag::Url << _addr << ":" << LogTag::Error << ec.message();
return bi::tcp::endpoint();
}
else
ep = *it;
}

3
libweb3jsonrpc/WebThreeStubServerBase.cpp

@ -545,6 +545,9 @@ bool WebThreeStubServerBase::admin_net_connect(std::string const& _node, std::st
}
else
ep = p2p::Network::resolveHost(_node);
if (ep == bi::tcp::endpoint())
return false;
network()->requirePeer(id, ep);
return true;
}

Loading…
Cancel
Save