- add sources.
[platform/framework/web/crosswalk.git] / src / net / dns / dns_config_service_posix.h
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 #include <sys/types.h>
9 #include <netinet/in.h>
10 #include <resolv.h>
11
12 #include "base/compiler_specific.h"
13 #include "net/base/net_export.h"
14 #include "net/dns/dns_config_service.h"
15
16 namespace net {
17
18 // Use DnsConfigService::CreateSystemService to use it outside of tests.
19 namespace internal {
20
21 class NET_EXPORT_PRIVATE DnsConfigServicePosix : public DnsConfigService {
22  public:
23   DnsConfigServicePosix();
24   virtual ~DnsConfigServicePosix();
25
26  protected:
27   // DnsConfigService:
28   virtual void ReadNow() OVERRIDE;
29   virtual bool StartWatching() OVERRIDE;
30
31  private:
32   class Watcher;
33   class ConfigReader;
34   class HostsReader;
35
36   void OnConfigChanged(bool succeeded);
37   void OnHostsChanged(bool succeeded);
38
39   scoped_ptr<Watcher> watcher_;
40   scoped_refptr<ConfigReader> config_reader_;
41   scoped_refptr<HostsReader> hosts_reader_;
42
43   DISALLOW_COPY_AND_ASSIGN(DnsConfigServicePosix);
44 };
45
46 enum ConfigParsePosixResult {
47   CONFIG_PARSE_POSIX_OK = 0,
48   CONFIG_PARSE_POSIX_RES_INIT_FAILED,
49   CONFIG_PARSE_POSIX_RES_INIT_UNSET,
50   CONFIG_PARSE_POSIX_BAD_ADDRESS,
51   CONFIG_PARSE_POSIX_BAD_EXT_STRUCT,
52   CONFIG_PARSE_POSIX_NULL_ADDRESS,
53   CONFIG_PARSE_POSIX_NO_NAMESERVERS,
54   CONFIG_PARSE_POSIX_MISSING_OPTIONS,
55   CONFIG_PARSE_POSIX_UNHANDLED_OPTIONS,
56   CONFIG_PARSE_POSIX_NO_DNSINFO,
57   CONFIG_PARSE_POSIX_MAX  // Bounding values for enumeration.
58 };
59
60 // Fills in |dns_config| from |res|.
61 ConfigParsePosixResult NET_EXPORT_PRIVATE ConvertResStateToDnsConfig(
62     const struct __res_state& res, DnsConfig* dns_config);
63
64 }  // namespace internal
65
66 }  // namespace net
67
68 #endif  // NET_DNS_DNS_CONFIG_SERVICE_POSIX_H_