Home | History | Annotate | Download | only in dns
      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