• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef NET_DNS_DNS_CONFIG_SERVICE_POSIX_H_
6 #define NET_DNS_DNS_CONFIG_SERVICE_POSIX_H_
7 
8 #if !defined(OS_ANDROID)
9 #include <sys/types.h>
10 #include <netinet/in.h>
11 #include <resolv.h>
12 #endif
13 
14 #include "base/compiler_specific.h"
15 #include "net/base/net_export.h"
16 #include "net/dns/dns_config_service.h"
17 
18 namespace net {
19 
20 // Use DnsConfigService::CreateSystemService to use it outside of tests.
21 namespace internal {
22 
23 class NET_EXPORT_PRIVATE DnsConfigServicePosix : public DnsConfigService {
24  public:
25   DnsConfigServicePosix();
26   virtual ~DnsConfigServicePosix();
27 
28  protected:
29   // DnsConfigService:
30   virtual void ReadNow() OVERRIDE;
31   virtual bool StartWatching() OVERRIDE;
32 
33  private:
34   class Watcher;
35   class ConfigReader;
36   class HostsReader;
37 
38   void OnConfigChanged(bool succeeded);
39   void OnHostsChanged(bool succeeded);
40 
41   scoped_ptr<Watcher> watcher_;
42   scoped_refptr<ConfigReader> config_reader_;
43   scoped_refptr<HostsReader> hosts_reader_;
44 
45   DISALLOW_COPY_AND_ASSIGN(DnsConfigServicePosix);
46 };
47 
48 enum ConfigParsePosixResult {
49   CONFIG_PARSE_POSIX_OK = 0,
50   CONFIG_PARSE_POSIX_RES_INIT_FAILED,
51   CONFIG_PARSE_POSIX_RES_INIT_UNSET,
52   CONFIG_PARSE_POSIX_BAD_ADDRESS,
53   CONFIG_PARSE_POSIX_BAD_EXT_STRUCT,
54   CONFIG_PARSE_POSIX_NULL_ADDRESS,
55   CONFIG_PARSE_POSIX_NO_NAMESERVERS,
56   CONFIG_PARSE_POSIX_MISSING_OPTIONS,
57   CONFIG_PARSE_POSIX_UNHANDLED_OPTIONS,
58   CONFIG_PARSE_POSIX_NO_DNSINFO,
59   CONFIG_PARSE_POSIX_MAX  // Bounding values for enumeration.
60 };
61 
62 #if !defined(OS_ANDROID)
63 // Fills in |dns_config| from |res|.
64 ConfigParsePosixResult NET_EXPORT_PRIVATE ConvertResStateToDnsConfig(
65     const struct __res_state& res, DnsConfig* dns_config);
66 #endif
67 
68 }  // namespace internal
69 
70 }  // namespace net
71 
72 #endif  // NET_DNS_DNS_CONFIG_SERVICE_POSIX_H_
73