Home | History | Annotate | Download | only in base
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef NET_BASE_HOST_MAPPING_RULES_H_
      6 #define NET_BASE_HOST_MAPPING_RULES_H_
      7 #pragma once
      8 
      9 #include <string>
     10 #include <vector>
     11 #include "base/basictypes.h"
     12 
     13 namespace net {
     14 
     15 class HostPortPair;
     16 
     17 class HostMappingRules {
     18  public:
     19   HostMappingRules();
     20   ~HostMappingRules();
     21 
     22   // Modifies |*host_port| based on the current rules. Returns true if the
     23   // RequestInfo was modified, false otherwise.
     24   bool RewriteHost(HostPortPair* host_port) const;
     25 
     26   // Adds a rule to this mapper. The format of the rule can be one of:
     27   //
     28   //   "MAP" <hostname_pattern> <replacement_host> [":" <replacement_port>]
     29   //   "EXCLUDE" <hostname_pattern>
     30   //
     31   // The <replacement_host> can be either a hostname, or an IP address literal.
     32   //
     33   // Returns true if the rule was successfully parsed and added.
     34   bool AddRuleFromString(const std::string& rule_string);
     35 
     36   // Sets the rules from a comma separated list of rules.
     37   void SetRulesFromString(const std::string& rules_string);
     38 
     39  private:
     40   struct MapRule;
     41   struct ExclusionRule;
     42 
     43   typedef std::vector<MapRule> MapRuleList;
     44   typedef std::vector<ExclusionRule> ExclusionRuleList;
     45 
     46   MapRuleList map_rules_;
     47   ExclusionRuleList exclusion_rules_;
     48 
     49   DISALLOW_COPY_AND_ASSIGN(HostMappingRules);
     50 };
     51 
     52 }  // namespace net
     53 
     54 #endif  // NET_BASE_HOST_MAPPING_RULES_H_
     55