diff options
author | Hemant Gupta <hemant.gupta@stericsson.com> | 2012-04-10 15:43:27 +0530 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2012-04-10 13:28:05 +0300 |
commit | 1a56e362e4700f1193f2bb9069b413c85d3885bc (patch) | |
tree | da5dd5c2ec0e0dec67d73f2e208acd348379d48c /plugins | |
parent | d22d083d6dd681f8d25eb806d4ec91853475ee06 (diff) | |
download | bluez-1a56e362e4700f1193f2bb9069b413c85d3885bc.tar.gz bluez-1a56e362e4700f1193f2bb9069b413c85d3885bc.tar.xz bluez-1a56e362e4700f1193f2bb9069b413c85d3885bc.zip |
mgmtops: Handle Start Discovery Complete in case of failure
This patch adds handling of start discovery complete event in cases
when discovery fails to get started.
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/mgmtops.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/plugins/mgmtops.c b/plugins/mgmtops.c index c08117f8..1601bf83 100644 --- a/plugins/mgmtops.c +++ b/plugins/mgmtops.c @@ -1255,6 +1255,34 @@ static void read_local_oob_data_complete(int sk, uint16_t index, void *buf, oob_read_local_data_complete(adapter, rp->hash, rp->randomizer); } +static void start_discovery_complete(int sk, uint16_t index, uint8_t status, + void *buf, size_t len) +{ + uint8_t *type = buf; + struct btd_adapter *adapter; + + if (len != sizeof(*type)) { + error("start_discovery_complete event size mismatch " + "(%zu != %zu)", len, sizeof(*type)); + return; + } + + DBG("hci%u type %u status %u", index, *type, status); + + if (index > max_index) { + error("Invalid index %u in start_discovery_complete", index); + return; + } + + if (!status) + return; + + adapter = manager_find_adapter_by_id(index); + if (adapter) + /* Start discovery failed, inform upper layers. */ + adapter_set_discovering(adapter, FALSE); +} + static void read_local_oob_data_failed(int sk, uint16_t index) { struct btd_adapter *adapter; @@ -1421,7 +1449,7 @@ static void mgmt_cmd_complete(int sk, uint16_t index, void *buf, size_t len) DBG("set_fast_connectable complete"); break; case MGMT_OP_START_DISCOVERY: - DBG("start_discovery complete"); + start_discovery_complete(sk, index, ev->status, ev->data, len); break; case MGMT_OP_STOP_DISCOVERY: DBG("stop_discovery complete"); |