OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/base/host_resolver_impl.h" | 5 #include "net/base/host_resolver_impl.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <Winsock2.h> | 8 #include <Winsock2.h> |
9 #elif defined(OS_POSIX) | 9 #elif defined(OS_POSIX) |
10 #include <netdb.h> | 10 #include <netdb.h> |
(...skipping 736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
747 if (cur_completing_job_) | 747 if (cur_completing_job_) |
748 cur_completing_job_->Cancel(); | 748 cur_completing_job_->Cancel(); |
749 | 749 |
750 NetworkChangeNotifier::RemoveObserver(this); | 750 NetworkChangeNotifier::RemoveObserver(this); |
751 | 751 |
752 // Delete the job pools. | 752 // Delete the job pools. |
753 for (size_t i = 0u; i < arraysize(job_pools_); ++i) | 753 for (size_t i = 0u; i < arraysize(job_pools_); ++i) |
754 delete job_pools_[i]; | 754 delete job_pools_[i]; |
755 } | 755 } |
756 | 756 |
757 // TODO(eroman): Don't create cache entries for hostnames which are simply IP | |
758 // address literals. | |
759 int HostResolverImpl::Resolve(const RequestInfo& info, | 757 int HostResolverImpl::Resolve(const RequestInfo& info, |
760 AddressList* addresses, | 758 AddressList* addresses, |
761 CompletionCallback* callback, | 759 CompletionCallback* callback, |
762 RequestHandle* out_req, | 760 RequestHandle* out_req, |
763 const BoundNetLog& net_log) { | 761 const BoundNetLog& net_log) { |
764 DCHECK(CalledOnValidThread()); | 762 DCHECK(CalledOnValidThread()); |
765 | 763 |
766 if (shutdown_) | 764 if (shutdown_) |
767 return ERR_UNEXPECTED; | 765 return ERR_UNEXPECTED; |
768 | 766 |
769 // Choose a unique ID number for observers to see. | 767 // Choose a unique ID number for observers to see. |
770 int request_id = next_request_id_++; | 768 int request_id = next_request_id_++; |
771 | 769 |
772 // Update the net log and notify registered observers. | 770 // Update the net log and notify registered observers. |
773 OnStartRequest(net_log, request_id, info); | 771 OnStartRequest(net_log, request_id, info); |
774 | 772 |
| 773 // Check for IP literal. |
| 774 IPAddressNumber ip_number; |
| 775 if (ParseIPLiteralToNumber(info.hostname(), &ip_number)) { |
| 776 DCHECK_EQ((info.host_resolver_flags() & |
| 777 ~(HOST_RESOLVER_CANONNAME | HOST_RESOLVER_LOOPBACK_ONLY)), 0) |
| 778 << " Unhandled flag"; |
| 779 AddressList result(ip_number, info.port(), |
| 780 (info.host_resolver_flags() & HOST_RESOLVER_CANONNAME)); |
| 781 |
| 782 *addresses = result; |
| 783 // Update the net log and notify registered observers. |
| 784 OnFinishRequest(net_log, request_id, info, OK, |
| 785 0, /* os_error (unknown since from cache) */ |
| 786 false /* was_from_cache */); |
| 787 return OK; |
| 788 } |
| 789 |
775 // Build a key that identifies the request in the cache and in the | 790 // Build a key that identifies the request in the cache and in the |
776 // outstanding jobs map. | 791 // outstanding jobs map. |
777 Key key = GetEffectiveKeyForRequest(info); | 792 Key key = GetEffectiveKeyForRequest(info); |
778 | 793 |
779 // If we have an unexpired cache entry, use it. | 794 // If we have an unexpired cache entry, use it. |
780 if (info.allow_cached_response() && cache_.get()) { | 795 if (info.allow_cached_response() && cache_.get()) { |
781 const HostCache::Entry* cache_entry = cache_->Lookup( | 796 const HostCache::Entry* cache_entry = cache_->Lookup( |
782 key, base::TimeTicks::Now()); | 797 key, base::TimeTicks::Now()); |
783 if (cache_entry) { | 798 if (cache_entry) { |
784 int net_error = cache_entry->error; | 799 int net_error = cache_entry->error; |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1168 if (r == req) | 1183 if (r == req) |
1169 return error; | 1184 return error; |
1170 | 1185 |
1171 r->OnComplete(error, AddressList()); | 1186 r->OnComplete(error, AddressList()); |
1172 } | 1187 } |
1173 | 1188 |
1174 return ERR_IO_PENDING; | 1189 return ERR_IO_PENDING; |
1175 } | 1190 } |
1176 | 1191 |
1177 } // namespace net | 1192 } // namespace net |
OLD | NEW |