Listen and process remote name resolving failure
[platform/upstream/bluez.git] / src / adapter.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  *
4  *  BlueZ - Bluetooth protocol stack for Linux
5  *
6  *  Copyright (C) 2006-2010  Nokia Corporation
7  *  Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
8  *
9  *
10  */
11
12 #include <stdbool.h>
13 #include <dbus/dbus.h>
14 #include <glib.h>
15 #include <lib/bluetooth.h>
16 #include <lib/sdp.h>
17
18 #define ADAPTER_INTERFACE       "org.bluez.Adapter1"
19
20 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
21 #include <bluetooth/bluetooth.h>
22 #include <bluetooth/sdp.h>
23 #include <bluetooth/hci.h>
24 #include <bluetooth/hci_lib.h>
25 #endif
26
27 #define MAX_NAME_LENGTH         248
28
29 /* Invalid SSP passkey value used to indicate negative replies */
30 #define INVALID_PASSKEY         0xffffffff
31
32 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
33 #define BT_DISC_TYPE_DEFAULT    0
34 #define BT_DISC_TYPE_BREDR_ONLY 1
35 #define BT_DISC_TYPE_LE_ONLY    2
36 #define BT_DISC_TYPE_LE_BREDR   3
37
38 #define TIZEN_FEATURE_PLATFROM_SCAN_FILTER
39 #ifdef TIZEN_FEATURE_PLATFROM_SCAN_FILTER
40
41 #define COMPANY_ID_APPLE 0x004C
42 /* Deafult value set to 16(same as vendor specific value)
43  * and value shall be changed when required */
44 #define SCAN_FILTER_SLOTS_MAX 16
45
46 #define ADV_TYPE_IND    0x00
47 #define ADV_TYPE_DIRECT_IND     0x01
48 #define ADV_TYPE_SCAN_IND       0x02
49 #define ADV_TYPE_NONCONN_IND            0x03
50 #define ADV_TYPE_SCAN_RESPONSE  0x04
51
52 typedef enum {
53         NONE_REPORT,
54         SCAN_REPORT,
55         IBEACON_REPORT,
56 } adapter_le_scan_report_type;
57
58 typedef enum {
59         LE_PASSIVE_SCAN,
60         LE_ACTIVE_SCAN,
61 } adapter_le_scan_type;
62 #endif /* TIZEN_FEATURE_PLATFROM_SCAN_FILTER */
63
64 #endif
65
66 struct btd_adapter;
67 struct btd_device;
68 struct queue;
69 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
70 typedef enum {
71         BLUETOOTH_A2DP_SOURCE_ROLE = 0,
72         BLUETOOTH_A2DP_SINK_ROLE,
73 } bluetooth_a2dp_role_t;
74 #endif
75
76 struct btd_adapter *btd_adapter_get_default(void);
77 bool btd_adapter_is_default(struct btd_adapter *adapter);
78 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
79 bluetooth_a2dp_role_t btd_adapter_get_a2dp_role(struct btd_adapter *adapter);
80 void btd_adapter_set_a2dp_role(struct btd_adapter *adapter, bluetooth_a2dp_role_t role);
81 void btd_adapter_emit_a2dp_role_changed(struct btd_adapter *adapter);
82 #endif
83 uint16_t btd_adapter_get_index(struct btd_adapter *adapter);
84
85 typedef void (*adapter_cb) (struct btd_adapter *adapter, gpointer user_data);
86
87 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
88 typedef void (*oob_ext_read_local_cb_t) (struct btd_adapter *adapter,
89                                         const uint8_t *hash192,
90                                         const uint8_t *randomizer192,
91                                         const uint8_t *hash256,
92                                         const uint8_t *randomizer256,
93                                         void *user_data);
94 typedef void (*le_oob_read_local_cb_t) (struct btd_adapter *adapter,
95                                         const uint16_t eir_len, const uint8_t *eir, void *user_data);
96 #endif
97 typedef void (*oob_read_local_cb_t) (struct btd_adapter *adapter,
98                                         const uint8_t *hash,
99                                         const uint8_t *randomizer,
100                                         void *user_data);
101 typedef void (*oob_bonding_cb_t) (struct btd_adapter *adapter,
102                                         const bdaddr_t *bdaddr, uint8_t status,
103                                         void *user_data);
104
105 struct oob_handler {
106 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
107         oob_ext_read_local_cb_t read_local_cb;
108         le_oob_read_local_cb_t le_read_local_cb;
109 #else
110         oob_read_local_cb_t read_local_cb;
111 #endif
112         oob_bonding_cb_t bonding_cb;
113         bdaddr_t remote_addr;
114         void *user_data;
115 };
116
117 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
118 #ifdef TIZEN_FEATURE_BLUEZ_BATTERY_WATCH
119 typedef enum {
120         NONE_CHARGING,
121         WIRE_CHARGING,
122         WIRELESS_CHARGING,
123 } charging_state_e;
124 #endif  /* TIZEN_FEATURE_BLUEZ_BATTERY_WATCH */
125 #endif
126
127 int adapter_init(void);
128 void adapter_cleanup(void);
129 void adapter_shutdown(void);
130
131 typedef void (*btd_disconnect_cb) (struct btd_device *device, uint8_t reason);
132 void btd_add_disconnect_cb(btd_disconnect_cb func);
133 void btd_remove_disconnect_cb(btd_disconnect_cb func);
134
135 typedef void (*btd_conn_fail_cb) (struct btd_device *device, uint8_t status);
136 void btd_add_conn_fail_cb(btd_conn_fail_cb func);
137 void btd_remove_conn_fail_cb(btd_conn_fail_cb func);
138
139 struct btd_adapter *adapter_find(const bdaddr_t *sba);
140 struct btd_adapter *adapter_find_by_id(int id);
141 void adapter_foreach(adapter_cb func, gpointer user_data);
142
143 bool btd_adapter_get_pairable(struct btd_adapter *adapter);
144 bool btd_adapter_get_powered(struct btd_adapter *adapter);
145 bool btd_adapter_get_connectable(struct btd_adapter *adapter);
146 bool btd_adapter_get_discoverable(struct btd_adapter *adapter);
147 bool btd_adapter_get_bredr(struct btd_adapter *adapter);
148
149 struct btd_gatt_database *btd_adapter_get_database(struct btd_adapter *adapter);
150
151 uint32_t btd_adapter_get_class(struct btd_adapter *adapter);
152 const char *btd_adapter_get_name(struct btd_adapter *adapter);
153 void btd_adapter_remove_device(struct btd_adapter *adapter,
154                                 struct btd_device *dev);
155 struct btd_device *btd_adapter_get_device(struct btd_adapter *adapter,
156                                         const bdaddr_t *addr,
157                                         uint8_t addr_type);
158 sdp_list_t *btd_adapter_get_services(struct btd_adapter *adapter);
159
160 struct btd_device *btd_adapter_find_device(struct btd_adapter *adapter,
161                                                         const bdaddr_t *dst,
162                                                         uint8_t dst_type);
163 struct btd_device *btd_adapter_find_device_by_path(struct btd_adapter *adapter,
164                                                    const char *path);
165
166 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
167 void btd_adapter_update_found_device(struct btd_adapter *adapter,
168                                         const bdaddr_t *bdaddr,
169                                         uint8_t bdaddr_type, int8_t rssi,
170                                         bool confirm, bool legacy, uint8_t adv_type,
171                                         bool name_resolve_failed,
172                                         const uint8_t *data, uint8_t data_len,
173                                         bool monitoring);
174 #else
175 void btd_adapter_update_found_device(struct btd_adapter *adapter,
176                                         const bdaddr_t *bdaddr,
177                                         uint8_t bdaddr_type, int8_t rssi,
178                                         bool confirm, bool legacy,
179                                         bool not_connectable,
180                                         bool name_resolve_failed,
181                                         const uint8_t *data, uint8_t data_len,
182                                         bool monitored);
183 #endif
184 const char *adapter_get_path(struct btd_adapter *adapter);
185 const bdaddr_t *btd_adapter_get_address(struct btd_adapter *adapter);
186 uint8_t btd_adapter_get_address_type(struct btd_adapter *adapter);
187 const char *btd_adapter_get_storage_dir(struct btd_adapter *adapter);
188 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
189 const bdaddr_t *btd_adapter_get_le_address(struct btd_adapter *adapter);
190 uint8_t btd_adapter_get_le_address_type(struct btd_adapter * adapter);
191 #endif
192 int adapter_set_name(struct btd_adapter *adapter, const char *name);
193
194 int adapter_service_add(struct btd_adapter *adapter, sdp_record_t *rec);
195 void adapter_service_remove(struct btd_adapter *adapter, uint32_t handle);
196
197 struct agent *adapter_get_agent(struct btd_adapter *adapter);
198
199 bool btd_adapter_uuid_is_allowed(struct btd_adapter *adapter, const char *uuid);
200
201 struct btd_adapter *btd_adapter_ref(struct btd_adapter *adapter);
202 void btd_adapter_unref(struct btd_adapter *adapter);
203
204 void btd_adapter_set_class(struct btd_adapter *adapter, uint8_t major,
205                                                         uint8_t minor);
206
207 struct btd_adapter_driver {
208         const char *name;
209         int (*probe)(struct btd_adapter *adapter);
210         void (*remove)(struct btd_adapter *adapter);
211         void (*resume)(struct btd_adapter *adapter);
212         void (*device_added)(struct btd_adapter *adapter,
213                                                 struct btd_device *device);
214         void (*device_removed)(struct btd_adapter *adapter,
215                                                 struct btd_device *device);
216         void (*device_resolved)(struct btd_adapter *adapter,
217                                                 struct btd_device *device);
218 };
219
220 void device_resolved_drivers(struct btd_adapter *adapter,
221                                                 struct btd_device *device);
222 typedef void (*service_auth_cb) (DBusError *derr, void *user_data);
223
224 void adapter_add_profile(struct btd_adapter *adapter, gpointer p);
225 void adapter_remove_profile(struct btd_adapter *adapter, gpointer p);
226 int btd_register_adapter_driver(struct btd_adapter_driver *driver);
227 void btd_unregister_adapter_driver(struct btd_adapter_driver *driver);
228 guint btd_request_authorization(const bdaddr_t *src, const bdaddr_t *dst,
229                 const char *uuid, service_auth_cb cb, void *user_data);
230 guint btd_request_authorization_cable_configured(const bdaddr_t *src, const bdaddr_t *dst,
231                 const char *uuid, service_auth_cb cb, void *user_data);
232 int btd_cancel_authorization(guint id);
233
234 int btd_adapter_restore_powered(struct btd_adapter *adapter);
235
236 typedef ssize_t (*btd_adapter_pin_cb_t) (struct btd_adapter *adapter,
237                         struct btd_device *dev, char *out, bool *display,
238                                                         unsigned int attempt);
239 void btd_adapter_register_pin_cb(struct btd_adapter *adapter,
240                                                 btd_adapter_pin_cb_t cb);
241 void btd_adapter_unregister_pin_cb(struct btd_adapter *adapter,
242                                                 btd_adapter_pin_cb_t cb);
243
244 struct btd_adapter_pin_cb_iter *btd_adapter_pin_cb_iter_new(
245                                                 struct btd_adapter *adapter);
246 void btd_adapter_pin_cb_iter_free(struct btd_adapter_pin_cb_iter *iter);
247 bool btd_adapter_pin_cb_iter_end(struct btd_adapter_pin_cb_iter *iter);
248
249 typedef void (*btd_msd_cb_t) (struct btd_adapter *adapter,
250                                                         struct btd_device *dev,
251                                                         uint16_t company,
252                                                         const uint8_t *data,
253                                                         uint8_t data_len);
254 void btd_adapter_register_msd_cb(struct btd_adapter *adapter,
255                                                         btd_msd_cb_t cb);
256 void btd_adapter_unregister_msd_cb(struct btd_adapter *adapter,
257                                                         btd_msd_cb_t cb);
258
259 /* If TRUE, enables fast connectabe, i.e. reduces page scan interval and changes
260  * type. If FALSE, disables fast connectable, i.e. sets page scan interval and
261  * type to default values. Valid for both connectable and discoverable modes. */
262 int btd_adapter_set_fast_connectable(struct btd_adapter *adapter,
263                                                         gboolean enable);
264
265 int btd_adapter_read_clock(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
266                                 int which, int timeout, uint32_t *clock,
267                                 uint16_t *accuracy);
268
269 int btd_adapter_block_address(struct btd_adapter *adapter,
270                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
271 int btd_adapter_unblock_address(struct btd_adapter *adapter,
272                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
273
274 int btd_adapter_disconnect_device(struct btd_adapter *adapter,
275                                                         const bdaddr_t *bdaddr,
276                                                         uint8_t bdaddr_type);
277
278 int btd_adapter_remove_bonding(struct btd_adapter *adapter,
279                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
280
281 int btd_adapter_pincode_reply(struct btd_adapter *adapter,
282                                         const  bdaddr_t *bdaddr,
283                                         const char *pin, size_t pin_len);
284 int btd_adapter_confirm_reply(struct btd_adapter *adapter,
285                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type,
286                                 gboolean success);
287 int btd_adapter_passkey_reply(struct btd_adapter *adapter,
288                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type,
289                                 uint32_t passkey);
290
291 int adapter_create_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
292                                         uint8_t addr_type, uint8_t io_cap);
293
294 int adapter_bonding_attempt(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
295                                         uint8_t addr_type, uint8_t io_cap);
296
297 int adapter_cancel_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
298                                                         uint8_t addr_type);
299
300 int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap);
301
302 int btd_adapter_read_local_oob_data(struct btd_adapter *adapter);
303
304 int btd_adapter_le_read_local_oob_data(struct btd_adapter *adapter);
305
306 int btd_adapter_add_remote_oob_data(struct btd_adapter *adapter,
307                                         const bdaddr_t *bdaddr,
308                                         uint8_t *hash, uint8_t *randomizer);
309
310 int btd_adapter_remove_remote_oob_data(struct btd_adapter *adapter,
311                                                         const bdaddr_t *bdaddr);
312
313 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
314 int btd_adapter_add_remote_oob_ext_data(struct btd_adapter *adapter,
315                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type,
316                                 uint8_t *hash192, uint8_t *randomizer192,
317                                 uint8_t *hash256, uint8_t *randomizer256);
318
319 int btd_adapter_remove_remote_oob_ext_data(struct btd_adapter *adapter,
320                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
321 #endif
322
323 int btd_adapter_gatt_server_start(struct btd_adapter *adapter);
324 void btd_adapter_gatt_server_stop(struct btd_adapter *adapter);
325
326 bool btd_adapter_ssp_enabled(struct btd_adapter *adapter);
327
328 int adapter_connect_list_add(struct btd_adapter *adapter,
329                                         struct btd_device *device);
330 void adapter_connect_list_remove(struct btd_adapter *adapter,
331                                                 struct btd_device *device);
332 typedef void (*adapter_set_device_flags_func_t)(uint8_t status, uint16_t length,
333                                                 const void *param,
334                                                 void *user_data);
335 void adapter_set_device_flags(struct btd_adapter *adapter,
336                                 struct btd_device *device, uint32_t flags,
337                                 adapter_set_device_flags_func_t func,
338                                 void *user_data);
339 void adapter_auto_connect_add(struct btd_adapter *adapter,
340                                         struct btd_device *device);
341 void adapter_auto_connect_remove(struct btd_adapter *adapter,
342                                         struct btd_device *device);
343 void adapter_accept_list_add(struct btd_adapter *adapter,
344                                                 struct btd_device *dev);
345 void adapter_accept_list_remove(struct btd_adapter *adapter,
346                                                 struct btd_device *dev);
347
348 void btd_adapter_set_oob_handler(struct btd_adapter *adapter,
349                                                 struct oob_handler *handler);
350 gboolean btd_adapter_check_oob_handler(struct btd_adapter *adapter);
351
352 void btd_adapter_for_each_device(struct btd_adapter *adapter,
353                         void (*cb)(struct btd_device *device, void *data),
354                         void *data);
355
356 bool btd_le_connect_before_pairing(void);
357
358 enum kernel_features {
359         KERNEL_CONN_CONTROL             = 1 << 0,
360         KERNEL_BLOCKED_KEYS_SUPPORTED   = 1 << 1,
361         KERNEL_SET_SYSTEM_CONFIG        = 1 << 2,
362         KERNEL_EXP_FEATURES             = 1 << 3,
363         KERNEL_HAS_RESUME_EVT           = 1 << 4,
364         KERNEL_HAS_EXT_ADV_ADD_CMDS     = 1 << 5,
365         KERNEL_HAS_CONTROLLER_CAP_CMD   = 1 << 6,
366 };
367
368 bool btd_has_kernel_features(uint32_t feature);
369
370 bool btd_adapter_set_allowed_uuids(struct btd_adapter *adapter,
371                                                 struct queue *uuids);
372 bool btd_adapter_is_uuid_allowed(struct btd_adapter *adapter,
373                                                 const char *uuid_str);
374 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
375 void adapter_send_event(const char *event);
376
377 int btd_adapter_connect_ipsp(struct btd_adapter *adapter,
378                                                 const bdaddr_t *bdaddr,
379                                                 uint8_t bdaddr_type);
380 int btd_adapter_disconnect_ipsp(struct btd_adapter *adapter,
381                                                 const bdaddr_t *bdaddr,
382                                                 uint8_t bdaddr_type);
383
384 uint8_t btd_adapter_get_rpa_res_support_value(
385                 struct btd_adapter *adapter);
386
387 int btd_adapter_set_dev_rpa_res_support(struct btd_adapter *adapter,
388                                                 struct btd_device *device);
389
390 typedef void (*read_max_data_length_cb_t) (struct btd_adapter *adapter,
391                                         int result,
392                                         const uint16_t max_txOctects,
393                                         const uint16_t max_txTime,
394                                         const uint16_t max_rxOctects,
395                                         const uint16_t max_rxTime,
396                                         void *user_data);
397
398 struct le_data_length_read_handler {
399         read_max_data_length_cb_t read_callback;
400         void *user_data;
401 };
402
403 typedef void (*read_host_suggested_default_data_length_cb_t) (struct btd_adapter *adapter,
404                                         const uint16_t def_txOctects,
405                                         const uint16_t def_txTime,
406                                         void *user_data);
407
408 struct le_data_length_read_default_data_length_handler {
409         read_host_suggested_default_data_length_cb_t read_callback;
410         void *user_data;
411 };
412
413 int btd_adapter_le_set_data_length(struct btd_adapter *adapter, bdaddr_t *bdaddr,
414                         uint16_t max_tx_octets, uint16_t max_tx_time);
415
416 void adapter_check_version(struct btd_adapter *adapter, uint8_t hci_ver);
417
418 int btd_adapter_set_streaming_mode(struct btd_adapter *adapter,
419                                    const bdaddr_t *bdaddr, gboolean enable);
420
421 #ifdef TIZEN_FEATURE_BLUEZ_BATTERY_WATCH
422 charging_state_e get_charging_state(struct btd_adapter *adapter);
423 #endif  /* TIZEN_FEATURE_BLUEZ_BATTERY_WATCH */
424 #endif