summaryrefslogtreecommitdiffstats
path: root/stack/btm
diff options
context:
space:
mode:
authorNitin Arora <niarora@codeaurora.org>2015-07-14 16:04:29 -0700
committerLinux Build Service Account <lnxbuild@localhost>2015-10-06 03:22:11 -0600
commitfdd7109bc697e1e5e9c8a6216a3a0ae7f720b24b (patch)
tree5a3dd2791f7fd9aa0a965551392c10140514b2a6 /stack/btm
parentc7d8ccd8eccb3d5edfc49edf4273359139485239 (diff)
downloadandroid_system_bt-fdd7109bc697e1e5e9c8a6216a3a0ae7f720b24b.tar.gz
android_system_bt-fdd7109bc697e1e5e9c8a6216a3a0ae7f720b24b.tar.bz2
android_system_bt-fdd7109bc697e1e5e9c8a6216a3a0ae7f720b24b.zip
Bluetooth: Prevent API callbacks due to Encryption complete
This change prevents the callbacks to BTIF after security request triggers the encryption complete event, thus causing the Cache refresh and rediscovery Change-Id: I4558abdf06b9339bdf5c82e955b0f21827679b6e
Diffstat (limited to 'stack/btm')
-rw-r--r--stack/btm/btm_ble.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/stack/btm/btm_ble.c b/stack/btm/btm_ble.c
index 14c6a723d..42486e081 100644
--- a/stack/btm/btm_ble.c
+++ b/stack/btm/btm_ble.c
@@ -1973,6 +1973,7 @@ UINT8 btm_proc_smp_cback(tSMP_EVT event, BD_ADDR bd_addr, tSMP_EVT_DATA *p_data)
{
tBTM_SEC_DEV_REC *p_dev_rec = btm_find_dev (bd_addr);
UINT8 res = 0;
+ BOOLEAN skip_cmpl_cback = FALSE;
BTM_TRACE_DEBUG ("btm_proc_smp_cback event = %d", event);
@@ -2003,12 +2004,22 @@ UINT8 btm_proc_smp_cback(tSMP_EVT event, BD_ADDR bd_addr, tSMP_EVT_DATA *p_data)
break;
}
memcpy (btm_cb.pairing_bda, bd_addr, BD_ADDR_LEN);
+ btm_cb.pairing_state = BTM_PAIR_STATE_WAIT_AUTH_COMPLETE;
p_dev_rec->sec_state = BTM_SEC_STATE_AUTHENTICATING;
btm_cb.pairing_flags |= BTM_PAIR_FLAGS_LE_ACTIVE;
/* fall through */
case SMP_COMPLT_EVT:
- if (btm_cb.api.p_le_callback)
+ if(event == SMP_COMPLT_EVT)
+ {
+ if ((p_data->cmplt.reason == SMP_SUCCESS && p_data->cmplt.sec_level == 0)||
+ (btm_cb.pairing_state == BTM_PAIR_STATE_IDLE))
+ {
+ BTM_TRACE_DEBUG("%s, SMP CMPL due to encryption", __func__);
+ skip_cmpl_cback = TRUE;
+ }
+ }
+ if (btm_cb.api.p_le_callback && !skip_cmpl_cback)
{
/* the callback function implementation may change the IO capability... */
BTM_TRACE_DEBUG ("btm_cb.api.p_le_callback=0x%x", btm_cb.api.p_le_callback );