Chromium Code Reviews| Index: chromeos/network/shill_property_util.cc |
| diff --git a/chromeos/network/shill_property_util.cc b/chromeos/network/shill_property_util.cc |
| index 9cbd2daed63ca337473f33daca7215bde980a473..6ec3758661fded0074a61ed0e6a959ab07564b14 100644 |
| --- a/chromeos/network/shill_property_util.cc |
| +++ b/chromeos/network/shill_property_util.cc |
| @@ -219,4 +219,149 @@ bool CopyIdentifyingProperties(const base::DictionaryValue& service_properties, |
| } // namespace shill_property_util |
| +namespace { |
| + |
| +const char kPatternDefault[] = "PatternDefault"; |
| +const char kPatternEthernet[] = "PatternEthernet"; |
| +const char kPatternWireless[] = "PatternWireless"; |
| +const char kPatternMobile[] = "PatternMobile"; |
| +const char kPatternNonVirtual[] = "PatternNonVirtual"; |
| + |
| +enum NetworkTypeBitFlag { |
| + kNetworkTypeNone = 0, |
| + kNetworkTypeEthernet = 1 << 0, |
| + kNetworkTypeWifi = 1 << 1, |
| + kNetworkTypeWimax = 1 << 2, |
| + kNetworkTypeBluetooth = 1 << 3, |
|
stevenjb
2013/09/03 16:22:43
We don't handle Bluetooth anywhere in the current
pneubeck (no reviews)
2013/09/04 12:57:29
Done.
|
| + kNetworkTypeCellular = 1 << 4, |
| + kNetworkTypeVPN = 1 << 5, |
| + kNetworkTypeEthernetEap = 1 << 6 |
| +}; |
| + |
| +struct ShillToBitFlagEntry { |
| + const char* shill_network_type; |
| + NetworkTypeBitFlag bit_flag; |
| +} shill_type_to_flag[] = { |
| + { flimflam::kTypeEthernet, kNetworkTypeEthernet }, |
| + { shill::kTypeEthernetEap, kNetworkTypeEthernetEap }, |
| + { flimflam::kTypeWifi, kNetworkTypeWifi }, |
| + { flimflam::kTypeWimax, kNetworkTypeWimax }, |
| + { flimflam::kTypeBluetooth, kNetworkTypeBluetooth }, |
| + { flimflam::kTypeCellular, kNetworkTypeCellular }, |
| + { flimflam::kTypeVPN, kNetworkTypeVPN } |
| +}; |
| + |
| +NetworkTypeBitFlag ShillNetworkTypeToFlag(const std::string& shill_type) { |
| + for (size_t i = 0; i < arraysize(shill_type_to_flag); ++i) { |
| + if (shill_type_to_flag[i].shill_network_type == shill_type) |
| + return shill_type_to_flag[i].bit_flag; |
| + } |
| + NOTREACHED(); |
| + return kNetworkTypeNone; |
| +} |
| + |
| +std::string FlagToShillNetworkType(const NetworkTypeBitFlag flag) { |
| + for (size_t i = 0; i < arraysize(shill_type_to_flag); ++i) { |
| + if (shill_type_to_flag[i].bit_flag == flag) |
| + return shill_type_to_flag[i].shill_network_type; |
| + } |
| + NOTREACHED(); |
| + return std::string(); |
| +} |
| + |
| +} // namespace |
| + |
| +// static |
| +NetworkTypePattern NetworkTypePattern::Default() { |
| + return NetworkTypePattern(~0); |
| +} |
| + |
| +// static |
| +NetworkTypePattern NetworkTypePattern::Wireless() { |
| + return NetworkTypePattern(kNetworkTypeWifi | kNetworkTypeWimax | |
| + kNetworkTypeBluetooth | kNetworkTypeCellular); |
| +} |
| + |
| +// static |
| +NetworkTypePattern NetworkTypePattern::Mobile() { |
| + return NetworkTypePattern(kNetworkTypeCellular | kNetworkTypeWimax); |
| +} |
| + |
| +// static |
| +NetworkTypePattern NetworkTypePattern::NonVirtual() { |
| + return NetworkTypePattern(~kNetworkTypeVPN); |
| +} |
| + |
| +// static |
| +NetworkTypePattern NetworkTypePattern::Ethernet() { |
| + return NetworkTypePattern(kNetworkTypeEthernet | kNetworkTypeEthernetEap); |
| +} |
| + |
| +// static |
| +NetworkTypePattern NetworkTypePattern::WiFi() { |
| + return NetworkTypePattern(kNetworkTypeWifi); |
| +} |
| + |
| +// static |
| +NetworkTypePattern NetworkTypePattern::Cellular() { |
| + return NetworkTypePattern(kNetworkTypeCellular); |
| +} |
| + |
| +// static |
| +NetworkTypePattern NetworkTypePattern::VPN() { |
| + return NetworkTypePattern(kNetworkTypeVPN); |
| +} |
| + |
| +// static |
| +NetworkTypePattern NetworkTypePattern::Wimax() { |
| + return NetworkTypePattern(kNetworkTypeWimax); |
| +} |
| + |
| +// static |
| +NetworkTypePattern NetworkTypePattern::Primitive( |
| + const std::string& shill_network_type) { |
| + return NetworkTypePattern(ShillNetworkTypeToFlag(shill_network_type)); |
| +} |
| + |
| +bool NetworkTypePattern::Equals(const NetworkTypePattern& other) const { |
| + return pattern_ == other.pattern_; |
| +} |
| + |
| +bool NetworkTypePattern::Matches(const std::string& shill_network_type) const { |
| + return ContainsPattern(Primitive(shill_network_type)); |
| +} |
| + |
| +bool NetworkTypePattern::ContainsPattern( |
| + const NetworkTypePattern& subpattern) const { |
| + if (Equals(subpattern)) |
| + return true; |
| + |
| + return (~pattern_ & subpattern.pattern_) == 0; |
|
stevenjb
2013/09/03 16:22:43
I don't think this is the behavior I would expect.
pneubeck (no reviews)
2013/09/04 12:57:29
Done.
|
| +} |
| + |
| +std::string NetworkTypePattern::ToDebugString() const { |
| + if (Equals(Default())) |
| + return kPatternDefault; |
| + if (Equals(Ethernet())) |
| + return kPatternEthernet; |
| + if (Equals(Wireless())) |
| + return kPatternWireless; |
| + if (Equals(Mobile())) |
| + return kPatternMobile; |
| + if (Equals(NonVirtual())) |
| + return kPatternNonVirtual; |
| + |
| + std::string str; |
| + for (size_t i = 0; i < arraysize(shill_type_to_flag); ++i) { |
| + if (!(pattern_ | shill_type_to_flag[i].bit_flag)) |
| + continue; |
| + if (!str.empty()) |
| + str += "|"; |
| + str += shill_type_to_flag[i].shill_network_type; |
| + } |
| + return str; |
| +} |
| + |
| +NetworkTypePattern::NetworkTypePattern(int pattern) : pattern_(pattern) {} |
| + |
| } // namespace chromeos |