Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: chromeos/network/shill_property_util.cc

Issue 23712002: Cleanup network type matching. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added unit tests and rebased. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698