| OLD | NEW | 
|    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |    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 |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #include "net/dns/dns_config_service_posix.h" |    5 #include "net/dns/dns_config_service_posix.h" | 
|    6  |    6  | 
|    7 #include <string> |    7 #include <string> | 
|    8  |    8  | 
|    9 #include "base/basictypes.h" |    9 #include "base/basictypes.h" | 
|   10 #include "base/bind.h" |   10 #include "base/bind.h" | 
| (...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  404   for (int i = 0; i < nscount; ++i) { |  404   for (int i = 0; i < nscount; ++i) { | 
|  405     IPEndPoint ipe; |  405     IPEndPoint ipe; | 
|  406     if (!ipe.FromSockAddr( |  406     if (!ipe.FromSockAddr( | 
|  407             reinterpret_cast<const struct sockaddr*>(&addresses[i]), |  407             reinterpret_cast<const struct sockaddr*>(&addresses[i]), | 
|  408             sizeof addresses[i])) { |  408             sizeof addresses[i])) { | 
|  409       return CONFIG_PARSE_POSIX_BAD_ADDRESS; |  409       return CONFIG_PARSE_POSIX_BAD_ADDRESS; | 
|  410     } |  410     } | 
|  411     dns_config->nameservers.push_back(ipe); |  411     dns_config->nameservers.push_back(ipe); | 
|  412   } |  412   } | 
|  413 #elif defined(OS_LINUX) |  413 #elif defined(OS_LINUX) | 
|  414   COMPILE_ASSERT(arraysize(res.nsaddr_list) >= MAXNS && |  414   static_assert(arraysize(res.nsaddr_list) >= MAXNS && | 
|  415                  arraysize(res._u._ext.nsaddrs) >= MAXNS, |  415                     arraysize(res._u._ext.nsaddrs) >= MAXNS, | 
|  416                  incompatible_libresolv_res_state); |  416                 "incompatible libresolv res_state"); | 
|  417   DCHECK_LE(res.nscount, MAXNS); |  417   DCHECK_LE(res.nscount, MAXNS); | 
|  418   // Initially, glibc stores IPv6 in |_ext.nsaddrs| and IPv4 in |nsaddr_list|. |  418   // Initially, glibc stores IPv6 in |_ext.nsaddrs| and IPv4 in |nsaddr_list|. | 
|  419   // In res_send.c:res_nsend, it merges |nsaddr_list| into |nsaddrs|, |  419   // In res_send.c:res_nsend, it merges |nsaddr_list| into |nsaddrs|, | 
|  420   // but we have to combine the two arrays ourselves. |  420   // but we have to combine the two arrays ourselves. | 
|  421   for (int i = 0; i < res.nscount; ++i) { |  421   for (int i = 0; i < res.nscount; ++i) { | 
|  422     IPEndPoint ipe; |  422     IPEndPoint ipe; | 
|  423     const struct sockaddr* addr = NULL; |  423     const struct sockaddr* addr = NULL; | 
|  424     size_t addr_len = 0; |  424     size_t addr_len = 0; | 
|  425     if (res.nsaddr_list[i].sin_family) {  // The indicator used by res_nsend. |  425     if (res.nsaddr_list[i].sin_family) {  // The indicator used by res_nsend. | 
|  426       addr = reinterpret_cast<const struct sockaddr*>(&res.nsaddr_list[i]); |  426       addr = reinterpret_cast<const struct sockaddr*>(&res.nsaddr_list[i]); | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
|  452   for (int i = 0; (i < MAXDNSRCH) && res.dnsrch[i]; ++i) { |  452   for (int i = 0; (i < MAXDNSRCH) && res.dnsrch[i]; ++i) { | 
|  453     dns_config->search.push_back(std::string(res.dnsrch[i])); |  453     dns_config->search.push_back(std::string(res.dnsrch[i])); | 
|  454   } |  454   } | 
|  455  |  455  | 
|  456   dns_config->ndots = res.ndots; |  456   dns_config->ndots = res.ndots; | 
|  457   dns_config->timeout = base::TimeDelta::FromSeconds(res.retrans); |  457   dns_config->timeout = base::TimeDelta::FromSeconds(res.retrans); | 
|  458   dns_config->attempts = res.retry; |  458   dns_config->attempts = res.retry; | 
|  459 #if defined(RES_ROTATE) |  459 #if defined(RES_ROTATE) | 
|  460   dns_config->rotate = res.options & RES_ROTATE; |  460   dns_config->rotate = res.options & RES_ROTATE; | 
|  461 #endif |  461 #endif | 
 |  462 #if defined(RES_USE_EDNS0) | 
|  462   dns_config->edns0 = res.options & RES_USE_EDNS0; |  463   dns_config->edns0 = res.options & RES_USE_EDNS0; | 
 |  464 #endif | 
 |  465 #if !defined(RES_USE_DNSSEC) | 
 |  466   // Some versions of libresolv don't have support for the DO bit. In this | 
 |  467   // case, we proceed without it. | 
 |  468   static const int RES_USE_DNSSEC = 0; | 
 |  469 #endif | 
|  463  |  470  | 
|  464   // The current implementation assumes these options are set. They normally |  471   // The current implementation assumes these options are set. They normally | 
|  465   // cannot be overwritten by /etc/resolv.conf |  472   // cannot be overwritten by /etc/resolv.conf | 
|  466   unsigned kRequiredOptions = RES_RECURSE | RES_DEFNAMES | RES_DNSRCH; |  473   unsigned kRequiredOptions = RES_RECURSE | RES_DEFNAMES | RES_DNSRCH; | 
|  467   if ((res.options & kRequiredOptions) != kRequiredOptions) { |  474   if ((res.options & kRequiredOptions) != kRequiredOptions) { | 
|  468     dns_config->unhandled_options = true; |  475     dns_config->unhandled_options = true; | 
|  469     return CONFIG_PARSE_POSIX_MISSING_OPTIONS; |  476     return CONFIG_PARSE_POSIX_MISSING_OPTIONS; | 
|  470   } |  477   } | 
|  471  |  478  | 
|  472   unsigned kUnhandledOptions = RES_USEVC | RES_IGNTC | RES_USE_DNSSEC; |  479   unsigned kUnhandledOptions = RES_USEVC | RES_IGNTC | RES_USE_DNSSEC; | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
|  490 #endif  // !defined(OS_ANDROID) |  497 #endif  // !defined(OS_ANDROID) | 
|  491  |  498  | 
|  492 }  // namespace internal |  499 }  // namespace internal | 
|  493  |  500  | 
|  494 // static |  501 // static | 
|  495 scoped_ptr<DnsConfigService> DnsConfigService::CreateSystemService() { |  502 scoped_ptr<DnsConfigService> DnsConfigService::CreateSystemService() { | 
|  496   return scoped_ptr<DnsConfigService>(new internal::DnsConfigServicePosix()); |  503   return scoped_ptr<DnsConfigService>(new internal::DnsConfigServicePosix()); | 
|  497 } |  504 } | 
|  498  |  505  | 
|  499 }  // namespace net |  506 }  // namespace net | 
| OLD | NEW |