aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2020-08-28 21:34:08 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-08-28 21:34:08 +0000
commite59e55074c1642812fb5ba63e4f39da327fbe294 (patch)
treeb3ed3ea3ee6a796b81576c791cb41554dcc39f5d
parente8ba00c87c77aa0c9673fab17d1c5d7f9ea363dd (diff)
parente45cec1547ec05bfcfb4fcf38da380c3eca77532 (diff)
downloadbt-e59e55074c1642812fb5ba63e4f39da327fbe294.tar.gz
Merge "Send a response to an smp security request depending on the callback event" into qt-dev
-rw-r--r--stack/smp/smp_api.cc65
1 files changed, 35 insertions, 30 deletions
diff --git a/stack/smp/smp_api.cc b/stack/smp/smp_api.cc
index b701f27bb..f8e8a68b6 100644
--- a/stack/smp/smp_api.cc
+++ b/stack/smp/smp_api.cc
@@ -249,37 +249,42 @@ bool SMP_PairCancel(const RawAddress& bd_addr) {
void SMP_SecurityGrant(const RawAddress& bd_addr, uint8_t res) {
SMP_TRACE_EVENT("SMP_SecurityGrant ");
- // If JUSTWORKS, this is used to display the consent dialog
- if (smp_cb.selected_association_model == SMP_MODEL_SEC_CONN_JUSTWORKS) {
- if (res == SMP_SUCCESS) {
- smp_sm_event(&smp_cb, SMP_SC_NC_OK_EVT, NULL);
- } else {
- SMP_TRACE_WARNING("%s() - Consent dialog fails for JUSTWORKS", __func__);
- /* send pairing failure */
- tSMP_INT_DATA smp_int_data;
- smp_int_data.status = SMP_NUMERIC_COMPAR_FAIL;
- smp_sm_event(&smp_cb, SMP_AUTH_CMPL_EVT, &smp_int_data);
- }
- } else if (smp_cb.selected_association_model == SMP_MODEL_ENCRYPTION_ONLY) {
- if (res == SMP_SUCCESS) {
- smp_cb.sec_level = SMP_SEC_UNAUTHENTICATE;
-
- tSMP_KEY key;
- tSMP_INT_DATA smp_int_data;
- key.key_type = SMP_KEY_TYPE_TK;
- key.p_data = smp_cb.tk.data();
- smp_int_data.key = key;
-
- smp_cb.tk = {0};
- smp_sm_event(&smp_cb, SMP_KEY_READY_EVT, &smp_int_data);
- } else {
- SMP_TRACE_WARNING("%s() - Consent dialog fails for ENCRYPTION_ONLY",
- __func__);
- /* send pairing failure */
- tSMP_INT_DATA smp_int_data;
- smp_int_data.status = SMP_NUMERIC_COMPAR_FAIL;
- smp_sm_event(&smp_cb, SMP_AUTH_CMPL_EVT, &smp_int_data);
+ // If just showing consent dialog, send response
+ if (smp_cb.cb_evt == SMP_CONSENT_REQ_EVT) {
+ // If JUSTWORKS, this is used to display the consent dialog
+ if (smp_cb.selected_association_model == SMP_MODEL_SEC_CONN_JUSTWORKS) {
+ if (res == SMP_SUCCESS) {
+ smp_sm_event(&smp_cb, SMP_SC_NC_OK_EVT, NULL);
+ } else {
+ SMP_TRACE_WARNING("%s() - Consent dialog fails for JUSTWORKS",
+ __func__);
+ /* send pairing failure */
+ tSMP_INT_DATA smp_int_data;
+ smp_int_data.status = SMP_NUMERIC_COMPAR_FAIL;
+ smp_sm_event(&smp_cb, SMP_AUTH_CMPL_EVT, &smp_int_data);
+ }
+ } else if (smp_cb.selected_association_model == SMP_MODEL_ENCRYPTION_ONLY) {
+ if (res == SMP_SUCCESS) {
+ smp_cb.sec_level = SMP_SEC_UNAUTHENTICATE;
+
+ tSMP_KEY key;
+ tSMP_INT_DATA smp_int_data;
+ key.key_type = SMP_KEY_TYPE_TK;
+ key.p_data = smp_cb.tk.data();
+ smp_int_data.key = key;
+
+ smp_cb.tk = {0};
+ smp_sm_event(&smp_cb, SMP_KEY_READY_EVT, &smp_int_data);
+ } else {
+ SMP_TRACE_WARNING("%s() - Consent dialog fails for ENCRYPTION_ONLY",
+ __func__);
+ /* send pairing failure */
+ tSMP_INT_DATA smp_int_data;
+ smp_int_data.status = SMP_NUMERIC_COMPAR_FAIL;
+ smp_sm_event(&smp_cb, SMP_AUTH_CMPL_EVT, &smp_int_data);
+ }
}
+ return;
}
if (smp_cb.smp_over_br) {