OLD | NEW |
| (Empty) |
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_BASE_MAPPED_HOST_RESOLVER_H_ | |
6 #define NET_BASE_MAPPED_HOST_RESOLVER_H_ | |
7 | |
8 #include <string> | |
9 | |
10 #include "base/memory/scoped_ptr.h" | |
11 #include "net/base/host_mapping_rules.h" | |
12 #include "net/base/host_resolver.h" | |
13 #include "net/base/net_export.h" | |
14 | |
15 namespace net { | |
16 | |
17 // This class wraps an existing HostResolver instance, but modifies the | |
18 // request before passing it off to |impl|. This is different from | |
19 // MockHostResolver which does the remapping at the HostResolverProc | |
20 // layer, so it is able to preserve the effectiveness of the cache. | |
21 class NET_EXPORT MappedHostResolver : public HostResolver { | |
22 public: | |
23 // Creates a MappedHostResolver that forwards all of its requests through | |
24 // |impl|. | |
25 explicit MappedHostResolver(scoped_ptr<HostResolver> impl); | |
26 virtual ~MappedHostResolver(); | |
27 | |
28 // Adds a rule to this mapper. The format of the rule can be one of: | |
29 // | |
30 // "MAP" <hostname_pattern> <replacement_host> [":" <replacement_port>] | |
31 // "EXCLUDE" <hostname_pattern> | |
32 // | |
33 // The <replacement_host> can be either a hostname, or an IP address literal, | |
34 // or "~NOTFOUND". If it is "~NOTFOUND" then all matched hostnames will fail | |
35 // to be resolved with ERR_NAME_NOT_RESOLVED. | |
36 // | |
37 // Returns true if the rule was successfully parsed and added. | |
38 bool AddRuleFromString(const std::string& rule_string) { | |
39 return rules_.AddRuleFromString(rule_string); | |
40 } | |
41 | |
42 // Takes a comma separated list of rules, and assigns them to this resolver. | |
43 void SetRulesFromString(const std::string& rules_string) { | |
44 rules_.SetRulesFromString(rules_string); | |
45 } | |
46 | |
47 // HostResolver methods: | |
48 virtual int Resolve(const RequestInfo& info, | |
49 AddressList* addresses, | |
50 const CompletionCallback& callback, | |
51 RequestHandle* out_req, | |
52 const BoundNetLog& net_log) OVERRIDE; | |
53 virtual int ResolveFromCache(const RequestInfo& info, | |
54 AddressList* addresses, | |
55 const BoundNetLog& net_log) OVERRIDE; | |
56 virtual void CancelRequest(RequestHandle req) OVERRIDE; | |
57 virtual void ProbeIPv6Support() OVERRIDE; | |
58 virtual HostCache* GetHostCache() OVERRIDE; | |
59 | |
60 private: | |
61 // Modify the request |info| according to |rules_|. Returns either OK or | |
62 // the network error code that the hostname's resolution mapped to. | |
63 int ApplyRules(RequestInfo* info) const; | |
64 | |
65 scoped_ptr<HostResolver> impl_; | |
66 | |
67 HostMappingRules rules_; | |
68 }; | |
69 | |
70 } // namespace net | |
71 | |
72 #endif // NET_BASE_MAPPED_HOST_RESOLVER_H_ | |
OLD | NEW |