OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chromeos/network/shill_property_util.h" | 5 #include "chromeos/network/shill_property_util.h" |
6 | 6 |
7 #include "base/i18n/icu_encoding_detection.h" | 7 #include "base/i18n/icu_encoding_detection.h" |
8 #include "base/i18n/icu_string_conversions.h" | 8 #include "base/i18n/icu_string_conversions.h" |
9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 // Ethernet and EthernetEAP don't have any additional identifying | 212 // Ethernet and EthernetEAP don't have any additional identifying |
213 // properties. | 213 // properties. |
214 } else { | 214 } else { |
215 NOTREACHED() << "Unsupported network type " << type; | 215 NOTREACHED() << "Unsupported network type " << type; |
216 } | 216 } |
217 return true; | 217 return true; |
218 } | 218 } |
219 | 219 |
220 } // namespace shill_property_util | 220 } // namespace shill_property_util |
221 | 221 |
| 222 namespace { |
| 223 |
| 224 const char kPatternDefault[] = "PatternDefault"; |
| 225 const char kPatternEthernet[] = "PatternEthernet"; |
| 226 const char kPatternWireless[] = "PatternWireless"; |
| 227 const char kPatternMobile[] = "PatternMobile"; |
| 228 const char kPatternNonVirtual[] = "PatternNonVirtual"; |
| 229 |
| 230 enum NetworkTypeBitFlag { |
| 231 kNetworkTypeNone = 0, |
| 232 kNetworkTypeEthernet = 1 << 0, |
| 233 kNetworkTypeWifi = 1 << 1, |
| 234 kNetworkTypeWimax = 1 << 2, |
| 235 kNetworkTypeCellular = 1 << 3, |
| 236 kNetworkTypeVPN = 1 << 4, |
| 237 kNetworkTypeEthernetEap = 1 << 5 |
| 238 }; |
| 239 |
| 240 struct ShillToBitFlagEntry { |
| 241 const char* shill_network_type; |
| 242 NetworkTypeBitFlag bit_flag; |
| 243 } shill_type_to_flag[] = { |
| 244 { flimflam::kTypeEthernet, kNetworkTypeEthernet }, |
| 245 { shill::kTypeEthernetEap, kNetworkTypeEthernetEap }, |
| 246 { flimflam::kTypeWifi, kNetworkTypeWifi }, |
| 247 { flimflam::kTypeWimax, kNetworkTypeWimax }, |
| 248 { flimflam::kTypeCellular, kNetworkTypeCellular }, |
| 249 { flimflam::kTypeVPN, kNetworkTypeVPN } |
| 250 }; |
| 251 |
| 252 NetworkTypeBitFlag ShillNetworkTypeToFlag(const std::string& shill_type) { |
| 253 for (size_t i = 0; i < arraysize(shill_type_to_flag); ++i) { |
| 254 if (shill_type_to_flag[i].shill_network_type == shill_type) |
| 255 return shill_type_to_flag[i].bit_flag; |
| 256 } |
| 257 NOTREACHED(); |
| 258 return kNetworkTypeNone; |
| 259 } |
| 260 |
| 261 std::string FlagToShillNetworkType(const NetworkTypeBitFlag flag) { |
| 262 for (size_t i = 0; i < arraysize(shill_type_to_flag); ++i) { |
| 263 if (shill_type_to_flag[i].bit_flag == flag) |
| 264 return shill_type_to_flag[i].shill_network_type; |
| 265 } |
| 266 NOTREACHED(); |
| 267 return std::string(); |
| 268 } |
| 269 |
| 270 } // namespace |
| 271 |
| 272 // static |
| 273 NetworkTypePattern NetworkTypePattern::Default() { |
| 274 return NetworkTypePattern(~0); |
| 275 } |
| 276 |
| 277 // static |
| 278 NetworkTypePattern NetworkTypePattern::Wireless() { |
| 279 return NetworkTypePattern(kNetworkTypeWifi | kNetworkTypeWimax | |
| 280 kNetworkTypeCellular); |
| 281 } |
| 282 |
| 283 // static |
| 284 NetworkTypePattern NetworkTypePattern::Mobile() { |
| 285 return NetworkTypePattern(kNetworkTypeCellular | kNetworkTypeWimax); |
| 286 } |
| 287 |
| 288 // static |
| 289 NetworkTypePattern NetworkTypePattern::NonVirtual() { |
| 290 return NetworkTypePattern(~kNetworkTypeVPN); |
| 291 } |
| 292 |
| 293 // static |
| 294 NetworkTypePattern NetworkTypePattern::Ethernet() { |
| 295 return NetworkTypePattern(kNetworkTypeEthernet | kNetworkTypeEthernetEap); |
| 296 } |
| 297 |
| 298 // static |
| 299 NetworkTypePattern NetworkTypePattern::WiFi() { |
| 300 return NetworkTypePattern(kNetworkTypeWifi); |
| 301 } |
| 302 |
| 303 // static |
| 304 NetworkTypePattern NetworkTypePattern::Cellular() { |
| 305 return NetworkTypePattern(kNetworkTypeCellular); |
| 306 } |
| 307 |
| 308 // static |
| 309 NetworkTypePattern NetworkTypePattern::VPN() { |
| 310 return NetworkTypePattern(kNetworkTypeVPN); |
| 311 } |
| 312 |
| 313 // static |
| 314 NetworkTypePattern NetworkTypePattern::Wimax() { |
| 315 return NetworkTypePattern(kNetworkTypeWimax); |
| 316 } |
| 317 |
| 318 // static |
| 319 NetworkTypePattern NetworkTypePattern::Primitive( |
| 320 const std::string& shill_network_type) { |
| 321 return NetworkTypePattern(ShillNetworkTypeToFlag(shill_network_type)); |
| 322 } |
| 323 |
| 324 bool NetworkTypePattern::Equals(const NetworkTypePattern& other) const { |
| 325 return pattern_ == other.pattern_; |
| 326 } |
| 327 |
| 328 bool NetworkTypePattern::MatchesType( |
| 329 const std::string& shill_network_type) const { |
| 330 return MatchesPattern(Primitive(shill_network_type)); |
| 331 } |
| 332 |
| 333 bool NetworkTypePattern::MatchesPattern( |
| 334 const NetworkTypePattern& other_pattern) const { |
| 335 if (Equals(other_pattern)) |
| 336 return true; |
| 337 |
| 338 return pattern_ & other_pattern.pattern_; |
| 339 } |
| 340 |
| 341 std::string NetworkTypePattern::ToDebugString() const { |
| 342 if (Equals(Default())) |
| 343 return kPatternDefault; |
| 344 if (Equals(Ethernet())) |
| 345 return kPatternEthernet; |
| 346 if (Equals(Wireless())) |
| 347 return kPatternWireless; |
| 348 if (Equals(Mobile())) |
| 349 return kPatternMobile; |
| 350 if (Equals(NonVirtual())) |
| 351 return kPatternNonVirtual; |
| 352 |
| 353 std::string str; |
| 354 for (size_t i = 0; i < arraysize(shill_type_to_flag); ++i) { |
| 355 if (!(pattern_ & shill_type_to_flag[i].bit_flag)) |
| 356 continue; |
| 357 if (!str.empty()) |
| 358 str += "|"; |
| 359 str += shill_type_to_flag[i].shill_network_type; |
| 360 } |
| 361 return str; |
| 362 } |
| 363 |
| 364 NetworkTypePattern::NetworkTypePattern(int pattern) : pattern_(pattern) {} |
| 365 |
222 } // namespace chromeos | 366 } // namespace chromeos |
OLD | NEW |