diff options
Diffstat (limited to 'src/device.c')
-rw-r--r-- | src/device.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/device.c b/src/device.c index 82a90e05..00589006 100644 --- a/src/device.c +++ b/src/device.c @@ -1271,14 +1271,31 @@ static gboolean start_discovery(gpointer user_data) return FALSE; } -void device_schedule_service_discovery(struct btd_device *device) +void device_set_paired(DBusConnection *conn, struct btd_device *device, + struct bonding_request_info *bonding) { + dbus_bool_t paired = TRUE; + + device_set_temporary(device, FALSE); + + dbus_connection_emit_property_changed(conn, device->path, + DEVICE_INTERFACE, "Paired", + DBUS_TYPE_BOOLEAN, &paired); + if (device->discov_timer) return; - device->discov_timer = g_timeout_add(DISCOVERY_TIMER, - start_discovery, - device); + /* If we were initiators start service discovery immediately. + * However if the other end was the initator wait a few seconds + * before SDP. This is due to potential IOP issues if the other + * end starts doing SDP at the same time as us */ + if (bonding) + device_browse(device, bonding->conn, + bonding->msg, NULL); + else + device->discov_timer = g_timeout_add(DISCOVERY_TIMER, + start_discovery, + device); } int btd_register_device_driver(struct btd_device_driver *driver) |