| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // Provides wifi scan API binding for suitable for typical linux distributions. | 5 // Provides wifi scan API binding for suitable for typical linux distributions. |
| 6 // Currently, only the NetworkManager API is used, accessed via D-Bus (in turn | 6 // Currently, only the NetworkManager API is used, accessed via D-Bus (in turn |
| 7 // accessed via the GLib wrapper). | 7 // accessed via the GLib wrapper). |
| 8 | 8 |
| 9 #include "content/browser/geolocation/wifi_data_provider_linux.h" | 9 #include "content/browser/geolocation/wifi_data_provider_linux.h" |
| 10 | 10 |
| 11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
| 12 #include "base/string_number_conversions.h" | 12 #include "base/string_number_conversions.h" |
| 13 #include "base/utf_string_conversions.h" | 13 #include "base/utf_string_conversions.h" |
| 14 #include "dbus/bus.h" | 14 #include "dbus/bus.h" |
| 15 #include "dbus/message.h" | 15 #include "dbus/message.h" |
| 16 #include "dbus/object_path.h" | |
| 17 #include "dbus/object_proxy.h" | 16 #include "dbus/object_proxy.h" |
| 18 | 17 |
| 19 namespace { | 18 namespace { |
| 20 // The time periods between successive polls of the wifi data. | 19 // The time periods between successive polls of the wifi data. |
| 21 const int kDefaultPollingIntervalMilliseconds = 10 * 1000; // 10s | 20 const int kDefaultPollingIntervalMilliseconds = 10 * 1000; // 10s |
| 22 const int kNoChangePollingIntervalMilliseconds = 2 * 60 * 1000; // 2 mins | 21 const int kNoChangePollingIntervalMilliseconds = 2 * 60 * 1000; // 2 mins |
| 23 const int kTwoNoChangePollingIntervalMilliseconds = 10 * 60 * 1000; // 10 mins | 22 const int kTwoNoChangePollingIntervalMilliseconds = 10 * 60 * 1000; // 10 mins |
| 24 const int kNoWifiPollingIntervalMilliseconds = 20 * 1000; // 20s | 23 const int kNoWifiPollingIntervalMilliseconds = 20 * 1000; // 20s |
| 25 | 24 |
| 26 const char kNetworkManagerServiceName[] = "org.freedesktop.NetworkManager"; | 25 const char kNetworkManagerServiceName[] = "org.freedesktop.NetworkManager"; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 50 | 49 |
| 51 // WifiDataProviderCommon::WlanApiInterface | 50 // WifiDataProviderCommon::WlanApiInterface |
| 52 // | 51 // |
| 53 // This function makes blocking D-Bus calls, but it's totally fine as | 52 // This function makes blocking D-Bus calls, but it's totally fine as |
| 54 // the code runs in "Geolocation" thread, not the browser's UI thread. | 53 // the code runs in "Geolocation" thread, not the browser's UI thread. |
| 55 virtual bool GetAccessPointData(WifiData::AccessPointDataSet* data); | 54 virtual bool GetAccessPointData(WifiData::AccessPointDataSet* data); |
| 56 | 55 |
| 57 private: | 56 private: |
| 58 // Enumerates the list of available network adapter devices known to | 57 // Enumerates the list of available network adapter devices known to |
| 59 // NetworkManager. Return true on success. | 58 // NetworkManager. Return true on success. |
| 60 bool GetAdapterDeviceList(std::vector<dbus::ObjectPath>* device_paths); | 59 bool GetAdapterDeviceList(std::vector<std::string>* device_paths); |
| 61 | 60 |
| 62 // Given the NetworkManager path to a wireless adapater, dumps the wifi scan | 61 // Given the NetworkManager path to a wireless adapater, dumps the wifi scan |
| 63 // results and appends them to |data|. Returns false if a fatal error is | 62 // results and appends them to |data|. Returns false if a fatal error is |
| 64 // encountered such that the data set could not be populated. | 63 // encountered such that the data set could not be populated. |
| 65 bool GetAccessPointsForAdapter(const dbus::ObjectPath& adapter_path, | 64 bool GetAccessPointsForAdapter(const std::string& adapter_path, |
| 66 WifiData::AccessPointDataSet* data); | 65 WifiData::AccessPointDataSet* data); |
| 67 | 66 |
| 68 // Internal method used by |GetAccessPointsForAdapter|, given a wifi access | 67 // Internal method used by |GetAccessPointsForAdapter|, given a wifi access |
| 69 // point proxy retrieves the named property and returns it. Returns NULL if | 68 // point proxy retrieves the named property and returns it. Returns NULL if |
| 70 // the property could not be read. | 69 // the property could not be read. |
| 71 dbus::Response* GetAccessPointProperty(dbus::ObjectProxy* proxy, | 70 dbus::Response* GetAccessPointProperty(dbus::ObjectProxy* proxy, |
| 72 const std::string& property_name); | 71 const std::string& property_name); |
| 73 | 72 |
| 74 scoped_refptr<dbus::Bus> system_bus_; | 73 scoped_refptr<dbus::Bus> system_bus_; |
| 75 dbus::ObjectProxy* network_manager_proxy_; | 74 dbus::ObjectProxy* network_manager_proxy_; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 104 options.bus_type = dbus::Bus::SYSTEM; | 103 options.bus_type = dbus::Bus::SYSTEM; |
| 105 options.connection_type = dbus::Bus::PRIVATE; | 104 options.connection_type = dbus::Bus::PRIVATE; |
| 106 return InitWithBus(new dbus::Bus(options)); | 105 return InitWithBus(new dbus::Bus(options)); |
| 107 } | 106 } |
| 108 | 107 |
| 109 bool NetworkManagerWlanApi::InitWithBus(dbus::Bus* bus) { | 108 bool NetworkManagerWlanApi::InitWithBus(dbus::Bus* bus) { |
| 110 system_bus_ = bus; | 109 system_bus_ = bus; |
| 111 // system_bus_ will own all object proxies created from the bus. | 110 // system_bus_ will own all object proxies created from the bus. |
| 112 network_manager_proxy_ = | 111 network_manager_proxy_ = |
| 113 system_bus_->GetObjectProxy(kNetworkManagerServiceName, | 112 system_bus_->GetObjectProxy(kNetworkManagerServiceName, |
| 114 dbus::ObjectPath(kNetworkManagerPath)); | 113 kNetworkManagerPath); |
| 115 // Validate the proxy object by checking we can enumerate devices. | 114 // Validate the proxy object by checking we can enumerate devices. |
| 116 std::vector<dbus::ObjectPath> adapter_paths; | 115 std::vector<std::string> adapter_paths; |
| 117 const bool success = GetAdapterDeviceList(&adapter_paths); | 116 const bool success = GetAdapterDeviceList(&adapter_paths); |
| 118 VLOG(1) << "Init() result: " << success; | 117 VLOG(1) << "Init() result: " << success; |
| 119 return success; | 118 return success; |
| 120 } | 119 } |
| 121 | 120 |
| 122 bool NetworkManagerWlanApi::GetAccessPointData( | 121 bool NetworkManagerWlanApi::GetAccessPointData( |
| 123 WifiData::AccessPointDataSet* data) { | 122 WifiData::AccessPointDataSet* data) { |
| 124 std::vector<dbus::ObjectPath> device_paths; | 123 std::vector<std::string> device_paths; |
| 125 if (!GetAdapterDeviceList(&device_paths)) { | 124 if (!GetAdapterDeviceList(&device_paths)) { |
| 126 LOG(WARNING) << "Could not enumerate access points"; | 125 LOG(WARNING) << "Could not enumerate access points"; |
| 127 return false; | 126 return false; |
| 128 } | 127 } |
| 129 int success_count = 0; | 128 int success_count = 0; |
| 130 int fail_count = 0; | 129 int fail_count = 0; |
| 131 | 130 |
| 132 // Iterate the devices, getting APs for each wireless adapter found | 131 // Iterate the devices, getting APs for each wireless adapter found |
| 133 for (size_t i = 0; i < device_paths.size(); ++i) { | 132 for (size_t i = 0; i < device_paths.size(); ++i) { |
| 134 const dbus::ObjectPath& device_path = device_paths[i]; | 133 const std::string& device_path = device_paths[i]; |
| 135 VLOG(1) << "Checking device: " << device_path.value(); | 134 VLOG(1) << "Checking device: " << device_path; |
| 136 | 135 |
| 137 dbus::ObjectProxy* device_proxy = | 136 dbus::ObjectProxy* device_proxy = |
| 138 system_bus_->GetObjectProxy(kNetworkManagerServiceName, | 137 system_bus_->GetObjectProxy(kNetworkManagerServiceName, |
| 139 device_path); | 138 device_path); |
| 140 | 139 |
| 141 dbus::MethodCall method_call(DBUS_INTERFACE_PROPERTIES, "Get"); | 140 dbus::MethodCall method_call(DBUS_INTERFACE_PROPERTIES, "Get"); |
| 142 dbus::MessageWriter builder(&method_call); | 141 dbus::MessageWriter builder(&method_call); |
| 143 builder.AppendString("org.freedesktop.NetworkManager.Device"); | 142 builder.AppendString("org.freedesktop.NetworkManager.Device"); |
| 144 builder.AppendString("DeviceType"); | 143 builder.AppendString("DeviceType"); |
| 145 scoped_ptr<dbus::Response> response( | 144 scoped_ptr<dbus::Response> response( |
| 146 device_proxy->CallMethodAndBlock( | 145 device_proxy->CallMethodAndBlock( |
| 147 &method_call, | 146 &method_call, |
| 148 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); | 147 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
| 149 if (!response.get()) { | 148 if (!response.get()) { |
| 150 LOG(WARNING) << "Failed to get the device type for " | 149 LOG(WARNING) << "Failed to get the device type for " << device_path; |
| 151 << device_path.value(); | |
| 152 continue; // Check the next device. | 150 continue; // Check the next device. |
| 153 } | 151 } |
| 154 dbus::MessageReader reader(response.get()); | 152 dbus::MessageReader reader(response.get()); |
| 155 uint32 device_type = 0; | 153 uint32 device_type = 0; |
| 156 if (!reader.PopVariantOfUint32(&device_type)) { | 154 if (!reader.PopVariantOfUint32(&device_type)) { |
| 157 LOG(WARNING) << "Unexpected response for " << device_type << ": " | 155 LOG(WARNING) << "Unexpected response for " << device_type << ": " |
| 158 << response->ToString(); | 156 << response->ToString(); |
| 159 continue; // Check the next device. | 157 continue; // Check the next device. |
| 160 } | 158 } |
| 161 VLOG(1) << "Device type: " << device_type; | 159 VLOG(1) << "Device type: " << device_type; |
| 162 | 160 |
| 163 if (device_type == NM_DEVICE_TYPE_WIFI) { // Found a wlan adapter | 161 if (device_type == NM_DEVICE_TYPE_WIFI) { // Found a wlan adapter |
| 164 if (GetAccessPointsForAdapter(device_path, data)) | 162 if (GetAccessPointsForAdapter(device_path, data)) |
| 165 ++success_count; | 163 ++success_count; |
| 166 else | 164 else |
| 167 ++fail_count; | 165 ++fail_count; |
| 168 } | 166 } |
| 169 } | 167 } |
| 170 // At least one successfull scan overrides any other adapter reporting error. | 168 // At least one successfull scan overrides any other adapter reporting error. |
| 171 return success_count || fail_count == 0; | 169 return success_count || fail_count == 0; |
| 172 } | 170 } |
| 173 | 171 |
| 174 bool NetworkManagerWlanApi::GetAdapterDeviceList( | 172 bool NetworkManagerWlanApi::GetAdapterDeviceList( |
| 175 std::vector<dbus::ObjectPath>* device_paths) { | 173 std::vector<std::string>* device_paths) { |
| 176 dbus::MethodCall method_call(kNetworkManagerInterface, "GetDevices"); | 174 dbus::MethodCall method_call(kNetworkManagerInterface, "GetDevices"); |
| 177 scoped_ptr<dbus::Response> response( | 175 scoped_ptr<dbus::Response> response( |
| 178 network_manager_proxy_->CallMethodAndBlock( | 176 network_manager_proxy_->CallMethodAndBlock( |
| 179 &method_call, | 177 &method_call, |
| 180 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); | 178 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
| 181 if (!response.get()) { | 179 if (!response.get()) { |
| 182 LOG(WARNING) << "Failed to get the device list"; | 180 LOG(WARNING) << "Failed to get the device list"; |
| 183 return false; | 181 return false; |
| 184 } | 182 } |
| 185 | 183 |
| 186 dbus::MessageReader reader(response.get()); | 184 dbus::MessageReader reader(response.get()); |
| 187 if (!reader.PopArrayOfObjectPaths(device_paths)) { | 185 if (!reader.PopArrayOfObjectPaths(device_paths)) { |
| 188 LOG(WARNING) << "Unexpected response: " << response->ToString(); | 186 LOG(WARNING) << "Unexpected response: " << response->ToString(); |
| 189 return false; | 187 return false; |
| 190 } | 188 } |
| 191 return true; | 189 return true; |
| 192 } | 190 } |
| 193 | 191 |
| 194 | 192 |
| 195 bool NetworkManagerWlanApi::GetAccessPointsForAdapter( | 193 bool NetworkManagerWlanApi::GetAccessPointsForAdapter( |
| 196 const dbus::ObjectPath& adapter_path, WifiData::AccessPointDataSet* data) { | 194 const std::string& adapter_path, WifiData::AccessPointDataSet* data) { |
| 197 // Create a proxy object for this wifi adapter, and ask it to do a scan | 195 // Create a proxy object for this wifi adapter, and ask it to do a scan |
| 198 // (or at least, dump its scan results). | 196 // (or at least, dump its scan results). |
| 199 dbus::ObjectProxy* device_proxy = | 197 dbus::ObjectProxy* device_proxy = |
| 200 system_bus_->GetObjectProxy(kNetworkManagerServiceName, | 198 system_bus_->GetObjectProxy(kNetworkManagerServiceName, |
| 201 adapter_path); | 199 adapter_path); |
| 202 dbus::MethodCall method_call( | 200 dbus::MethodCall method_call( |
| 203 "org.freedesktop.NetworkManager.Device.Wireless", | 201 "org.freedesktop.NetworkManager.Device.Wireless", |
| 204 "GetAccessPoints"); | 202 "GetAccessPoints"); |
| 205 scoped_ptr<dbus::Response> response( | 203 scoped_ptr<dbus::Response> response( |
| 206 device_proxy->CallMethodAndBlock( | 204 device_proxy->CallMethodAndBlock( |
| 207 &method_call, | 205 &method_call, |
| 208 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); | 206 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
| 209 if (!response.get()) { | 207 if (!response.get()) { |
| 210 LOG(WARNING) << "Failed to get access points data for " | 208 LOG(WARNING) << "Failed to get access points data for " << adapter_path; |
| 211 << adapter_path.value(); | |
| 212 return false; | 209 return false; |
| 213 } | 210 } |
| 214 dbus::MessageReader reader(response.get()); | 211 dbus::MessageReader reader(response.get()); |
| 215 std::vector<dbus::ObjectPath> access_point_paths; | 212 std::vector<std::string> access_point_paths; |
| 216 if (!reader.PopArrayOfObjectPaths(&access_point_paths)) { | 213 if (!reader.PopArrayOfObjectPaths(&access_point_paths)) { |
| 217 LOG(WARNING) << "Unexpected response for " << adapter_path.value() << ": " | 214 LOG(WARNING) << "Unexpected response for " << adapter_path << ": " |
| 218 << response->ToString(); | 215 << response->ToString(); |
| 219 return false; | 216 return false; |
| 220 } | 217 } |
| 221 | 218 |
| 222 VLOG(1) << "Wireless adapter " << adapter_path.value() << " found " | 219 VLOG(1) << "Wireless adapter " << adapter_path << " found " |
| 223 << access_point_paths.size() << " access points."; | 220 << access_point_paths.size() << " access points."; |
| 224 | 221 |
| 225 for (size_t i = 0; i < access_point_paths.size(); ++i) { | 222 for (size_t i = 0; i < access_point_paths.size(); ++i) { |
| 226 const dbus::ObjectPath& access_point_path = access_point_paths[i]; | 223 const std::string& access_point_path = access_point_paths[i]; |
| 227 VLOG(1) << "Checking access point: " << access_point_path.value(); | 224 VLOG(1) << "Checking access point: " << access_point_path; |
| 228 | 225 |
| 229 dbus::ObjectProxy* access_point_proxy = | 226 dbus::ObjectProxy* access_point_proxy = |
| 230 system_bus_->GetObjectProxy(kNetworkManagerServiceName, | 227 system_bus_->GetObjectProxy(kNetworkManagerServiceName, |
| 231 access_point_path); | 228 access_point_path); |
| 232 | 229 |
| 233 AccessPointData access_point_data; | 230 AccessPointData access_point_data; |
| 234 { | 231 { |
| 235 scoped_ptr<dbus::Response> response( | 232 scoped_ptr<dbus::Response> response( |
| 236 GetAccessPointProperty(access_point_proxy, "Ssid")); | 233 GetAccessPointProperty(access_point_proxy, "Ssid")); |
| 237 if (!response.get()) | 234 if (!response.get()) |
| 238 continue; | 235 continue; |
| 239 // The response should contain a variant that contains an array of bytes. | 236 // The response should contain a variant that contains an array of bytes. |
| 240 dbus::MessageReader reader(response.get()); | 237 dbus::MessageReader reader(response.get()); |
| 241 dbus::MessageReader variant_reader(response.get()); | 238 dbus::MessageReader variant_reader(response.get()); |
| 242 if (!reader.PopVariant(&variant_reader)) { | 239 if (!reader.PopVariant(&variant_reader)) { |
| 243 LOG(WARNING) << "Unexpected response for " << access_point_path.value() | 240 LOG(WARNING) << "Unexpected response for " << access_point_path << ": " |
| 244 << ": " << response->ToString(); | 241 << response->ToString(); |
| 245 continue; | 242 continue; |
| 246 } | 243 } |
| 247 uint8* ssid_bytes = NULL; | 244 uint8* ssid_bytes = NULL; |
| 248 size_t ssid_length = 0; | 245 size_t ssid_length = 0; |
| 249 if (!variant_reader.PopArrayOfBytes(&ssid_bytes, &ssid_length)) { | 246 if (!variant_reader.PopArrayOfBytes(&ssid_bytes, &ssid_length)) { |
| 250 LOG(WARNING) << "Unexpected response for " << access_point_path.value() | 247 LOG(WARNING) << "Unexpected response for " << access_point_path << ": " |
| 251 << ": " << response->ToString(); | 248 << response->ToString(); |
| 252 continue; | 249 continue; |
| 253 } | 250 } |
| 254 std::string ssid(ssid_bytes, ssid_bytes + ssid_length); | 251 std::string ssid(ssid_bytes, ssid_bytes + ssid_length); |
| 255 access_point_data.ssid = UTF8ToUTF16(ssid); | 252 access_point_data.ssid = UTF8ToUTF16(ssid); |
| 256 } | 253 } |
| 257 | 254 |
| 258 { // Read the mac address | 255 { // Read the mac address |
| 259 scoped_ptr<dbus::Response> response( | 256 scoped_ptr<dbus::Response> response( |
| 260 GetAccessPointProperty(access_point_proxy, "HwAddress")); | 257 GetAccessPointProperty(access_point_proxy, "HwAddress")); |
| 261 if (!response.get()) | 258 if (!response.get()) |
| 262 continue; | 259 continue; |
| 263 dbus::MessageReader reader(response.get()); | 260 dbus::MessageReader reader(response.get()); |
| 264 std::string mac; | 261 std::string mac; |
| 265 if (!reader.PopVariantOfString(&mac)) { | 262 if (!reader.PopVariantOfString(&mac)) { |
| 266 LOG(WARNING) << "Unexpected response for " << access_point_path.value() | 263 LOG(WARNING) << "Unexpected response for " << access_point_path << ": " |
| 267 << ": " << response->ToString(); | 264 << response->ToString(); |
| 268 continue; | 265 continue; |
| 269 } | 266 } |
| 270 | 267 |
| 271 ReplaceSubstringsAfterOffset(&mac, 0U, ":", ""); | 268 ReplaceSubstringsAfterOffset(&mac, 0U, ":", ""); |
| 272 std::vector<uint8> mac_bytes; | 269 std::vector<uint8> mac_bytes; |
| 273 if (!base::HexStringToBytes(mac, &mac_bytes) || mac_bytes.size() != 6) { | 270 if (!base::HexStringToBytes(mac, &mac_bytes) || mac_bytes.size() != 6) { |
| 274 LOG(WARNING) << "Can't parse mac address (found " << mac_bytes.size() | 271 LOG(WARNING) << "Can't parse mac address (found " << mac_bytes.size() |
| 275 << " bytes) so using raw string: " << mac; | 272 << " bytes) so using raw string: " << mac; |
| 276 access_point_data.mac_address = UTF8ToUTF16(mac); | 273 access_point_data.mac_address = UTF8ToUTF16(mac); |
| 277 } else { | 274 } else { |
| 278 access_point_data.mac_address = MacAddressAsString16(&mac_bytes[0]); | 275 access_point_data.mac_address = MacAddressAsString16(&mac_bytes[0]); |
| 279 } | 276 } |
| 280 } | 277 } |
| 281 | 278 |
| 282 { // Read signal strength. | 279 { // Read signal strength. |
| 283 scoped_ptr<dbus::Response> response( | 280 scoped_ptr<dbus::Response> response( |
| 284 GetAccessPointProperty(access_point_proxy, "Strength")); | 281 GetAccessPointProperty(access_point_proxy, "Strength")); |
| 285 if (!response.get()) | 282 if (!response.get()) |
| 286 continue; | 283 continue; |
| 287 dbus::MessageReader reader(response.get()); | 284 dbus::MessageReader reader(response.get()); |
| 288 uint8 strength = 0; | 285 uint8 strength = 0; |
| 289 if (!reader.PopVariantOfByte(&strength)) { | 286 if (!reader.PopVariantOfByte(&strength)) { |
| 290 LOG(WARNING) << "Unexpected response for " << access_point_path.value() | 287 LOG(WARNING) << "Unexpected response for " << access_point_path << ": " |
| 291 << ": " << response->ToString(); | 288 << response->ToString(); |
| 292 continue; | 289 continue; |
| 293 } | 290 } |
| 294 // Convert strength as a percentage into dBs. | 291 // Convert strength as a percentage into dBs. |
| 295 access_point_data.radio_signal_strength = -100 + strength / 2; | 292 access_point_data.radio_signal_strength = -100 + strength / 2; |
| 296 } | 293 } |
| 297 | 294 |
| 298 { // Read the channel | 295 { // Read the channel |
| 299 scoped_ptr<dbus::Response> response( | 296 scoped_ptr<dbus::Response> response( |
| 300 GetAccessPointProperty(access_point_proxy, "Frequency")); | 297 GetAccessPointProperty(access_point_proxy, "Frequency")); |
| 301 if (!response.get()) | 298 if (!response.get()) |
| 302 continue; | 299 continue; |
| 303 dbus::MessageReader reader(response.get()); | 300 dbus::MessageReader reader(response.get()); |
| 304 uint32 frequency = 0; | 301 uint32 frequency = 0; |
| 305 if (!reader.PopVariantOfUint32(&frequency)) { | 302 if (!reader.PopVariantOfUint32(&frequency)) { |
| 306 LOG(WARNING) << "Unexpected response for " << access_point_path.value() | 303 LOG(WARNING) << "Unexpected response for " << access_point_path << ": " |
| 307 << ": " << response->ToString(); | 304 << response->ToString(); |
| 308 continue; | 305 continue; |
| 309 } | 306 } |
| 310 | 307 |
| 311 // NetworkManager returns frequency in MHz. | 308 // NetworkManager returns frequency in MHz. |
| 312 access_point_data.channel = | 309 access_point_data.channel = |
| 313 frquency_in_khz_to_channel(frequency * 1000); | 310 frquency_in_khz_to_channel(frequency * 1000); |
| 314 } | 311 } |
| 315 VLOG(1) << "Access point data of " << access_point_path.value() << ": " | 312 VLOG(1) << "Access point data of " << access_point_path << ": " |
| 316 << "SSID: " << access_point_data.ssid << ", " | 313 << "SSID: " << access_point_data.ssid << ", " |
| 317 << "MAC: " << access_point_data.mac_address << ", " | 314 << "MAC: " << access_point_data.mac_address << ", " |
| 318 << "Strength: " << access_point_data.radio_signal_strength << ", " | 315 << "Strength: " << access_point_data.radio_signal_strength << ", " |
| 319 << "Channel: " << access_point_data.channel; | 316 << "Channel: " << access_point_data.channel; |
| 320 | 317 |
| 321 data->insert(access_point_data); | 318 data->insert(access_point_data); |
| 322 } | 319 } |
| 323 return true; | 320 return true; |
| 324 } | 321 } |
| 325 | 322 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 kNoWifiPollingIntervalMilliseconds>; | 365 kNoWifiPollingIntervalMilliseconds>; |
| 369 } | 366 } |
| 370 | 367 |
| 371 WifiDataProviderCommon::WlanApiInterface* | 368 WifiDataProviderCommon::WlanApiInterface* |
| 372 WifiDataProviderLinux::NewWlanApiForTesting(dbus::Bus* bus) { | 369 WifiDataProviderLinux::NewWlanApiForTesting(dbus::Bus* bus) { |
| 373 scoped_ptr<NetworkManagerWlanApi> wlan_api(new NetworkManagerWlanApi); | 370 scoped_ptr<NetworkManagerWlanApi> wlan_api(new NetworkManagerWlanApi); |
| 374 if (wlan_api->InitWithBus(bus)) | 371 if (wlan_api->InitWithBus(bus)) |
| 375 return wlan_api.release(); | 372 return wlan_api.release(); |
| 376 return NULL; | 373 return NULL; |
| 377 } | 374 } |
| OLD | NEW |