| Index: net/base/ip_pattern.h
|
| diff --git a/net/base/ip_pattern.h b/net/base/ip_pattern.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..53d56e89eeb25a970914927c8790509b21d66a40
|
| --- /dev/null
|
| +++ b/net/base/ip_pattern.h
|
| @@ -0,0 +1,70 @@
|
| +// Copyright (c) 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef NET_BASE_IP_PATTERN_H_
|
| +#define NET_BASE_IP_PATTERN_H_
|
| +
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/strings/string_piece.h"
|
| +#include "net/base/net_export.h"
|
| +#include "net/base/net_util.h"
|
| +
|
| +namespace net {
|
| +
|
| +// IPPatterns are used to match IP address resolutions for possible augmentation
|
| +// by a MappedIPResolver, which uses IPMappingRules.
|
| +class NET_EXPORT IPPattern {
|
| + public:
|
| + IPPattern();
|
| + ~IPPattern();
|
| +
|
| + // Parse a textual pattern (IP_PATTERN as defined in ip_mapping_rules.h) into
|
| + // |this| and return true if the parsing was successful.
|
| + bool ParsePattern(const std::string& ip_pattern);
|
| + // Test to see if the current pattern in |this| matches the given |address|
|
| + // and return true if it matches.
|
| + bool Match(const IPAddressNumber& address) const;
|
| +
|
| + bool is_ipv4() const { return is_ipv4_; }
|
| +
|
| + private:
|
| + class ComponentPattern;
|
| + typedef std::vector<std::string> Strings;
|
| + typedef std::vector<ComponentPattern*> ComponentPatternList;
|
| +
|
| + // IPv6 addresses have 8 components, while IPv4 addresses have 4 components.
|
| + // ComponentPattern is used to define patterns to match individual components.
|
| + bool ParseComponentPattern(const base::StringPiece& text,
|
| + ComponentPattern* pattern) const;
|
| + // Convert IP component to an int. Assume hex vs decimal for IPV6 vs V4.
|
| + bool ValueTextToInt(const base::StringPiece& input, uint32* output) const;
|
| +
|
| + bool is_ipv4_;
|
| + // The |ip_mask_| indicates, for each component, if this pattern requires an
|
| + // exact match (OCTET in IPv4, or 4 hex digits in IPv6).
|
| + // For each true element there is an entry in |component_values_|, and false
|
| + // means that an entry from our list of ComponentPattern instances must be
|
| + // applied.
|
| + std::vector<bool> ip_mask_;
|
| + // The vector of fixed values that are requried.
|
| + // Other values may be restricted by the component_patterns_;
|
| + // The class invariant is:
|
| + // ip_mask_.size() == component_patterns_.size()
|
| + // + size(our ComponentPattern list)
|
| + std::vector<uint32> component_values_;
|
| + // If only one component position was specified using a range, then this
|
| + // list will only have 1 element (i.e., we only have patterns for each element
|
| + // of ip_mask_ that is false.)
|
| + // We own these elements, and need to destroy them all when we are destroyed.
|
| + ComponentPatternList component_patterns_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(IPPattern);
|
| +};
|
| +
|
| +} // namespace net
|
| +
|
| +#endif // NET_BASE_IP_PATTERN_H_
|
|
|