diff options
Diffstat (limited to 'hcid/dbus.c')
-rw-r--r-- | hcid/dbus.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/hcid/dbus.c b/hcid/dbus.c index 7f72d7cc..ec79a932 100644 --- a/hcid/dbus.c +++ b/hcid/dbus.c @@ -1980,7 +1980,34 @@ void create_bond_req_exit(const char *name, struct hci_dbus_data *pdata) snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, pdata->dev_id); - debug("PasskeyAgent at %s exited before bonding was completed", name); + debug("CreateConnection requestor at %s exited before bonding was completed", name); cancel_passkey_agent_requests(pdata->passkey_agents, path, &pdata->bonding->bdaddr); + + if (pdata->bonding->disconnect) { + struct slist *l; + + l = slist_find(pdata->active_conn, &pdata->bonding->bdaddr, active_conn_find_by_bdaddr); + if (l) { + struct active_conn_info *con = l->data; + struct hci_req_data *data; + disconnect_cp cp; + memset(&cp, 0, sizeof(cp)); + + cp.handle = con->handle; + cp.reason = HCI_OE_USER_ENDED_CONNECTION; + + data = hci_req_data_new(pdata->dev_id, &pdata->bonding->bdaddr, OGF_LINK_CTL, + OCF_DISCONNECT, EVT_DISCONN_COMPLETE, + &cp, DISCONNECT_CP_SIZE); + + hci_req_queue_append(data); + } + } + + bonding_request_free(pdata->bonding); + pdata->bonding = NULL; + + free(pdata->requestor_name); + pdata->requestor_name = NULL; } |