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"; |
| 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 } |
| 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() {} |
| 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 std::string WiFiService::NetworkProperties::MacAddressAsString( |
| 155 const uint8 mac_as_int[6]) { |
| 156 // mac_as_int is big-endian. Write in byte chunks. |
| 157 // Format is XX:XX:XX:XX:XX:XX. |
| 158 static const char* const kMacFormatString = "%02x:%02x:%02x:%02x:%02x:%02x"; |
| 159 return base::StringPrintf(kMacFormatString, |
| 160 mac_as_int[0], |
| 161 mac_as_int[1], |
| 162 mac_as_int[2], |
| 163 mac_as_int[3], |
| 164 mac_as_int[4], |
| 165 mac_as_int[5]); |
| 166 } |
| 167 |
| 168 bool WiFiService::NetworkProperties::OrderByType(const NetworkProperties& l, |
| 169 const NetworkProperties& r) { |
| 170 if (l.connection_state != r.connection_state) |
| 171 return l.connection_state < r.connection_state; |
| 172 return l.type < r.type; |
| 173 } |
OLD | NEW |