1#ifndef DNS_RESPONDER_CLIENT_H
2#define DNS_RESPONDER_CLIENT_H
3
4#include <cutils/sockets.h>
5
6#include <private/android_filesystem_config.h>
7#include <utils/StrongPointer.h>
8
9#include "android/net/INetd.h"
10#include "binder/IServiceManager.h"
11#include "NetdClient.h"
12#include "dns_responder.h"
13#include "resolv_params.h"
14
15class DnsResponderClient {
16public:
17    struct Mapping {
18        std::string host;
19        std::string entry;
20        std::string ip4;
21        std::string ip6;
22    };
23
24    virtual ~DnsResponderClient() = default;
25
26    static void SetupMappings(unsigned num_hosts, const std::vector<std::string>& domains,
27            std::vector<Mapping>* mappings);
28
29    bool SetResolversForNetwork(const std::vector<std::string>& servers,
30            const std::vector<std::string>& domains, const std::vector<int>& params);
31
32    bool SetResolversForNetwork(const std::vector<std::string>& servers,
33            const std::vector<std::string>& searchDomains,
34            const std::string& params);
35
36    bool SetResolversWithTls(const std::vector<std::string>& servers,
37            const std::vector<std::string>& searchDomains,
38            const std::vector<int>& params,
39            const std::string& name,
40            const std::vector<std::string>& fingerprints) {
41        // Pass servers as both network-assigned and TLS servers.  Tests can
42        // determine on which server and by which protocol queries arrived.
43        return SetResolversWithTls(servers, searchDomains, params,
44                                   servers, name, fingerprints);
45    }
46
47    bool SetResolversWithTls(const std::vector<std::string>& servers,
48            const std::vector<std::string>& searchDomains,
49            const std::vector<int>& params,
50            const std::vector<std::string>& tlsServers,
51            const std::string& name,
52            const std::vector<std::string>& fingerprints);
53
54    static void SetupDNSServers(unsigned num_servers, const std::vector<Mapping>& mappings,
55            std::vector<std::unique_ptr<test::DNSResponder>>* dns,
56            std::vector<std::string>* servers);
57
58    static void ShutdownDNSServers(std::vector<std::unique_ptr<test::DNSResponder>>* dns);
59
60    int SetupOemNetwork();
61
62    void TearDownOemNetwork(int oemNetId);
63
64    virtual void SetUp();
65
66    virtual void TearDown();
67
68public:
69    android::sp<android::net::INetd> mNetdSrv = nullptr;
70    int mOemNetId = -1;
71};
72
73#endif  // DNS_RESPONDER_CLIENT_H
74