| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 #include <string> | 7 #include <string> | 
| 8 | 8 | 
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" | 
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" | 
| 11 #include "base/ref_counted.h" | 11 #include "base/ref_counted.h" | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 66   return info; | 66   return info; | 
| 67 } | 67 } | 
| 68 | 68 | 
| 69 // A variant of WaitingHostResolverProc that pushes each host mapped into a | 69 // A variant of WaitingHostResolverProc that pushes each host mapped into a | 
| 70 // list. | 70 // list. | 
| 71 // (and uses a manual-reset event rather than auto-reset). | 71 // (and uses a manual-reset event rather than auto-reset). | 
| 72 class CapturingHostResolverProc : public HostResolverProc { | 72 class CapturingHostResolverProc : public HostResolverProc { | 
| 73  public: | 73  public: | 
| 74   struct CaptureEntry { | 74   struct CaptureEntry { | 
| 75     CaptureEntry(const std::string& hostname, AddressFamily address_family) | 75     CaptureEntry(const std::string& hostname, AddressFamily address_family) | 
| 76         : hostname(hostname), | 76         : hostname(hostname), address_family(address_family) {} | 
| 77           address_family(address_family) {} |  | 
| 78     std::string hostname; | 77     std::string hostname; | 
| 79     AddressFamily address_family; | 78     AddressFamily address_family; | 
| 80   }; | 79   }; | 
| 81 | 80 | 
| 82   typedef std::vector<CaptureEntry> CaptureList; | 81   typedef std::vector<CaptureEntry> CaptureList; | 
| 83 | 82 | 
| 84   explicit CapturingHostResolverProc(HostResolverProc* previous) | 83   explicit CapturingHostResolverProc(HostResolverProc* previous) | 
| 85       : HostResolverProc(previous), event_(true, false) { | 84       : HostResolverProc(previous), event_(true, false) { | 
| 86   } | 85   } | 
| 87 | 86 | 
| 88   void Signal() { | 87   void Signal() { | 
| 89     event_.Signal(); | 88     event_.Signal(); | 
| 90   } | 89   } | 
| 91 | 90 | 
| 92   virtual int Resolve(const std::string& hostname, | 91   virtual int Resolve(const std::string& hostname, | 
| 93                       AddressFamily address_family, | 92                       AddressFamily address_family, | 
| 94                       HostResolverFlags host_resolver_flags, |  | 
| 95                       AddressList* addrlist) { | 93                       AddressList* addrlist) { | 
| 96     event_.Wait(); | 94     event_.Wait(); | 
| 97     { | 95     { | 
| 98       AutoLock l(lock_); | 96       AutoLock l(lock_); | 
| 99       capture_list_.push_back(CaptureEntry(hostname, address_family)); | 97       capture_list_.push_back(CaptureEntry(hostname, address_family)); | 
| 100     } | 98     } | 
| 101     return ResolveUsingPrevious(hostname, address_family, | 99     return ResolveUsingPrevious(hostname, address_family, addrlist); | 
| 102                                 host_resolver_flags, addrlist); |  | 
| 103   } | 100   } | 
| 104 | 101 | 
| 105   CaptureList GetCaptureList() const { | 102   CaptureList GetCaptureList() const { | 
| 106     CaptureList copy; | 103     CaptureList copy; | 
| 107     { | 104     { | 
| 108       AutoLock l(lock_); | 105       AutoLock l(lock_); | 
| 109       copy = capture_list_; | 106       copy = capture_list_; | 
| 110     } | 107     } | 
| 111     return copy; | 108     return copy; | 
| 112   } | 109   } | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 130 //   x = length of hostname | 127 //   x = length of hostname | 
| 131 //   y = ASCII value of hostname[0] | 128 //   y = ASCII value of hostname[0] | 
| 132 //   z = value of address_family | 129 //   z = value of address_family | 
| 133 // | 130 // | 
| 134 class EchoingHostResolverProc : public HostResolverProc { | 131 class EchoingHostResolverProc : public HostResolverProc { | 
| 135  public: | 132  public: | 
| 136   EchoingHostResolverProc() : HostResolverProc(NULL) {} | 133   EchoingHostResolverProc() : HostResolverProc(NULL) {} | 
| 137 | 134 | 
| 138   virtual int Resolve(const std::string& hostname, | 135   virtual int Resolve(const std::string& hostname, | 
| 139                       AddressFamily address_family, | 136                       AddressFamily address_family, | 
| 140                       HostResolverFlags host_resolver_flags, |  | 
| 141                       AddressList* addrlist) { | 137                       AddressList* addrlist) { | 
| 142     // Encode the request's hostname and address_family in the output address. | 138     // Encode the request's hostname and address_family in the output address. | 
| 143     std::string ip_literal = StringPrintf("192.%d.%d.%d", | 139     std::string ip_literal = StringPrintf("192.%d.%d.%d", | 
| 144         static_cast<int>(hostname.size()), | 140         static_cast<int>(hostname.size()), | 
| 145         static_cast<int>(hostname[0]), | 141         static_cast<int>(hostname[0]), | 
| 146         static_cast<int>(address_family)); | 142         static_cast<int>(address_family)); | 
| 147 | 143 | 
| 148     return SystemHostResolverProc(ip_literal, | 144     return SystemHostResolverProc(ip_literal, | 
| 149                                   ADDRESS_FAMILY_UNSPECIFIED, | 145                                   ADDRESS_FAMILY_UNSPECIFIED, | 
| 150                                   host_resolver_flags, |  | 
| 151                                   addrlist); | 146                                   addrlist); | 
| 152   } | 147   } | 
| 153 }; | 148 }; | 
| 154 | 149 | 
| 155 // Helper that represents a single Resolve() result, used to inspect all the | 150 // Helper that represents a single Resolve() result, used to inspect all the | 
| 156 // resolve results by forwarding them to Delegate. | 151 // resolve results by forwarding them to Delegate. | 
| 157 class ResolveRequest { | 152 class ResolveRequest { | 
| 158  public: | 153  public: | 
| 159   // Delegate interface, for notification when the ResolveRequest completes. | 154   // Delegate interface, for notification when the ResolveRequest completes. | 
| 160   class Delegate { | 155   class Delegate { | 
| (...skipping 1328 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1489   // Addresses take the form: 192.x.y.z | 1484   // Addresses take the form: 192.x.y.z | 
| 1490   //    x = length of hostname | 1485   //    x = length of hostname | 
| 1491   //    y = ASCII value of hostname[0] | 1486   //    y = ASCII value of hostname[0] | 
| 1492   //    z = value of address family | 1487   //    z = value of address family | 
| 1493   EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[0].head())); | 1488   EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[0].head())); | 
| 1494   EXPECT_EQ("192.1.98.2", NetAddressToString(addrlist[1].head())); | 1489   EXPECT_EQ("192.1.98.2", NetAddressToString(addrlist[1].head())); | 
| 1495   EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[2].head())); | 1490   EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[2].head())); | 
| 1496   EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[3].head())); | 1491   EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[3].head())); | 
| 1497 } | 1492 } | 
| 1498 | 1493 | 
| 1499 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. |  | 
| 1500 |  | 
| 1501 }  // namespace | 1494 }  // namespace | 
| 1502 | 1495 | 
| 1503 }  // namespace net | 1496 }  // namespace net | 
| OLD | NEW | 
|---|