1// Copyright 2014 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 CHROMEOS_NETWORK_NETWORK_TYPE_PATTERN_H_ 6#define CHROMEOS_NETWORK_NETWORK_TYPE_PATTERN_H_ 7 8#include <string> 9 10#include "base/macros.h" 11#include "chromeos/chromeos_export.h" 12 13namespace chromeos { 14 15class CHROMEOS_EXPORT NetworkTypePattern { 16 public: 17 // Matches any network. 18 static NetworkTypePattern Default(); 19 20 // Matches wireless (WiFi, cellular, etc.) networks 21 static NetworkTypePattern Wireless(); 22 23 // Matches cellular or wimax networks. 24 static NetworkTypePattern Mobile(); 25 26 // Matches non virtual networks. 27 static NetworkTypePattern NonVirtual(); 28 29 // Matches ethernet networks (with or without EAP). 30 static NetworkTypePattern Ethernet(); 31 32 static NetworkTypePattern WiFi(); 33 static NetworkTypePattern Cellular(); 34 static NetworkTypePattern VPN(); 35 static NetworkTypePattern Wimax(); 36 37 // Matches only networks of exactly the type |shill_network_type|, which must 38 // be one of the types defined in service_constants.h (e.g. 39 // shill::kTypeWifi). 40 // Note: Shill distinguishes Ethernet without EAP from Ethernet with EAP. If 41 // unsure, better use one of the matchers above. 42 static NetworkTypePattern Primitive(const std::string& shill_network_type); 43 44 bool Equals(const NetworkTypePattern& other) const; 45 bool MatchesType(const std::string& shill_network_type) const; 46 47 // Returns true if this pattern matches at least one network type that 48 // |other_pattern| matches (according to MatchesType). Thus MatchesPattern is 49 // symmetric and reflexive but not transitive. 50 // See the unit test for examples. 51 bool MatchesPattern(const NetworkTypePattern& other_pattern) const; 52 53 std::string ToDebugString() const; 54 55 private: 56 explicit NetworkTypePattern(int pattern); 57 58 // The bit array of the matching network types. 59 int pattern_; 60 61 DISALLOW_ASSIGN(NetworkTypePattern); 62}; 63 64} // namespace chromeos 65 66#endif // CHROMEOS_NETWORK_NETWORK_TYPE_PATTERN_H_ 67