| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <stddef.h> |
| 12 #include <stdint.h> |
| 13 |
| 14 #include "base/macros.h" |
| 11 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
| 12 #include "base/strings/string_number_conversions.h" | 16 #include "base/strings/string_number_conversions.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
| 14 #include "content/browser/geolocation/wifi_data_provider_manager.h" | 18 #include "content/browser/geolocation/wifi_data_provider_manager.h" |
| 15 #include "dbus/bus.h" | 19 #include "dbus/bus.h" |
| 16 #include "dbus/message.h" | 20 #include "dbus/message.h" |
| 17 #include "dbus/object_path.h" | 21 #include "dbus/object_path.h" |
| 18 #include "dbus/object_proxy.h" | 22 #include "dbus/object_proxy.h" |
| 19 | 23 |
| 20 namespace content { | 24 namespace content { |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 scoped_ptr<dbus::Response> response( | 152 scoped_ptr<dbus::Response> response( |
| 149 device_proxy->CallMethodAndBlock( | 153 device_proxy->CallMethodAndBlock( |
| 150 &method_call, | 154 &method_call, |
| 151 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); | 155 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
| 152 if (!response) { | 156 if (!response) { |
| 153 LOG(WARNING) << "Failed to get the device type for " | 157 LOG(WARNING) << "Failed to get the device type for " |
| 154 << device_path.value(); | 158 << device_path.value(); |
| 155 continue; // Check the next device. | 159 continue; // Check the next device. |
| 156 } | 160 } |
| 157 dbus::MessageReader reader(response.get()); | 161 dbus::MessageReader reader(response.get()); |
| 158 uint32 device_type = 0; | 162 uint32_t device_type = 0; |
| 159 if (!reader.PopVariantOfUint32(&device_type)) { | 163 if (!reader.PopVariantOfUint32(&device_type)) { |
| 160 LOG(WARNING) << "Unexpected response for " << device_type << ": " | 164 LOG(WARNING) << "Unexpected response for " << device_type << ": " |
| 161 << response->ToString(); | 165 << response->ToString(); |
| 162 continue; // Check the next device. | 166 continue; // Check the next device. |
| 163 } | 167 } |
| 164 VLOG(1) << "Device type: " << device_type; | 168 VLOG(1) << "Device type: " << device_type; |
| 165 | 169 |
| 166 if (device_type == NM_DEVICE_TYPE_WIFI) { // Found a wlan adapter | 170 if (device_type == NM_DEVICE_TYPE_WIFI) { // Found a wlan adapter |
| 167 if (GetAccessPointsForAdapter(device_path, data)) | 171 if (GetAccessPointsForAdapter(device_path, data)) |
| 168 ++success_count; | 172 ++success_count; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 if (!response) | 244 if (!response) |
| 241 continue; | 245 continue; |
| 242 // The response should contain a variant that contains an array of bytes. | 246 // The response should contain a variant that contains an array of bytes. |
| 243 dbus::MessageReader reader(response.get()); | 247 dbus::MessageReader reader(response.get()); |
| 244 dbus::MessageReader variant_reader(response.get()); | 248 dbus::MessageReader variant_reader(response.get()); |
| 245 if (!reader.PopVariant(&variant_reader)) { | 249 if (!reader.PopVariant(&variant_reader)) { |
| 246 LOG(WARNING) << "Unexpected response for " << access_point_path.value() | 250 LOG(WARNING) << "Unexpected response for " << access_point_path.value() |
| 247 << ": " << response->ToString(); | 251 << ": " << response->ToString(); |
| 248 continue; | 252 continue; |
| 249 } | 253 } |
| 250 const uint8* ssid_bytes = NULL; | 254 const uint8_t* ssid_bytes = NULL; |
| 251 size_t ssid_length = 0; | 255 size_t ssid_length = 0; |
| 252 if (!variant_reader.PopArrayOfBytes(&ssid_bytes, &ssid_length)) { | 256 if (!variant_reader.PopArrayOfBytes(&ssid_bytes, &ssid_length)) { |
| 253 LOG(WARNING) << "Unexpected response for " << access_point_path.value() | 257 LOG(WARNING) << "Unexpected response for " << access_point_path.value() |
| 254 << ": " << response->ToString(); | 258 << ": " << response->ToString(); |
| 255 continue; | 259 continue; |
| 256 } | 260 } |
| 257 std::string ssid(ssid_bytes, ssid_bytes + ssid_length); | 261 std::string ssid(ssid_bytes, ssid_bytes + ssid_length); |
| 258 access_point_data.ssid = base::UTF8ToUTF16(ssid); | 262 access_point_data.ssid = base::UTF8ToUTF16(ssid); |
| 259 } | 263 } |
| 260 | 264 |
| 261 { // Read the mac address | 265 { // Read the mac address |
| 262 scoped_ptr<dbus::Response> response( | 266 scoped_ptr<dbus::Response> response( |
| 263 GetAccessPointProperty(access_point_proxy, "HwAddress")); | 267 GetAccessPointProperty(access_point_proxy, "HwAddress")); |
| 264 if (!response) | 268 if (!response) |
| 265 continue; | 269 continue; |
| 266 dbus::MessageReader reader(response.get()); | 270 dbus::MessageReader reader(response.get()); |
| 267 std::string mac; | 271 std::string mac; |
| 268 if (!reader.PopVariantOfString(&mac)) { | 272 if (!reader.PopVariantOfString(&mac)) { |
| 269 LOG(WARNING) << "Unexpected response for " << access_point_path.value() | 273 LOG(WARNING) << "Unexpected response for " << access_point_path.value() |
| 270 << ": " << response->ToString(); | 274 << ": " << response->ToString(); |
| 271 continue; | 275 continue; |
| 272 } | 276 } |
| 273 | 277 |
| 274 base::ReplaceSubstringsAfterOffset(&mac, 0U, ":", base::StringPiece()); | 278 base::ReplaceSubstringsAfterOffset(&mac, 0U, ":", base::StringPiece()); |
| 275 std::vector<uint8> mac_bytes; | 279 std::vector<uint8_t> mac_bytes; |
| 276 if (!base::HexStringToBytes(mac, &mac_bytes) || mac_bytes.size() != 6) { | 280 if (!base::HexStringToBytes(mac, &mac_bytes) || mac_bytes.size() != 6) { |
| 277 LOG(WARNING) << "Can't parse mac address (found " << mac_bytes.size() | 281 LOG(WARNING) << "Can't parse mac address (found " << mac_bytes.size() |
| 278 << " bytes) so using raw string: " << mac; | 282 << " bytes) so using raw string: " << mac; |
| 279 access_point_data.mac_address = base::UTF8ToUTF16(mac); | 283 access_point_data.mac_address = base::UTF8ToUTF16(mac); |
| 280 } else { | 284 } else { |
| 281 access_point_data.mac_address = MacAddressAsString16(&mac_bytes[0]); | 285 access_point_data.mac_address = MacAddressAsString16(&mac_bytes[0]); |
| 282 } | 286 } |
| 283 } | 287 } |
| 284 | 288 |
| 285 { // Read signal strength. | 289 { // Read signal strength. |
| 286 scoped_ptr<dbus::Response> response( | 290 scoped_ptr<dbus::Response> response( |
| 287 GetAccessPointProperty(access_point_proxy, "Strength")); | 291 GetAccessPointProperty(access_point_proxy, "Strength")); |
| 288 if (!response) | 292 if (!response) |
| 289 continue; | 293 continue; |
| 290 dbus::MessageReader reader(response.get()); | 294 dbus::MessageReader reader(response.get()); |
| 291 uint8 strength = 0; | 295 uint8_t strength = 0; |
| 292 if (!reader.PopVariantOfByte(&strength)) { | 296 if (!reader.PopVariantOfByte(&strength)) { |
| 293 LOG(WARNING) << "Unexpected response for " << access_point_path.value() | 297 LOG(WARNING) << "Unexpected response for " << access_point_path.value() |
| 294 << ": " << response->ToString(); | 298 << ": " << response->ToString(); |
| 295 continue; | 299 continue; |
| 296 } | 300 } |
| 297 // Convert strength as a percentage into dBs. | 301 // Convert strength as a percentage into dBs. |
| 298 access_point_data.radio_signal_strength = -100 + strength / 2; | 302 access_point_data.radio_signal_strength = -100 + strength / 2; |
| 299 } | 303 } |
| 300 | 304 |
| 301 { // Read the channel | 305 { // Read the channel |
| 302 scoped_ptr<dbus::Response> response( | 306 scoped_ptr<dbus::Response> response( |
| 303 GetAccessPointProperty(access_point_proxy, "Frequency")); | 307 GetAccessPointProperty(access_point_proxy, "Frequency")); |
| 304 if (!response) | 308 if (!response) |
| 305 continue; | 309 continue; |
| 306 dbus::MessageReader reader(response.get()); | 310 dbus::MessageReader reader(response.get()); |
| 307 uint32 frequency = 0; | 311 uint32_t frequency = 0; |
| 308 if (!reader.PopVariantOfUint32(&frequency)) { | 312 if (!reader.PopVariantOfUint32(&frequency)) { |
| 309 LOG(WARNING) << "Unexpected response for " << access_point_path.value() | 313 LOG(WARNING) << "Unexpected response for " << access_point_path.value() |
| 310 << ": " << response->ToString(); | 314 << ": " << response->ToString(); |
| 311 continue; | 315 continue; |
| 312 } | 316 } |
| 313 | 317 |
| 314 // NetworkManager returns frequency in MHz. | 318 // NetworkManager returns frequency in MHz. |
| 315 access_point_data.channel = | 319 access_point_data.channel = |
| 316 frquency_in_khz_to_channel(frequency * 1000); | 320 frquency_in_khz_to_channel(frequency * 1000); |
| 317 } | 321 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 | 376 |
| 373 WifiDataProviderCommon::WlanApiInterface* | 377 WifiDataProviderCommon::WlanApiInterface* |
| 374 WifiDataProviderLinux::NewWlanApiForTesting(dbus::Bus* bus) { | 378 WifiDataProviderLinux::NewWlanApiForTesting(dbus::Bus* bus) { |
| 375 scoped_ptr<NetworkManagerWlanApi> wlan_api(new NetworkManagerWlanApi); | 379 scoped_ptr<NetworkManagerWlanApi> wlan_api(new NetworkManagerWlanApi); |
| 376 if (wlan_api->InitWithBus(bus)) | 380 if (wlan_api->InitWithBus(bus)) |
| 377 return wlan_api.release(); | 381 return wlan_api.release(); |
| 378 return NULL; | 382 return NULL; |
| 379 } | 383 } |
| 380 | 384 |
| 381 } // namespace content | 385 } // namespace content |
| OLD | NEW |