summaryrefslogtreecommitdiffstats
path: root/net/base/mapped_host_resolver.cc
diff options
context:
space:
mode:
authorwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-12 22:47:14 +0000
committerwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-12 22:47:14 +0000
commitb6a50183e21e21207f2dff4953d19aa5be62d166 (patch)
tree9a937074af7bb0c5ff9c1987f68a4055bb54762c /net/base/mapped_host_resolver.cc
parent6402aaec3c045969b60ef7b782ce25992d07a70f (diff)
downloadchromium_src-b6a50183e21e21207f2dff4953d19aa5be62d166.zip
chromium_src-b6a50183e21e21207f2dff4953d19aa5be62d166.tar.gz
chromium_src-b6a50183e21e21207f2dff4953d19aa5be62d166.tar.bz2
Add --host-rules support.
The format for --host-rules is identical to --host-resolver-rules. The difference is that --host-rules affects the endpoint of the HttpNetworkTransaction, not just the host resolver. So, this means the host passed to the host resolver and the TCP connect(), the tunnel CONNECT, and the SOCKS connect will be different. Review URL: http://codereview.chromium.org/2057007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47083 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/mapped_host_resolver.cc')
-rw-r--r--net/base/mapped_host_resolver.cc75
1 files changed, 6 insertions, 69 deletions
diff --git a/net/base/mapped_host_resolver.cc b/net/base/mapped_host_resolver.cc
index fdd9de7..b401917 100644
--- a/net/base/mapped_host_resolver.cc
+++ b/net/base/mapped_host_resolver.cc
@@ -6,6 +6,7 @@
#include "base/string_tokenizer.h"
#include "base/string_util.h"
+#include "net/base/host_port_pair.h"
#include "net/base/net_util.h"
namespace net {
@@ -21,7 +22,11 @@ int MappedHostResolver::Resolve(const RequestInfo& info,
const BoundNetLog& net_log) {
// Modify the request before forwarding it to |impl_|.
RequestInfo modified_info = info;
- RewriteRequest(&modified_info);
+ HostPortPair host_port(info.hostname(), info.port());
+ if (rules_.RewriteHost(&host_port)) {
+ modified_info.set_hostname(host_port.host);
+ modified_info.set_port(host_port.port);
+ }
return impl_->Resolve(modified_info, addresses, callback, out_req, net_log);
}
@@ -44,72 +49,4 @@ HostResolverImpl* MappedHostResolver::GetAsHostResolverImpl() {
MappedHostResolver::~MappedHostResolver() {
}
-bool MappedHostResolver::RewriteRequest(RequestInfo* info) const {
- // Check if the hostname was excluded.
- for (ExclusionRuleList::const_iterator it = exclusion_rules_.begin();
- it != exclusion_rules_.end(); ++it) {
- const ExclusionRule& rule = *it;
- if (MatchPatternASCII(info->hostname(), rule.hostname_pattern))
- return false;
- }
-
- // Check if the hostname was remapped.
- for (MapRuleList::const_iterator it = map_rules_.begin();
- it != map_rules_.end(); ++it) {
- const MapRule& rule = *it;
-
- if (!MatchPatternASCII(info->hostname(), rule.hostname_pattern))
- continue; // This rule doesn't apply.
-
- info->set_hostname(rule.replacement_hostname);
- if (rule.replacement_port != -1)
- info->set_port(rule.replacement_port);
- return true;
- }
-
- return false;
-}
-
-bool MappedHostResolver::AddRuleFromString(const std::string& rule_string) {
- std::string trimmed;
- TrimWhitespaceASCII(rule_string, TRIM_ALL, &trimmed);
- std::vector<std::string> parts;
- SplitString(trimmed, ' ', &parts);
-
- // Test for EXCLUSION rule.
- if (parts.size() == 2 && LowerCaseEqualsASCII(parts[0], "exclude")) {
- ExclusionRule rule;
- rule.hostname_pattern = StringToLowerASCII(parts[1]);
- exclusion_rules_.push_back(rule);
- return true;
- }
-
- // Test for MAP rule.
- if (parts.size() == 3 && LowerCaseEqualsASCII(parts[0], "map")) {
- MapRule rule;
- rule.hostname_pattern = StringToLowerASCII(parts[1]);
-
- if (!ParseHostAndPort(parts[2], &rule.replacement_hostname,
- &rule.replacement_port)) {
- return false; // Failed parsing the hostname/port.
- }
-
- map_rules_.push_back(rule);
- return true;
- }
-
- return false;
-}
-
-void MappedHostResolver::SetRulesFromString(const std::string& rules_string) {
- exclusion_rules_.clear();
- map_rules_.clear();
-
- StringTokenizer rules(rules_string, ",");
- while (rules.GetNext()) {
- bool ok = AddRuleFromString(rules.token());
- LOG_IF(ERROR, !ok) << "Failed parsing rule: " << rules.token();
- }
-}
-
} // namespace net