// Copyright 2011 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_BASE_HOST_MAPPING_RULES_H_ #define NET_BASE_HOST_MAPPING_RULES_H_ #include #include #include "net/base/net_export.h" class GURL; namespace net { class HostPortPair; class NET_EXPORT_PRIVATE HostMappingRules { public: enum class RewriteResult { kRewritten, kNoMatchingRule, kInvalidRewrite, }; HostMappingRules(); HostMappingRules(const HostMappingRules& host_mapping_rules); ~HostMappingRules(); HostMappingRules& operator=(const HostMappingRules& host_mapping_rules); // Modifies `*host_port` based on the current rules. Returns true if // `*host_port` was modified, false otherwise. bool RewriteHost(HostPortPair* host_port) const; // Modifies the host and port of `url` based on current rules. May only be // called for URLs with a host and a scheme that is standard, and if the // scheme does not allow ports, only the host will be rewritten. // // If `url` is rewritten, returns `kRewritten`. If no matching rule is found, // returns `kNoMatchingRule` and `url` is not modified. If a matching rule is // found but it results in an invalid URL, e.g. if the rule maps to // "^NOTFOUND", returns `kInvalidRewrite` and `url` is not modified. RewriteResult RewriteUrl(GURL& url) const; // Adds a rule to this mapper. The format of the rule can be one of: // // "MAP" [":" ] // "EXCLUDE" // // The can be either a hostname, or an IP address literal. // // Returns true if the rule was successfully parsed and added. bool AddRuleFromString(std::string_view rule_string); // Sets the rules from a comma separated list of rules. void SetRulesFromString(std::string_view rules_string); private: struct MapRule; struct ExclusionRule; typedef std::vector MapRuleList; typedef std::vector ExclusionRuleList; MapRuleList map_rules_; ExclusionRuleList exclusion_rules_; }; } // namespace net #endif // NET_BASE_HOST_MAPPING_RULES_H_