summaryrefslogtreecommitdiffstats
path: root/btif
diff options
context:
space:
mode:
authorGanesh Ganapathi Batta <ganeshg@broadcom.com>2012-08-22 11:52:57 -0700
committerMatthew Xie <mattx@google.com>2012-08-23 14:15:06 -0700
commit31ef575a7f5db472c832d19de69c67430cc570b0 (patch)
treea28db27160e3eede564c63b23c7737d0728792c5 /btif
parent2d85ba49fc44bf713bd3e13aeb97f496196af4e3 (diff)
downloadexternal_bluetooth_bluedroid-31ef575a7f5db472c832d19de69c67430cc570b0.zip
external_bluetooth_bluedroid-31ef575a7f5db472c832d19de69c67430cc570b0.tar.gz
external_bluetooth_bluedroid-31ef575a7f5db472c832d19de69c67430cc570b0.tar.bz2
Do not send Bond state change evt after SDP completion if security upgrade is in progress
In mid of security upgrade, sending BOND_STATUS_BONDED to java dismisses Pairing confirmation dialog and results in security upgrade failure. Change-Id: If2a3858c6811eaa243f1c67d055862a634ccbb45
Diffstat (limited to 'btif')
-rwxr-xr-xbtif/src/btif_dm.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/btif/src/btif_dm.c b/btif/src/btif_dm.c
index a1ff3f3..d31e1ca 100755
--- a/btif/src/btif_dm.c
+++ b/btif/src/btif_dm.c
@@ -96,6 +96,7 @@ typedef struct {
UINT8 is_ssp;
UINT8 autopair_attempts;
UINT8 is_local_initiated;
+ UINT8 bonded_pending_sdp;
} btif_dm_pairing_cb_t;
typedef struct {
@@ -674,6 +675,7 @@ static void btif_dm_ssp_cfm_req_evt(tBTA_DM_SP_CFM_REQ *p_ssp_cfm_req)
cod = COD_UNCLASSIFIED;
}
+ pairing_cb.bonded_pending_sdp = FALSE;
HAL_CBACK(bt_hal_cbacks, ssp_request_cb, &bd_addr, &bd_name, cod,
(p_ssp_cfm_req->just_works ? BT_SSP_VARIANT_CONSENT : BT_SSP_VARIANT_PASSKEY_CONFIRMATION),
p_ssp_cfm_req->num_val);
@@ -749,6 +751,7 @@ static void btif_dm_auth_cmpl_evt (tBTA_DM_AUTH_CMPL *p_auth_cmpl)
state = BT_BOND_STATE_BONDED;
/* Trigger SDP on the device */
+ pairing_cb.bonded_pending_sdp = TRUE;
btif_dm_get_remote_services(&bd_addr);
/* Do not call bond_state_changed_cb yet. Wait till fetch remote service is complete */
}
@@ -1005,10 +1008,12 @@ static void btif_dm_search_services_evt(UINT16 event, char *p_param)
** bond_state_changed needs to be sent prior to remote_device_property
*/
if ((pairing_cb.state == BT_BOND_STATE_BONDING) &&
- bdcmp(p_data->disc_res.bd_addr, pairing_cb.bd_addr) == 0)
+ (bdcmp(p_data->disc_res.bd_addr, pairing_cb.bd_addr) == 0)&&
+ pairing_cb.bonded_pending_sdp == TRUE)
{
BTIF_TRACE_DEBUG1("%s Remote Service SDP done. Call bond_state_changed_cb BONDED",
__FUNCTION__);
+ pairing_cb.bonded_pending_sdp = FALSE;
bond_state_changed(BT_STATUS_SUCCESS, &bd_addr, BT_BOND_STATE_BONDED);
}