0
0
mirror of https://github.com/monero-project/kovri synced 2025-10-08 01:32:52 +02:00

Transports: remove NTCP resolver per prop 141

Referencing #686 #931
This commit is contained in:
anonimal
2018-06-30 00:58:09 +00:00
parent ab04b92e2c
commit d13064ee93
3 changed files with 11 additions and 70 deletions

View File

@@ -475,7 +475,6 @@ class RouterInfo : public RouterInfoTraits, public RoutingDestination
{
Transport transport;
boost::asio::ip::address host;
std::string address;
std::uint16_t port{}, mtu{};
std::uint64_t date{};
std::uint8_t cost{};

View File

@@ -341,9 +341,9 @@ bool Transports::ConnectToPeer(
if (!m_NTCPServer && m_SSUServer)
result = ConnectToPeerSSU(peer);
else if (m_NTCPServer && !m_SSUServer)
result = ConnectToPeerNTCP(ident, peer);
result = ConnectToPeerNTCP(peer);
else if (peer.num_attempts == 0)
result = ConnectToPeerNTCP(ident, peer);
result = ConnectToPeerNTCP(peer);
else if (peer.num_attempts == 1)
result = ConnectToPeerSSU(peer);
// Increase the number of attempts (even when no transports are available)
@@ -359,31 +359,29 @@ bool Transports::ConnectToPeer(
return false;
}
bool Transports::ConnectToPeerNTCP(
const kovri::core::IdentHash& ident,
Peer& peer) {
bool Transports::ConnectToPeerNTCP(Peer& peer)
{
if (!m_NTCPServer)
return false; // NTCP not supported
LOG(debug)
<< "Transports: attempting NTCP for peer"
<< GetFormattedSessionInfo(peer.router);
const auto address = peer.router->GetNTCPAddress(context.SupportsV6());
const auto* address = peer.router->GetNTCPAddress(context.SupportsV6());
// No NTCP address found
if (!address)
return false;
// TODO(anonimal): We should expect to have an address specified when NTCP is enabled/allowed
assert(!address->host.is_unspecified());
if (!address->host.is_unspecified()) {
if (!peer.router->UsesIntroducer() && !peer.router->IsUnreachable()) {
auto s = std::make_shared<NTCPSession>(*m_NTCPServer, peer.router);
m_NTCPServer->Connect(address->host, address->port, s);
return true;
}
} else { // we don't have address
if (address->address.length() > 0) { // trying to resolve
LOG(debug) << "Transports: NTCP resolving " << address->address;
NTCPResolve(address->address, ident);
return true;
}
}
return false;
}
@@ -427,50 +425,6 @@ void Transports::HandleRequestComplete(
}
}
void Transports::NTCPResolve(
const std::string& addr,
const kovri::core::IdentHash& ident) {
auto resolver =
std::make_shared<boost::asio::ip::tcp::resolver>(m_Service);
resolver->async_resolve(
boost::asio::ip::tcp::resolver::query(
addr,
""),
std::bind(
&Transports::HandleNTCPResolve,
this,
std::placeholders::_1,
std::placeholders::_2,
ident,
resolver));
}
void Transports::HandleNTCPResolve(
const boost::system::error_code& ecode,
boost::asio::ip::tcp::resolver::iterator it,
kovri::core::IdentHash ident,
std::shared_ptr<boost::asio::ip::tcp::resolver>) {
auto it1 = m_Peers.find(ident);
if (it1 != m_Peers.end()) {
auto& peer = it1->second;
if (!ecode && peer.router) {
auto address = (*it).endpoint().address();
LOG(debug)
<< "Transports: " << (*it).host_name()
<< " has been resolved to " << address;
auto addr = peer.router->GetNTCPAddress();
if (addr) {
auto s = std::make_shared<NTCPSession>(*m_NTCPServer, peer.router);
m_NTCPServer->Connect(address, addr->port, s);
return;
}
}
LOG(error)
<< "Transports: unable to resolve NTCP address: " << ecode.message();
m_Peers.erase(it1);
}
}
// TODO(unassigned): why is this never called anywhere?
void Transports::CloseSession(
std::shared_ptr<const kovri::core::RouterInfo> router) {

View File

@@ -233,24 +233,12 @@ class Transports {
bool ConnectToPeer(
const kovri::core::IdentHash& ident, Peer& peer);
bool ConnectToPeerNTCP(
const kovri::core::IdentHash& ident, Peer& peer);
bool ConnectToPeerNTCP(Peer& peer);
bool ConnectToPeerSSU(Peer& peer);
void HandlePeerCleanupTimer(
const boost::system::error_code& ecode);
void NTCPResolve(
const std::string& addr,
const kovri::core::IdentHash& ident);
void HandleNTCPResolve(
const boost::system::error_code& ecode,
boost::asio::ip::tcp::resolver::iterator it,
kovri::core::IdentHash ident,
std::shared_ptr<boost::asio::ip::tcp::resolver> resolver);
void UpdateBandwidth();
void DetectExternalIP();