Chromium Code Reviews| 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 |