New DNS implementation.

This commit is contained in:
XMRig 2021-03-16 22:24:37 +07:00
parent 5b189696d7
commit 3e41bdc552
No known key found for this signature in database
GPG key ID: 446A53638BE94409
14 changed files with 357 additions and 121 deletions

View file

@ -48,10 +48,11 @@
#include "base/io/log/Log.h"
#include "base/kernel/interfaces/IClientListener.h"
#include "base/net/dns/Dns.h"
#include "base/net/dns/DnsRecords.h"
#include "base/net/stratum/Socks5.h"
#include "base/net/tools/NetBuffer.h"
#include "base/tools/Cvt.h"
#include "base/tools/Chrono.h"
#include "base/tools/Cvt.h"
#include "net/JobResult.h"
@ -86,13 +87,11 @@ xmrig::Client::Client(int id, const char *agent, IClientListener *listener) :
{
m_reader.setListener(this);
m_key = m_storage.add(this);
m_dns = new Dns(this);
}
xmrig::Client::~Client()
{
delete m_dns;
delete m_socket;
}
@ -295,8 +294,10 @@ void xmrig::Client::tick(uint64_t now)
}
void xmrig::Client::onResolved(const DnsRecords &records, int status)
void xmrig::Client::onResolved(const DnsRecords &records, int status, const char *error)
{
m_dns.reset();
assert(m_listener != nullptr);
if (!m_listener) {
return reconnect();
@ -304,7 +305,7 @@ void xmrig::Client::onResolved(const DnsRecords &records, int status)
if (status < 0 && records.isEmpty()) {
if (!isQuiet()) {
LOG_ERR("%s " RED("DNS error: ") RED_BOLD("\"%s\""), tag(), uv_strerror(status));
LOG_ERR("%s " RED("DNS error: ") RED_BOLD("\"%s\""), tag(), error);
}
return reconnect();
@ -524,13 +525,7 @@ int xmrig::Client::resolve(const String &host)
m_failures = 0;
}
if (!m_dns->resolve(host)) {
if (!isQuiet()) {
LOG_ERR("%s " RED("getaddrinfo error: ") RED_BOLD("\"%s\""), tag(), uv_strerror(m_dns->status()));
}
return 1;
}
m_dns = Dns::resolve(host, this);
return 0;
}

View file

@ -50,7 +50,7 @@ using BIO = struct bio_st;
namespace xmrig {
class Dns;
class DnsRequest;
class IClientListener;
class JobResult;
@ -80,7 +80,7 @@ protected:
void deleteLater() override;
void tick(uint64_t now) override;
void onResolved(const DnsRecords &records, int status) override;
void onResolved(const DnsRecords &records, int status, const char *error) override;
inline bool hasExtension(Extension extension) const noexcept override { return m_extensions.test(extension); }
inline const char *mode() const override { return "pool"; }
@ -132,10 +132,10 @@ private:
static inline Client *getClient(void *data) { return m_storage.get(data); }
const char *m_agent;
Dns *m_dns;
LineReader m_reader;
Socks5 *m_socks5 = nullptr;
std::bitset<EXT_MAX> m_extensions;
std::shared_ptr<DnsRequest> m_dns;
std::vector<char> m_sendBuf;
String m_rpcId;
Tls *m_tls = nullptr;

View file

@ -27,6 +27,7 @@
#include "base/io/log/Tags.h"
#include "base/kernel/interfaces/IClientListener.h"
#include "base/net/dns/Dns.h"
#include "base/net/dns/DnsRecords.h"
#include "base/net/http/Fetch.h"
#include "base/net/http/HttpData.h"
#include "base/net/http/HttpListener.h"
@ -185,13 +186,15 @@ void xmrig::BenchClient::onHttpData(const HttpData &data)
}
void xmrig::BenchClient::onResolved(const DnsRecords &records, int status)
void xmrig::BenchClient::onResolved(const DnsRecords &records, int status, const char *error)
{
# ifdef XMRIG_FEATURE_HTTP
assert(!m_httpListener);
m_dns.reset();
if (status < 0) {
return setError(uv_strerror(status), "DNS error");
return setError(error, "DNS error");
}
m_ip = records.get().ip();
@ -307,11 +310,7 @@ void xmrig::BenchClient::onGetReply(const rapidjson::Value &value)
void xmrig::BenchClient::resolve()
{
m_dns = std::make_shared<Dns>(this);
if (!m_dns->resolve(BenchConfig::kApiHost)) {
setError(uv_strerror(m_dns->status()), "getaddrinfo error");
}
m_dns = Dns::resolve(BenchConfig::kApiHost, this);
}

View file

@ -70,7 +70,7 @@ protected:
void onBenchDone(uint64_t result, uint64_t diff, uint64_t ts) override;
void onBenchReady(uint64_t ts, uint32_t threads, const IBackend *backend) override;
void onHttpData(const HttpData &data) override;
void onResolved(const DnsRecords &records, int status) override;
void onResolved(const DnsRecords &records, int status, const char *error) override;
private:
enum Mode : uint32_t {
@ -110,7 +110,7 @@ private:
Pool m_pool;
Request m_request = NO_REQUEST;
std::shared_ptr<BenchConfig> m_benchmark;
std::shared_ptr<Dns> m_dns;
std::shared_ptr<DnsRequest> m_dns;
std::shared_ptr<IHttpListener> m_httpListener;
String m_ip;
String m_token;