ipfs-chromium
Loading...
Searching...
No Matches
ares_dns_txt_lookup.h
1#ifndef IPFS_CHROMIUM_ARES_DNS_TXT_LOOKUP_H
2#define IPFS_CHROMIUM_ARES_DNS_TXT_LOOKUP_H
3
4#include "dns_txt_lookup.h"
5
6#include <map>
7#include <stdexcept>
8
9#if __has_include(<ares.h>)
10#include <ares.h>
11#define HAS_ARES 1
12
13namespace boost::asio {
14class io_context;
15}
16namespace ipfs::ctx {
17class AresDnsTxtLookup : public DnsTxtLookup {
18 struct DnsCbs {
19 DnsTextResultsCallback r;
20 DnsTextCompleteCallback c;
21 };
22 std::map<std::string, std::vector<DnsCbs>> pending_dns_;
23 boost::asio::io_context* io_;
24 ares_channel_t* ares_channel_ = nullptr;
25 void CAresProcess();
26
27 public:
28 AresDnsTxtLookup(boost::asio::io_context* io = nullptr);
29 ~AresDnsTxtLookup() noexcept override;
30 void SendDnsTextRequest(std::string,
31 DnsTextResultsCallback,
32 DnsTextCompleteCallback) override;
33 void DnsResults(std::string&, ares_txt_reply const*);
34};
35} // namespace ipfs::ctx
36
37#endif // HAS_ARES
38#endif // IPFS_CHROMIUM_ARES_DNS_TXT_LOOKUP_H