mirror of
https://github.com/espressif/esp-nimble.git
synced 2026-09-13 04:30:03 +00:00
apps: bttester: reject L2CAP connections basing on PSM only
PSM on which Lower Tester requests connection fully defines what are requirements for request to be accepted. That means that `response` parameter should not be used to return errors from `tester_l2cap_event`, and is not needed.
This commit is contained in:
committed by
Szymon Janc
parent
20a82a5de3
commit
841fa4c7e6
@@ -261,7 +261,6 @@ static int
|
|||||||
tester_l2cap_event(struct ble_l2cap_event *event, void *arg)
|
tester_l2cap_event(struct ble_l2cap_event *event, void *arg)
|
||||||
{
|
{
|
||||||
struct ble_l2cap_chan_info chan_info;
|
struct ble_l2cap_chan_info chan_info;
|
||||||
int accept_response;
|
|
||||||
struct ble_gap_conn_desc conn;
|
struct ble_gap_conn_desc conn;
|
||||||
|
|
||||||
switch (event->type) {
|
switch (event->type) {
|
||||||
@@ -321,11 +320,12 @@ tester_l2cap_event(struct ble_l2cap_event *event, void *arg)
|
|||||||
if (conn.sec_state.key_size < 16) {
|
if (conn.sec_state.key_size < 16) {
|
||||||
return BLE_HS_EENCRYPT_KEY_SZ;
|
return BLE_HS_EENCRYPT_KEY_SZ;
|
||||||
}
|
}
|
||||||
}
|
} else if (chan_info.psm == 0x00F5) {
|
||||||
|
/* TSPX_psm_encryption_required */
|
||||||
accept_response = POINTER_TO_INT(arg);
|
ble_gap_conn_find(event->accept.conn_handle, &conn);
|
||||||
if (accept_response) {
|
if (conn.sec_state.key_size == 0) {
|
||||||
return accept_response;
|
return BLE_HS_EENCRYPT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console_printf(
|
console_printf(
|
||||||
@@ -563,52 +563,11 @@ fail:
|
|||||||
BTP_STATUS_FAILED);
|
BTP_STATUS_FAILED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
l2cap_coc_err2hs_err(uint16_t coc_err)
|
|
||||||
{
|
|
||||||
switch (coc_err) {
|
|
||||||
case BLE_L2CAP_COC_ERR_UNKNOWN_LE_PSM:
|
|
||||||
return BLE_HS_ENOTSUP;
|
|
||||||
case BLE_L2CAP_COC_ERR_NO_RESOURCES:
|
|
||||||
return BLE_HS_ENOMEM;
|
|
||||||
case BLE_L2CAP_COC_ERR_INSUFFICIENT_AUTHEN:
|
|
||||||
return BLE_HS_EAUTHEN;
|
|
||||||
case BLE_L2CAP_COC_ERR_INSUFFICIENT_AUTHOR:
|
|
||||||
return BLE_HS_EAUTHOR;
|
|
||||||
case BLE_L2CAP_COC_ERR_INSUFFICIENT_ENC:
|
|
||||||
return BLE_HS_EENCRYPT;
|
|
||||||
case BLE_L2CAP_COC_ERR_INSUFFICIENT_KEY_SZ:
|
|
||||||
return BLE_HS_EENCRYPT_KEY_SZ;
|
|
||||||
case BLE_L2CAP_COC_ERR_UNACCEPTABLE_PARAMETERS:
|
|
||||||
return BLE_HS_EINVAL;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
l2cap_btp_listen_err2coc_err(uint16_t coc_err)
|
|
||||||
{
|
|
||||||
switch (coc_err) {
|
|
||||||
case 0x01:
|
|
||||||
return BLE_L2CAP_COC_ERR_INSUFFICIENT_AUTHEN;
|
|
||||||
case 0x02:
|
|
||||||
return BLE_L2CAP_COC_ERR_INSUFFICIENT_AUTHOR;
|
|
||||||
case 0x03:
|
|
||||||
return BLE_L2CAP_COC_ERR_INSUFFICIENT_KEY_SZ;
|
|
||||||
case 0x04:
|
|
||||||
return BLE_L2CAP_COC_ERR_INSUFFICIENT_ENC;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
listen(const uint8_t *data, uint16_t len)
|
listen(const uint8_t *data, uint16_t len)
|
||||||
{
|
{
|
||||||
const struct l2cap_listen_cmd *cmd = (void *) data;
|
const struct l2cap_listen_cmd *cmd = (void *) data;
|
||||||
uint16_t mtu = htole16(cmd->mtu);
|
uint16_t mtu = htole16(cmd->mtu);
|
||||||
uint16_t rsp = htole16(cmd->response);
|
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
SYS_LOG_DBG("");
|
SYS_LOG_DBG("");
|
||||||
@@ -617,12 +576,8 @@ listen(const uint8_t *data, uint16_t len)
|
|||||||
mtu = TESTER_COC_MTU;
|
mtu = TESTER_COC_MTU;
|
||||||
}
|
}
|
||||||
|
|
||||||
rsp = l2cap_btp_listen_err2coc_err(rsp);
|
|
||||||
rsp = l2cap_coc_err2hs_err(rsp);
|
|
||||||
|
|
||||||
/* TODO: Handle cmd->transport flag */
|
/* TODO: Handle cmd->transport flag */
|
||||||
rc = ble_l2cap_create_server(cmd->psm, mtu, tester_l2cap_event,
|
rc = ble_l2cap_create_server(cmd->psm, mtu, tester_l2cap_event, NULL);
|
||||||
INT_TO_POINTER(rsp));
|
|
||||||
if (rc) {
|
if (rc) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user