OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_gatt_service_service_provider.h" | 5 #include "chromeos/dbus/bluetooth_gatt_service_service_provider.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/memory/weak_ptr.h" | 10 #include "base/memory/weak_ptr.h" |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 dbus::MessageReader reader(method_call); | 93 dbus::MessageReader reader(method_call); |
94 | 94 |
95 std::string interface_name; | 95 std::string interface_name; |
96 std::string property_name; | 96 std::string property_name; |
97 if (!reader.PopString(&interface_name) || | 97 if (!reader.PopString(&interface_name) || |
98 !reader.PopString(&property_name) || | 98 !reader.PopString(&property_name) || |
99 reader.HasMoreData()) { | 99 reader.HasMoreData()) { |
100 scoped_ptr<dbus::ErrorResponse> error_response = | 100 scoped_ptr<dbus::ErrorResponse> error_response = |
101 dbus::ErrorResponse::FromMethodCall( | 101 dbus::ErrorResponse::FromMethodCall( |
102 method_call, kErrorInvalidArgs, "Expected 'ss'."); | 102 method_call, kErrorInvalidArgs, "Expected 'ss'."); |
103 response_sender.Run(error_response.PassAs<dbus::Response>()); | 103 response_sender.Run(error_response.Pass()); |
104 return; | 104 return; |
105 } | 105 } |
106 | 106 |
107 // Only the GATT service interface is allowed. | 107 // Only the GATT service interface is allowed. |
108 if (interface_name != | 108 if (interface_name != |
109 bluetooth_gatt_service::kBluetoothGattServiceInterface) { | 109 bluetooth_gatt_service::kBluetoothGattServiceInterface) { |
110 scoped_ptr<dbus::ErrorResponse> error_response = | 110 scoped_ptr<dbus::ErrorResponse> error_response = |
111 dbus::ErrorResponse::FromMethodCall( | 111 dbus::ErrorResponse::FromMethodCall( |
112 method_call, kErrorInvalidArgs, | 112 method_call, kErrorInvalidArgs, |
113 "No such interface: '" + interface_name + "'."); | 113 "No such interface: '" + interface_name + "'."); |
114 response_sender.Run(error_response.PassAs<dbus::Response>()); | 114 response_sender.Run(error_response.Pass()); |
115 return; | 115 return; |
116 } | 116 } |
117 | 117 |
118 // Return error if |property_name| is unknown. | 118 // Return error if |property_name| is unknown. |
119 if (property_name != bluetooth_gatt_service::kUUIDProperty && | 119 if (property_name != bluetooth_gatt_service::kUUIDProperty && |
120 property_name != bluetooth_gatt_service::kIncludesProperty) { | 120 property_name != bluetooth_gatt_service::kIncludesProperty) { |
121 scoped_ptr<dbus::ErrorResponse> error_response = | 121 scoped_ptr<dbus::ErrorResponse> error_response = |
122 dbus::ErrorResponse::FromMethodCall( | 122 dbus::ErrorResponse::FromMethodCall( |
123 method_call, kErrorInvalidArgs, | 123 method_call, kErrorInvalidArgs, |
124 "No such property: '" + property_name + "'."); | 124 "No such property: '" + property_name + "'."); |
125 response_sender.Run(error_response.PassAs<dbus::Response>()); | 125 response_sender.Run(error_response.Pass()); |
126 return; | 126 return; |
127 } | 127 } |
128 | 128 |
129 scoped_ptr<dbus::Response> response = | 129 scoped_ptr<dbus::Response> response = |
130 dbus::Response::FromMethodCall(method_call); | 130 dbus::Response::FromMethodCall(method_call); |
131 dbus::MessageWriter writer(response.get()); | 131 dbus::MessageWriter writer(response.get()); |
132 dbus::MessageWriter variant_writer(NULL); | 132 dbus::MessageWriter variant_writer(NULL); |
133 | 133 |
134 if (property_name == bluetooth_gatt_service::kUUIDProperty) { | 134 if (property_name == bluetooth_gatt_service::kUUIDProperty) { |
135 writer.OpenVariant("s", &variant_writer); | 135 writer.OpenVariant("s", &variant_writer); |
(...skipping 15 matching lines...) Expand all Loading... |
151 VLOG(2) << "BluetoothGattServiceServiceProvider::Set: " | 151 VLOG(2) << "BluetoothGattServiceServiceProvider::Set: " |
152 << object_path_.value(); | 152 << object_path_.value(); |
153 DCHECK(OnOriginThread()); | 153 DCHECK(OnOriginThread()); |
154 | 154 |
155 // All of the properties on this interface are read-only, so just return | 155 // All of the properties on this interface are read-only, so just return |
156 // error. | 156 // error. |
157 scoped_ptr<dbus::ErrorResponse> error_response = | 157 scoped_ptr<dbus::ErrorResponse> error_response = |
158 dbus::ErrorResponse::FromMethodCall( | 158 dbus::ErrorResponse::FromMethodCall( |
159 method_call, kErrorPropertyReadOnly, | 159 method_call, kErrorPropertyReadOnly, |
160 "All properties are read-only."); | 160 "All properties are read-only."); |
161 response_sender.Run(error_response.PassAs<dbus::Response>()); | 161 response_sender.Run(error_response.Pass()); |
162 } | 162 } |
163 | 163 |
164 // Called by dbus:: when the Bluetooth daemon fetches all properties of the | 164 // Called by dbus:: when the Bluetooth daemon fetches all properties of the |
165 // service. | 165 // service. |
166 void GetAll(dbus::MethodCall* method_call, | 166 void GetAll(dbus::MethodCall* method_call, |
167 dbus::ExportedObject::ResponseSender response_sender) { | 167 dbus::ExportedObject::ResponseSender response_sender) { |
168 VLOG(2) << "BluetoothGattServiceServiceProvider::GetAll: " | 168 VLOG(2) << "BluetoothGattServiceServiceProvider::GetAll: " |
169 << object_path_.value(); | 169 << object_path_.value(); |
170 DCHECK(OnOriginThread()); | 170 DCHECK(OnOriginThread()); |
171 | 171 |
172 dbus::MessageReader reader(method_call); | 172 dbus::MessageReader reader(method_call); |
173 | 173 |
174 std::string interface_name; | 174 std::string interface_name; |
175 if (!reader.PopString(&interface_name) || reader.HasMoreData()) { | 175 if (!reader.PopString(&interface_name) || reader.HasMoreData()) { |
176 scoped_ptr<dbus::ErrorResponse> error_response = | 176 scoped_ptr<dbus::ErrorResponse> error_response = |
177 dbus::ErrorResponse::FromMethodCall( | 177 dbus::ErrorResponse::FromMethodCall( |
178 method_call, kErrorInvalidArgs, "Expected 's'."); | 178 method_call, kErrorInvalidArgs, "Expected 's'."); |
179 response_sender.Run(error_response.PassAs<dbus::Response>()); | 179 response_sender.Run(error_response.Pass()); |
180 return; | 180 return; |
181 } | 181 } |
182 | 182 |
183 // Only the GATT service interface is allowed. | 183 // Only the GATT service interface is allowed. |
184 if (interface_name != | 184 if (interface_name != |
185 bluetooth_gatt_service::kBluetoothGattServiceInterface) { | 185 bluetooth_gatt_service::kBluetoothGattServiceInterface) { |
186 scoped_ptr<dbus::ErrorResponse> error_response = | 186 scoped_ptr<dbus::ErrorResponse> error_response = |
187 dbus::ErrorResponse::FromMethodCall( | 187 dbus::ErrorResponse::FromMethodCall( |
188 method_call, kErrorInvalidArgs, | 188 method_call, kErrorInvalidArgs, |
189 "No such interface: '" + interface_name + "'."); | 189 "No such interface: '" + interface_name + "'."); |
190 response_sender.Run(error_response.PassAs<dbus::Response>()); | 190 response_sender.Run(error_response.Pass()); |
191 return; | 191 return; |
192 } | 192 } |
193 | 193 |
194 scoped_ptr<dbus::Response> response = | 194 scoped_ptr<dbus::Response> response = |
195 dbus::Response::FromMethodCall(method_call); | 195 dbus::Response::FromMethodCall(method_call); |
196 dbus::MessageWriter writer(response.get()); | 196 dbus::MessageWriter writer(response.get()); |
197 dbus::MessageWriter array_writer(NULL); | 197 dbus::MessageWriter array_writer(NULL); |
198 dbus::MessageWriter dict_entry_writer(NULL); | 198 dbus::MessageWriter dict_entry_writer(NULL); |
199 dbus::MessageWriter variant_writer(NULL); | 199 dbus::MessageWriter variant_writer(NULL); |
200 | 200 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 const std::vector<dbus::ObjectPath>& includes) { | 271 const std::vector<dbus::ObjectPath>& includes) { |
272 if (!DBusThreadManager::Get()->IsUsingStub(DBusClientBundle::BLUETOOTH)) { | 272 if (!DBusThreadManager::Get()->IsUsingStub(DBusClientBundle::BLUETOOTH)) { |
273 return new BluetoothGattServiceServiceProviderImpl( | 273 return new BluetoothGattServiceServiceProviderImpl( |
274 bus, object_path, uuid, includes); | 274 bus, object_path, uuid, includes); |
275 } | 275 } |
276 return new FakeBluetoothGattServiceServiceProvider( | 276 return new FakeBluetoothGattServiceServiceProvider( |
277 object_path, uuid, includes); | 277 object_path, uuid, includes); |
278 } | 278 } |
279 | 279 |
280 } // namespace chromeos | 280 } // namespace chromeos |
OLD | NEW |