| 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 #include "chromeos/dbus/bluetooth_out_of_band_client.h" | 5 #include "chromeos/dbus/bluetooth_out_of_band_client.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "chromeos/dbus/bluetooth_adapter_client.h" | 12 #include "chromeos/dbus/bluetooth_adapter_client.h" |
| 13 #include "chromeos/dbus/bluetooth_out_of_band_pairing_data.h" | |
| 14 #include "dbus/bus.h" | 13 #include "dbus/bus.h" |
| 15 #include "dbus/message.h" | 14 #include "dbus/message.h" |
| 16 #include "dbus/object_path.h" | 15 #include "dbus/object_path.h" |
| 17 #include "dbus/object_proxy.h" | 16 #include "dbus/object_proxy.h" |
| 17 #include "device/bluetooth/bluetooth_out_of_band_pairing_data.h" |
| 18 #include "third_party/cros_system_api/dbus/service_constants.h" | 18 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 19 | 19 |
| 20 namespace chromeos { | 20 namespace chromeos { |
| 21 | 21 |
| 22 // The BluetoothOutOfBandClient implementation used in production. | 22 // The BluetoothOutOfBandClient implementation used in production. |
| 23 class BluetoothOutOfBandClientImpl: public BluetoothOutOfBandClient { | 23 class BluetoothOutOfBandClientImpl: public BluetoothOutOfBandClient { |
| 24 public: | 24 public: |
| 25 explicit BluetoothOutOfBandClientImpl(dbus::Bus* bus) | 25 explicit BluetoothOutOfBandClientImpl(dbus::Bus* bus) |
| 26 : bus_(bus), | 26 : bus_(bus), |
| 27 weak_ptr_factory_(this) {} | 27 weak_ptr_factory_(this) {} |
| (...skipping 14 matching lines...) Expand all Loading... |
| 42 &method_call, | 42 &method_call, |
| 43 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 43 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 44 base::Bind(&BluetoothOutOfBandClientImpl::OnReadLocalData, | 44 base::Bind(&BluetoothOutOfBandClientImpl::OnReadLocalData, |
| 45 weak_ptr_factory_.GetWeakPtr(), callback)); | 45 weak_ptr_factory_.GetWeakPtr(), callback)); |
| 46 } | 46 } |
| 47 | 47 |
| 48 // BluetoothOutOfBandClient override. | 48 // BluetoothOutOfBandClient override. |
| 49 virtual void AddRemoteData( | 49 virtual void AddRemoteData( |
| 50 const dbus::ObjectPath& object_path, | 50 const dbus::ObjectPath& object_path, |
| 51 const std::string& address, | 51 const std::string& address, |
| 52 const BluetoothOutOfBandPairingData& data, | 52 const device::BluetoothOutOfBandPairingData& data, |
| 53 const SuccessCallback& callback) OVERRIDE { | 53 const SuccessCallback& callback) OVERRIDE { |
| 54 dbus::MethodCall method_call( | 54 dbus::MethodCall method_call( |
| 55 bluetooth_outofband::kBluetoothOutOfBandInterface, | 55 bluetooth_outofband::kBluetoothOutOfBandInterface, |
| 56 bluetooth_outofband::kAddRemoteData); | 56 bluetooth_outofband::kAddRemoteData); |
| 57 | 57 |
| 58 dbus::MessageWriter writer(&method_call); | 58 dbus::MessageWriter writer(&method_call); |
| 59 writer.AppendString(address); | 59 writer.AppendString(address); |
| 60 writer.AppendArrayOfBytes(data.hash, kBluetoothOutOfBandPairingDataSize); | 60 writer.AppendArrayOfBytes( |
| 61 writer.AppendArrayOfBytes(data.randomizer, | 61 data.hash, device::kBluetoothOutOfBandPairingDataSize); |
| 62 kBluetoothOutOfBandPairingDataSize); | 62 writer.AppendArrayOfBytes( |
| 63 data.randomizer, device::kBluetoothOutOfBandPairingDataSize); |
| 63 | 64 |
| 64 dbus::ObjectProxy* object_proxy = GetObjectProxy(object_path); | 65 dbus::ObjectProxy* object_proxy = GetObjectProxy(object_path); |
| 65 | 66 |
| 66 object_proxy->CallMethod( | 67 object_proxy->CallMethod( |
| 67 &method_call, | 68 &method_call, |
| 68 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 69 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 69 base::Bind(&BluetoothOutOfBandClientImpl::ResponseToSuccessCallback, | 70 base::Bind(&BluetoothOutOfBandClientImpl::ResponseToSuccessCallback, |
| 70 weak_ptr_factory_.GetWeakPtr(), callback)); | 71 weak_ptr_factory_.GetWeakPtr(), callback)); |
| 71 } | 72 } |
| 72 | 73 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 bluetooth_outofband::kBluetoothOutOfBandServiceName, object_path); | 109 bluetooth_outofband::kBluetoothOutOfBandServiceName, object_path); |
| 109 | 110 |
| 110 object_map_[object_path] = object_proxy; | 111 object_map_[object_path] = object_proxy; |
| 111 return object_proxy; | 112 return object_proxy; |
| 112 } | 113 } |
| 113 | 114 |
| 114 // Called when a response from ReadLocalOutOfBandPairingData() is received. | 115 // Called when a response from ReadLocalOutOfBandPairingData() is received. |
| 115 void OnReadLocalData(const DataCallback& callback, | 116 void OnReadLocalData(const DataCallback& callback, |
| 116 dbus::Response* response) { | 117 dbus::Response* response) { |
| 117 bool success = false; | 118 bool success = false; |
| 118 BluetoothOutOfBandPairingData data; | 119 device::BluetoothOutOfBandPairingData data; |
| 119 if (response != NULL) { | 120 if (response != NULL) { |
| 120 dbus::MessageReader reader(response); | 121 dbus::MessageReader reader(response); |
| 121 uint8_t* bytes = NULL; | 122 uint8_t* bytes = NULL; |
| 122 size_t length = kBluetoothOutOfBandPairingDataSize; | 123 size_t length = device::kBluetoothOutOfBandPairingDataSize; |
| 123 if (reader.PopArrayOfBytes(&bytes, &length)) { | 124 if (reader.PopArrayOfBytes(&bytes, &length)) { |
| 124 if (length == kBluetoothOutOfBandPairingDataSize) { | 125 if (length == device::kBluetoothOutOfBandPairingDataSize) { |
| 125 memcpy(&data.hash, bytes, length); | 126 memcpy(&data.hash, bytes, length); |
| 126 if (reader.PopArrayOfBytes(&bytes, &length)) { | 127 if (reader.PopArrayOfBytes(&bytes, &length)) { |
| 127 if (length == kBluetoothOutOfBandPairingDataSize) { | 128 if (length == device::kBluetoothOutOfBandPairingDataSize) { |
| 128 memcpy(&data.randomizer, bytes, length); | 129 memcpy(&data.randomizer, bytes, length); |
| 129 success = true; | 130 success = true; |
| 130 } | 131 } |
| 131 } | 132 } |
| 132 } | 133 } |
| 133 } | 134 } |
| 134 } | 135 } |
| 135 callback.Run(data, success); | 136 callback.Run(data, success); |
| 136 } | 137 } |
| 137 | 138 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 155 | 156 |
| 156 // The BluetoothOutOfBandClient implementation used on Linux desktop, which does | 157 // The BluetoothOutOfBandClient implementation used on Linux desktop, which does |
| 157 // nothing. | 158 // nothing. |
| 158 class BluetoothOutOfBandClientStubImpl : public BluetoothOutOfBandClient { | 159 class BluetoothOutOfBandClientStubImpl : public BluetoothOutOfBandClient { |
| 159 public: | 160 public: |
| 160 // BluetoothOutOfBandClient override. | 161 // BluetoothOutOfBandClient override. |
| 161 virtual void ReadLocalData( | 162 virtual void ReadLocalData( |
| 162 const dbus::ObjectPath& object_path, | 163 const dbus::ObjectPath& object_path, |
| 163 const DataCallback& callback) OVERRIDE { | 164 const DataCallback& callback) OVERRIDE { |
| 164 VLOG(1) << "ReadLocalData: " << object_path.value(); | 165 VLOG(1) << "ReadLocalData: " << object_path.value(); |
| 165 BluetoothOutOfBandPairingData data; | 166 device::BluetoothOutOfBandPairingData data; |
| 166 callback.Run(data, false); | 167 callback.Run(data, false); |
| 167 } | 168 } |
| 168 | 169 |
| 169 // BluetoothOutOfBandClient override. | 170 // BluetoothOutOfBandClient override. |
| 170 virtual void AddRemoteData( | 171 virtual void AddRemoteData( |
| 171 const dbus::ObjectPath& object_path, | 172 const dbus::ObjectPath& object_path, |
| 172 const std::string& address, | 173 const std::string& address, |
| 173 const BluetoothOutOfBandPairingData& data, | 174 const device::BluetoothOutOfBandPairingData& data, |
| 174 const SuccessCallback& callback) OVERRIDE { | 175 const SuccessCallback& callback) OVERRIDE { |
| 175 VLOG(1) << "AddRemoteData: " << object_path.value(); | 176 VLOG(1) << "AddRemoteData: " << object_path.value(); |
| 176 callback.Run(false); | 177 callback.Run(false); |
| 177 } | 178 } |
| 178 | 179 |
| 179 // BluetoothOutOfBandClient override. | 180 // BluetoothOutOfBandClient override. |
| 180 virtual void RemoveRemoteData( | 181 virtual void RemoveRemoteData( |
| 181 const dbus::ObjectPath& object_path, | 182 const dbus::ObjectPath& object_path, |
| 182 const std::string& address, | 183 const std::string& address, |
| 183 const SuccessCallback& callback) OVERRIDE { | 184 const SuccessCallback& callback) OVERRIDE { |
| 184 VLOG(1) << "RemoveRemoteData: " << object_path.value(); | 185 VLOG(1) << "RemoveRemoteData: " << object_path.value(); |
| 185 callback.Run(false); | 186 callback.Run(false); |
| 186 } | 187 } |
| 187 }; | 188 }; |
| 188 | 189 |
| 189 BluetoothOutOfBandClient::BluetoothOutOfBandClient() {} | 190 BluetoothOutOfBandClient::BluetoothOutOfBandClient() {} |
| 190 | 191 |
| 191 BluetoothOutOfBandClient::~BluetoothOutOfBandClient() {} | 192 BluetoothOutOfBandClient::~BluetoothOutOfBandClient() {} |
| 192 | 193 |
| 193 BluetoothOutOfBandClient* BluetoothOutOfBandClient::Create( | 194 BluetoothOutOfBandClient* BluetoothOutOfBandClient::Create( |
| 194 DBusClientImplementationType type, | 195 DBusClientImplementationType type, |
| 195 dbus::Bus* bus) { | 196 dbus::Bus* bus) { |
| 196 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 197 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
| 197 return new BluetoothOutOfBandClientImpl(bus); | 198 return new BluetoothOutOfBandClientImpl(bus); |
| 198 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 199 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
| 199 return new BluetoothOutOfBandClientStubImpl(); | 200 return new BluetoothOutOfBandClientStubImpl(); |
| 200 } | 201 } |
| 201 | 202 |
| 202 } // namespace chromeos | 203 } // namespace chromeos |
| OLD | NEW |