From ceac9ce032fbcd49c7776a1046c36b234f7e193f Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Fri, 25 Sep 2020 16:24:52 -0700 Subject: [PATCH] SDP: Move L2cap error handling to one place Bug: 159815595 Tag: #refactor Test: compile & verify basic functions working Change-Id: I903127f07ae97349d1fa7625d20835b46dbe9063 --- stack/sdp/sdp_main.cc | 57 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/stack/sdp/sdp_main.cc b/stack/sdp/sdp_main.cc index f706d538b..011fbc52d 100644 --- a/stack/sdp/sdp_main.cc +++ b/stack/sdp/sdp_main.cc @@ -127,6 +127,38 @@ static void sdp_connect_ind(const RawAddress& bd_addr, uint16_t l2cap_cid, L2CA_ConnectRsp(bd_addr, l2cap_id, l2cap_cid, L2CAP_CONN_OK, L2CAP_CONN_OK); } +static void sdp_on_l2cap_error(uint16_t l2cap_cid, uint16_t result) { + tCONN_CB* p_ccb = sdpu_find_ccb_by_cid(l2cap_cid); + if (p_ccb->con_state == SDP_STATE_CONN_SETUP) { + // If we see an error while waiting for connection response + SDP_TRACE_WARNING("SDP - Rcvd conn cnf with error: 0x%x CID 0x%x", result, + p_ccb->connection_id); + + /* Tell the user if there is a callback */ + if (p_ccb->p_cb || p_ccb->p_cb2) { + uint16_t err = -1; + if ((result == HCI_ERR_HOST_REJECT_SECURITY) || + (result == HCI_ERR_AUTH_FAILURE) || + (result == HCI_ERR_PAIRING_NOT_ALLOWED) || + (result == HCI_ERR_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED) || + (result == HCI_ERR_KEY_MISSING)) + err = SDP_SECURITY_ERR; + else if (result == HCI_ERR_HOST_REJECT_DEVICE) + err = SDP_CONN_REJECTED; + else + err = SDP_CONN_FAILED; + if (p_ccb->p_cb) + (*p_ccb->p_cb)(err); + else if (p_ccb->p_cb2) + (*p_ccb->p_cb2)(err, p_ccb->user_data); + } + sdpu_release_ccb(p_ccb); + } else if (p_ccb->con_state == SDP_STATE_CFG_SETUP) { + // If we see an error while waiting for configure response + sdp_disconnect(p_ccb, SDP_CFG_FAILED); + } +} + /******************************************************************************* * * Function sdp_connect_cfm @@ -153,28 +185,7 @@ static void sdp_connect_cfm(uint16_t l2cap_cid, uint16_t result) { if ((result == L2CAP_CONN_OK) && (p_ccb->con_state == SDP_STATE_CONN_SETUP)) { p_ccb->con_state = SDP_STATE_CFG_SETUP; } else { - SDP_TRACE_WARNING("SDP - Rcvd conn cnf with error: 0x%x CID 0x%x", result, - p_ccb->connection_id); - - /* Tell the user if there is a callback */ - if (p_ccb->p_cb || p_ccb->p_cb2) { - uint16_t err = -1; - if ((result == HCI_ERR_HOST_REJECT_SECURITY) || - (result == HCI_ERR_AUTH_FAILURE) || - (result == HCI_ERR_PAIRING_NOT_ALLOWED) || - (result == HCI_ERR_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED) || - (result == HCI_ERR_KEY_MISSING)) - err = SDP_SECURITY_ERR; - else if (result == HCI_ERR_HOST_REJECT_DEVICE) - err = SDP_CONN_REJECTED; - else - err = SDP_CONN_FAILED; - if (p_ccb->p_cb) - (*p_ccb->p_cb)(err); - else if (p_ccb->p_cb2) - (*p_ccb->p_cb2)(err, p_ccb->user_data); - } - sdpu_release_ccb(p_ccb); + sdp_on_l2cap_error(l2cap_cid, result); } } @@ -248,7 +259,7 @@ static void sdp_config_cfm(uint16_t l2cap_cid, uint16_t result) { sdp_conn_timer_timeout, p_ccb); } } else { - sdp_disconnect(p_ccb, SDP_CFG_FAILED); + sdp_on_l2cap_error(l2cap_cid, result); } } -- 2.11.0