blob: 889bab5643473020c67571fb30905cb02a00b8c2 [file] [log] [blame]
Paul Stewart20088d82012-02-16 06:58:55 -08001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Paul Stewartfdd16072011-09-16 12:41:35 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "shill/technology.h"
6
Paul Stewart20088d82012-02-16 06:58:55 -08007#include <set>
Paul Stewartfdd16072011-09-16 12:41:35 -07008#include <string>
Paul Stewart1b253142012-01-26 14:05:52 -08009#include <vector>
Paul Stewartfdd16072011-09-16 12:41:35 -070010
Eric Shienbrood3e20a232012-02-16 11:35:56 -050011#include <base/stl_util.h>
Paul Stewart1b253142012-01-26 14:05:52 -080012#include <base/string_split.h>
Paul Stewartfdd16072011-09-16 12:41:35 -070013#include <chromeos/dbus/service_constants.h>
14
Paul Stewart20088d82012-02-16 06:58:55 -080015#include "shill/error.h"
16
Paul Stewartfdd16072011-09-16 12:41:35 -070017namespace shill {
18
Paul Stewart20088d82012-02-16 06:58:55 -080019using std::set;
Paul Stewartfdd16072011-09-16 12:41:35 -070020using std::string;
Paul Stewart1b253142012-01-26 14:05:52 -080021using std::vector;
Paul Stewartfdd16072011-09-16 12:41:35 -070022
Paul Stewartcba0f7f2012-02-29 16:33:05 -080023const char Technology::kTunnelName[] = "Tunnel";
Paul Stewartfdd16072011-09-16 12:41:35 -070024const char Technology::kUnknownName[] = "Unknown";
25
Gaurav Shah435de2c2011-11-17 19:01:07 -080026// static
Paul Stewart1b253142012-01-26 14:05:52 -080027Technology::Identifier Technology::IdentifierFromName(const string &name) {
Paul Stewartfdd16072011-09-16 12:41:35 -070028 if (name == flimflam::kTypeEthernet) {
29 return kEthernet;
30 } else if (name == flimflam::kTypeWifi) {
31 return kWifi;
32 } else if (name == flimflam::kTypeCellular) {
33 return kCellular;
Darin Petkov33af05c2012-02-28 10:10:30 +010034 } else if (name == flimflam::kTypeVPN) {
35 return kVPN;
Paul Stewartcba0f7f2012-02-29 16:33:05 -080036 } else if (name == kTunnelName) {
37 return kTunnel;
Paul Stewartfdd16072011-09-16 12:41:35 -070038 } else {
39 return kUnknown;
40 }
41}
42
Gaurav Shah435de2c2011-11-17 19:01:07 -080043// static
Paul Stewart1b253142012-01-26 14:05:52 -080044string Technology::NameFromIdentifier(Technology::Identifier id) {
Paul Stewartfdd16072011-09-16 12:41:35 -070045 if (id == kEthernet) {
46 return flimflam::kTypeEthernet;
47 } else if (id == kWifi) {
48 return flimflam::kTypeWifi;
49 } else if (id == kCellular) {
50 return flimflam::kTypeCellular;
Darin Petkov33af05c2012-02-28 10:10:30 +010051 } else if (id == kVPN) {
52 return flimflam::kTypeVPN;
Paul Stewartcba0f7f2012-02-29 16:33:05 -080053 } else if (id == kTunnel) {
54 return kTunnelName;
Paul Stewartfdd16072011-09-16 12:41:35 -070055 } else {
56 return kUnknownName;
57 }
58}
59
Paul Stewart1b253142012-01-26 14:05:52 -080060// static
61Technology::Identifier Technology::IdentifierFromStorageGroup(
62 const string &group) {
63 vector<string> group_parts;
64 base::SplitString(group, '_', &group_parts);
65 if (group_parts.empty()) {
66 return kUnknown;
67 }
68 return IdentifierFromName(group_parts[0]);
69}
70
Paul Stewart20088d82012-02-16 06:58:55 -080071// static
72bool Technology::GetTechnologyVectorFromString(
73 const string &technologies_string,
74 vector<Identifier> *technologies_vector,
75 Error *error) {
76 vector<string> technology_parts;
77 base::SplitString(technologies_string, ',', &technology_parts);
78 set<Technology::Identifier> seen;
79
80 for (vector<string>::iterator it = technology_parts.begin();
81 it != technology_parts.end();
82 ++it) {
83 Technology::Identifier identifier = Technology::IdentifierFromName(*it);
84
85 if (identifier == Technology::kUnknown) {
86 Error::PopulateAndLog(error, Error::kInvalidArguments,
87 *it + " is an unknown technology name");
88 return false;
89 }
90
91 if (ContainsKey(seen, identifier)) {
92 Error::PopulateAndLog(error, Error::kInvalidArguments,
93 *it + " is duplicated in the list");
94 return false;
95 }
96 seen.insert(identifier);
97 technologies_vector->push_back(identifier);
98 }
99
100 return true;
101}
102
Paul Stewartfdd16072011-09-16 12:41:35 -0700103} // namespace shill