If the encryption times out during the re-connect process for a HOGP
device, the device is removed from the whitelist and thus will not
reconnect until it is added back to the list. On platforms that do not
have a way to reconnect to a device manually, this means the device will
never reconnect again until the stack is restarted.
This patch checks the reason for the encryption failure and does not
remove the device from the whitelist if the encryption failed to a non
authentication/key related error.
Bug:
18233442
Change-Id: Ifaec4a9224ff9281956715b38d34c2d7c3fecb01
{
tBTA_GATTC_DATA *p_buf;
- APPL_TRACE_DEBUG("bta_gattc_conn_cback: cif = %d connected = %d conn_id = %d reaosn = 0x%04x",
- gattc_if, connected, conn_id, reason);
+ if (reason != 0)
+ {
+ APPL_TRACE_WARNING("%s() - cif=%d connected=%d conn_id=%d reason=0x%04x",
+ __FUNCTION__, gattc_if, connected, conn_id, reason);
+ }
if ((p_buf = (tBTA_GATTC_DATA *) GKI_getbuf(sizeof(tBTA_GATTC_DATA))) != NULL)
{
UINT8 disc_active;
tBTA_HH_STATUS status;
+ tBTA_GATT_REASON reason;
BOOLEAN is_le_device;
tBTA_HH_LE_HID_SRVC hid_srvc[BTA_HH_LE_HID_SRVC_MAX];
UINT16 conn_id;
return;
}
p_dev_cb->status = (result == BTM_SUCCESS) ? BTA_HH_OK : BTA_HH_ERR_SEC;
+ p_dev_cb->reason = result;
bta_hh_sm_execute(p_dev_cb, BTA_HH_ENC_CMPL_EVT, NULL);
}
}
}
else
- bta_hh_le_api_disc_act(p_cb);
-
+ {
+ APPL_TRACE_ERROR("%s() - encryption failed; status=0x%04x, reason=0x%04x",
+ __FUNCTION__, p_cb->status, p_cb->reason);
+ if (!(p_cb->status == BTA_HH_ERR_SEC && p_cb->reason == BTM_ERR_PROCESSING))
+ bta_hh_le_api_disc_act(p_cb);
+ }
}
/*******************************************************************************