OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #include "device/bluetooth/dbus/fake_bluetooth_device_client.h" | 5 #include "device/bluetooth/dbus/fake_bluetooth_device_client.h" |
6 | 6 |
7 #include <fcntl.h> | 7 #include <fcntl.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <sys/socket.h> | 9 #include <sys/socket.h> |
10 #include <sys/types.h> | 10 #include <sys/types.h> |
11 #include <unistd.h> | 11 #include <unistd.h> |
12 | 12 |
13 #include <algorithm> | 13 #include <algorithm> |
14 #include <memory> | 14 #include <memory> |
15 #include <string> | 15 #include <string> |
16 #include <utility> | 16 #include <utility> |
17 | 17 |
| 18 #include "base/base64.h" |
18 #include "base/bind_helpers.h" | 19 #include "base/bind_helpers.h" |
19 #include "base/location.h" | 20 #include "base/location.h" |
20 #include "base/logging.h" | 21 #include "base/logging.h" |
21 #include "base/memory/ptr_util.h" | 22 #include "base/memory/ptr_util.h" |
22 #include "base/memory/ref_counted.h" | 23 #include "base/memory/ref_counted.h" |
23 #include "base/rand_util.h" | 24 #include "base/rand_util.h" |
24 #include "base/single_thread_task_runner.h" | 25 #include "base/single_thread_task_runner.h" |
25 #include "base/stl_util.h" | 26 #include "base/stl_util.h" |
| 27 #include "base/strings/string_util.h" |
26 #include "base/task_scheduler/post_task.h" | 28 #include "base/task_scheduler/post_task.h" |
27 #include "base/threading/thread_task_runner_handle.h" | 29 #include "base/threading/thread_task_runner_handle.h" |
28 #include "base/time/time.h" | 30 #include "base/time/time.h" |
29 #include "device/bluetooth/bluez/bluetooth_service_attribute_value_bluez.h" | 31 #include "device/bluetooth/bluez/bluetooth_service_attribute_value_bluez.h" |
30 #include "device/bluetooth/dbus/bluez_dbus_manager.h" | 32 #include "device/bluetooth/dbus/bluez_dbus_manager.h" |
31 #include "device/bluetooth/dbus/fake_bluetooth_adapter_client.h" | 33 #include "device/bluetooth/dbus/fake_bluetooth_adapter_client.h" |
32 #include "device/bluetooth/dbus/fake_bluetooth_agent_manager_client.h" | 34 #include "device/bluetooth/dbus/fake_bluetooth_agent_manager_client.h" |
33 #include "device/bluetooth/dbus/fake_bluetooth_agent_service_provider.h" | 35 #include "device/bluetooth/dbus/fake_bluetooth_agent_service_provider.h" |
34 #include "device/bluetooth/dbus/fake_bluetooth_gatt_service_client.h" | 36 #include "device/bluetooth/dbus/fake_bluetooth_gatt_service_client.h" |
35 #include "device/bluetooth/dbus/fake_bluetooth_input_client.h" | 37 #include "device/bluetooth/dbus/fake_bluetooth_input_client.h" |
(...skipping 1732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1768 | 1770 |
1769 void FakeBluetoothDeviceClient::CreateTestDevice( | 1771 void FakeBluetoothDeviceClient::CreateTestDevice( |
1770 const dbus::ObjectPath& adapter_path, | 1772 const dbus::ObjectPath& adapter_path, |
1771 const base::Optional<std::string> name, | 1773 const base::Optional<std::string> name, |
1772 const std::string alias, | 1774 const std::string alias, |
1773 const std::string device_address, | 1775 const std::string device_address, |
1774 const std::vector<std::string>& service_uuids, | 1776 const std::vector<std::string>& service_uuids, |
1775 device::BluetoothTransport type) { | 1777 device::BluetoothTransport type) { |
1776 // Create a random device path. | 1778 // Create a random device path. |
1777 dbus::ObjectPath device_path; | 1779 dbus::ObjectPath device_path; |
| 1780 std::string id; |
1778 do { | 1781 do { |
1779 device_path = dbus::ObjectPath(adapter_path.value() + "/dev" + | 1782 // Construct an id that is valid according to the DBUS specification. |
1780 base::RandBytesAsString(10)); | 1783 base::Base64Encode(base::RandBytesAsString(10), &id); |
| 1784 base::RemoveChars(id, "+/=", &id); |
| 1785 device_path = dbus::ObjectPath(adapter_path.value() + "/dev" + id); |
1781 } while (std::find(device_list_.begin(), device_list_.end(), device_path) != | 1786 } while (std::find(device_list_.begin(), device_list_.end(), device_path) != |
1782 device_list_.end()); | 1787 device_list_.end()); |
1783 | 1788 |
1784 std::unique_ptr<Properties> properties( | 1789 std::unique_ptr<Properties> properties( |
1785 new Properties(base::Bind(&FakeBluetoothDeviceClient::OnPropertyChanged, | 1790 new Properties(base::Bind(&FakeBluetoothDeviceClient::OnPropertyChanged, |
1786 base::Unretained(this), device_path))); | 1791 base::Unretained(this), device_path))); |
1787 properties->adapter.ReplaceValue(adapter_path); | 1792 properties->adapter.ReplaceValue(adapter_path); |
1788 | 1793 |
1789 properties->address.ReplaceValue(device_address); | 1794 properties->address.ReplaceValue(device_address); |
1790 properties->name.ReplaceValue( | 1795 properties->name.ReplaceValue( |
1791 name.value_or("Invalid Device Name set in " | 1796 name.value_or("Invalid Device Name set in " |
1792 "FakeBluetoothDeviceClient::CreateTestDevice")); | 1797 "FakeBluetoothDeviceClient::CreateTestDevice")); |
1793 properties->name.set_valid(name.has_value()); | 1798 properties->name.set_valid(name.has_value()); |
1794 properties->alias.ReplaceValue(alias); | 1799 properties->alias.ReplaceValue(alias); |
1795 | 1800 |
1796 properties->uuids.ReplaceValue(service_uuids); | 1801 properties->uuids.ReplaceValue(service_uuids); |
| 1802 properties->bluetooth_class.ReplaceValue( |
| 1803 0x1F00u); // Unspecified Device Class |
1797 | 1804 |
1798 switch (type) { | 1805 switch (type) { |
1799 case device::BLUETOOTH_TRANSPORT_CLASSIC: | 1806 case device::BLUETOOTH_TRANSPORT_CLASSIC: |
1800 properties->type.ReplaceValue(BluetoothDeviceClient::kTypeBredr); | 1807 properties->type.ReplaceValue(BluetoothDeviceClient::kTypeBredr); |
1801 break; | 1808 break; |
1802 case device::BLUETOOTH_TRANSPORT_LE: | 1809 case device::BLUETOOTH_TRANSPORT_LE: |
1803 properties->type.ReplaceValue(BluetoothDeviceClient::kTypeLe); | 1810 properties->type.ReplaceValue(BluetoothDeviceClient::kTypeLe); |
1804 break; | 1811 break; |
1805 case device::BLUETOOTH_TRANSPORT_DUAL: | 1812 case device::BLUETOOTH_TRANSPORT_DUAL: |
1806 properties->type.ReplaceValue(BluetoothDeviceClient::kTypeDual); | 1813 properties->type.ReplaceValue(BluetoothDeviceClient::kTypeDual); |
1807 break; | 1814 break; |
1808 default: | 1815 default: |
1809 NOTREACHED(); | 1816 NOTREACHED(); |
1810 } | 1817 } |
1811 properties->type.set_valid(true); | 1818 properties->type.set_valid(true); |
1812 | 1819 |
1813 properties_map_.insert(std::make_pair(device_path, std::move(properties))); | 1820 properties_map_.insert(std::make_pair(device_path, std::move(properties))); |
1814 device_list_.push_back(device_path); | 1821 device_list_.push_back(device_path); |
1815 for (auto& observer : observers_) | 1822 for (auto& observer : observers_) |
1816 observer.DeviceAdded(device_path); | 1823 observer.DeviceAdded(device_path); |
1817 } | 1824 } |
1818 | 1825 |
1819 } // namespace bluez | 1826 } // namespace bluez |
OLD | NEW |