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

@ -20,48 +20,28 @@
#define XMRIG_DNS_H
#include <vector>
#include <uv.h>
#include "base/tools/String.h"
#include "base/net/dns/DnsRecords.h"
#include "base/net/tools/Storage.h"
#include "base/tools/Object.h"
#include <map>
#include <memory>
namespace xmrig {
class DnsRequest;
class IDnsBackend;
class IDnsListener;
class Dns
{
public:
XMRIG_DISABLE_COPY_MOVE_DEFAULT(Dns)
Dns(IDnsListener *listener);
~Dns();
inline const String &host() const { return m_host; }
inline int status() const { return m_status; }
bool resolve(const String &host);
static std::shared_ptr<DnsRequest> resolve(const String &host, IDnsListener *listener, uint64_t ttl = 60000);
private:
void onResolved(int status, addrinfo *res);
static void onResolved(uv_getaddrinfo_t *req, int status, addrinfo *res);
addrinfo m_hints{};
DnsRecords m_records;
IDnsListener *m_listener;
int m_status = 0;
String m_host;
uintptr_t m_key;
uv_getaddrinfo_t *m_resolver = nullptr;
static Storage<Dns> m_storage;
static std::map<String, std::shared_ptr<IDnsBackend> > m_backends;
};