OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/utility/wifi/wifi_service.h" | |
6 | |
7 #include "base/json/json_reader.h" | |
8 #include "base/message_loop/message_loop.h" | |
9 #include "base/strings/stringprintf.h" | |
10 | |
11 namespace network_type { | |
12 const char kAllTypes[] = "All"; | |
13 const char kCellular[] = "Cellular"; | |
14 const char kEthernet[] = "Ethernet"; | |
15 const char kVPN[] = "VPN"; | |
16 const char kWiFi[] = "WiFi"; | |
17 } // namespace network_type | |
18 | |
19 namespace { | |
20 const char kConnectionState[] = "ConnectionState"; | |
21 const char kNotConnected[] = "NotConnected"; | |
22 const char kConnected[] = "Connected"; | |
23 const char kGUID[] = "GUID"; | |
24 const char kName[] = "Name"; | |
25 const char kType[] = "Type"; | |
26 | |
27 const char kNone[] = "None"; | |
28 const char kUnknown[] = "Unknown"; | |
29 const char kWiFi[] = "WiFi"; | |
30 const char kWiFiAutoConnect[] = "WiFi.AutoConnect"; | |
31 const char kWiFiFrequency[] = "WiFi.Frequency"; | |
32 const char kWiFiFrequencyList[] = "WiFi.FrequencyList"; | |
33 const char kWiFiSSID[] = "WiFi.SSID"; | |
34 const char kWiFiBSSID[] = "WiFi.BSSID"; | |
35 const char kWiFiSecurity[] = "WiFi.Security"; | |
36 const char kWEP_PSK[] = "WEP-PSK"; | |
37 const char kWPA[] = "WPA"; | |
38 const char kWPA_PSK[] = "WPA-PSK"; | |
39 const char kWiFiSignalStrength[] = "WiFi.SignalStrength"; | |
stevenjb
2013/08/13 23:39:04
Probably worth defining these in a common place.
mef
2013/08/21 17:25:34
I'd love to use ONC constants, but they seem to be
mef
2013/10/08 21:46:25
Done.
| |
40 | |
41 const char* NetworkTypeToString(WiFiService::NetworkType type) { | |
42 switch (type) { | |
43 case WiFiService::kNetworkTypeWiFi: | |
44 return network_type::kWiFi; | |
45 case WiFiService::kNetworkTypeEthernet: | |
46 return network_type::kEthernet; | |
47 case WiFiService::kNetworkTypeVPN: | |
48 return network_type::kVPN; | |
49 case WiFiService::kNetworkTypeCellular: | |
50 return network_type::kCellular; | |
51 case WiFiService::kNetworkTypeAll: | |
52 return network_type::kAllTypes; | |
53 case WiFiService::kNetworkTypeNone: | |
54 return kNone; | |
55 } | |
56 return kNone; | |
57 } | |
58 | |
59 const char* ConnectionStateToString(WiFiService::ConnectionState state) { | |
60 switch (state) { | |
61 case WiFiService::kConnectionStateNotConnected: | |
62 return kNotConnected; | |
63 case WiFiService::kConnectionStateConnected: | |
64 return kConnected; | |
65 } | |
66 return kNotConnected; | |
67 } | |
68 | |
69 const char* WiFiSecurityToString(WiFiService::Security security) { | |
70 switch (security) { | |
71 case WiFiService::kSecurityNone: | |
72 return kNone; | |
73 case WiFiService::kSecurityWEP_PSK: | |
74 return kWEP_PSK; | |
75 case WiFiService::kSecurityWPA: | |
76 return kWPA; | |
77 case WiFiService::kSecurityWPA_PSK: | |
78 return kWPA_PSK; | |
79 default: | |
80 return kUnknown; | |
81 } | |
82 return kUnknown; | |
83 } | |
stevenjb
2013/08/13 23:39:04
One advantage to sticking with strings is not havi
mef
2013/08/21 17:25:34
Good point, will follow your advise.
mef
2013/10/08 21:46:25
Done.
| |
84 | |
85 } // namespace | |
86 | |
87 WiFiService::NetworkProperties::NetworkProperties() | |
88 : connection_state(kConnectionStateNotConnected), | |
89 frequency(0), | |
90 security(kSecurityNone), | |
91 signal_strength(0), | |
92 auto_connect(false) {} | |
93 | |
94 WiFiService::NetworkProperties::~NetworkProperties() {} | |
stevenjb
2013/08/13 23:39:04
nit: } on separate line here and above
mef
2013/08/21 17:25:34
This is result of automatic clang-format, not sure
| |
95 | |
96 scoped_ptr<base::DictionaryValue> WiFiService::NetworkProperties::ToValue( | |
97 bool network_list) const { | |
98 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
99 | |
100 value->SetString(kGUID, guid); | |
101 value->SetString(kName, name); | |
102 value->SetString(kConnectionState, ConnectionStateToString(connection_state)); | |
103 value->SetString(kType, NetworkTypeToString(type)); | |
104 | |
105 if (type == WiFiService::kNetworkTypeWiFi) { | |
106 value->SetString(kWiFiSecurity, WiFiSecurityToString(security)); | |
107 value->SetInteger(kWiFiSignalStrength, signal_strength); | |
108 | |
109 // Network list expects slightly different set of data. | |
110 if (network_list) { | |
111 value->SetBoolean(kWiFiAutoConnect, auto_connect); | |
112 } else { | |
113 if (frequency != WiFiService::kFrequencyUnknown) | |
114 value->SetInteger(kWiFiFrequency, frequency); | |
115 scoped_ptr<base::ListValue> frequency_list(new base::ListValue()); | |
116 for (FrequencyList::const_iterator it = this->frequency_list.begin(); | |
117 it != this->frequency_list.end(); | |
118 ++it) { | |
119 frequency_list->AppendInteger(*it); | |
120 } | |
121 if (!frequency_list->empty()) | |
122 value->Set(kWiFiFrequencyList, frequency_list.release()); | |
123 if (!bssid.empty()) | |
124 value->SetString(kWiFiBSSID, bssid); | |
125 value->SetString(kWiFiSSID, ssid); | |
126 } | |
127 } else { | |
128 // Add properites from json extra if present. | |
129 if (!json_extra.empty()) { | |
130 Value* value_extra = base::JSONReader::Read(json_extra); | |
131 value->Set(NetworkTypeToString(type), value_extra); | |
132 } | |
133 } | |
134 | |
135 return value.Pass(); | |
136 } | |
137 | |
138 bool WiFiService::NetworkProperties::UpdateFromValue( | |
139 const base::DictionaryValue& value) { | |
140 std::string wifi_security; | |
141 if (value.GetString(kWiFiSecurity, &wifi_security)) { | |
142 if (!wifi_security.compare(kWEP_PSK)) { | |
143 security = WiFiService::kSecurityWEP_PSK; | |
144 } else if (!wifi_security.compare(kWPA_PSK)) { | |
145 security = WiFiService::kSecurityWPA_PSK; | |
146 } else { | |
147 security = WiFiService::kSecurityNone; | |
148 } | |
149 return true; | |
150 } | |
151 return false; | |
152 } | |
153 | |
154 | |
155 std::string WiFiService::NetworkProperties::MacAddressAsString( | |
156 const uint8 mac_as_int[6]) { | |
157 // mac_as_int is big-endian. Write in byte chunks. | |
158 // Format is XX:XX:XX:XX:XX:XX. | |
159 static const char* const kMacFormatString = | |
160 "%02x:%02x:%02x:%02x:%02x:%02x"; | |
161 return base::StringPrintf(kMacFormatString, | |
162 mac_as_int[0], | |
163 mac_as_int[1], | |
164 mac_as_int[2], | |
165 mac_as_int[3], | |
166 mac_as_int[4], | |
167 mac_as_int[5]); | |
168 } | |
169 | |
170 bool WiFiService::NetworkProperties::OrderByType(const NetworkProperties& l, | |
171 const NetworkProperties& r) { | |
172 if (l.connection_state != r.connection_state) | |
173 return l.connection_state < r.connection_state; | |
174 return l.type < r.type; | |
175 } | |
176 | |
OLD | NEW |