Bluetooth: BR/EDR: Add user I/O context during pairing

When during legacy incoming pairing (as acceptor) the runtime is passed to user
to enter a PIN, mark such interaction and keep it valid until proper
authentication reply API handlers are called.

Change-Id: If63015f5beb256873925602adc6a8e5ff9d3b00f
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
This commit is contained in:
Arkadiusz Lichwa 2016-01-13 15:34:19 +01:00 committed by Johan Hedberg
commit f670d06643
2 changed files with 12 additions and 1 deletions

View file

@ -1126,6 +1126,11 @@ int bt_conn_auth_pincode_entry(struct bt_conn *conn, const char *pin)
return -EPERM;
}
/* Allow user send entered PIN to remote, then reset user state. */
if (!atomic_test_and_clear_bit(conn->flags, BT_CONN_USER)) {
return -EPERM;
}
if (len == 16) {
atomic_set_bit(conn->flags, BT_CONN_BR_LEGACY_SECURE);
}
@ -1142,11 +1147,11 @@ void bt_conn_pin_code_req(struct bt_conn *conn)
secure = true;
}
atomic_set_bit(conn->flags, BT_CONN_USER);
bt_auth->pincode_entry(conn, secure);
} else {
pin_code_neg_reply(&conn->br.dst);
}
}
#endif /* CONFIG_BLUETOOTH_BREDR */
@ -1191,6 +1196,11 @@ int bt_conn_auth_cancel(struct bt_conn *conn)
#endif /* CONFIG_BLUETOOTH_SMP */
#if defined(CONFIG_BLUETOOTH_BREDR)
if (conn->type == BT_CONN_TYPE_BR) {
/* Allow user cancel authentication, then reset user state. */
if (!atomic_test_and_clear_bit(conn->flags, BT_CONN_USER)) {
return -EPERM;
}
return pin_code_neg_reply(&conn->br.dst);
}
#endif /* CONFIG_BLUETOOTH_BREDR */

View file

@ -30,6 +30,7 @@ typedef enum __packed {
enum {
BT_CONN_AUTO_CONNECT,
BT_CONN_BR_LEGACY_SECURE, /* 16 digits legacy PIN tracker */
BT_CONN_USER, /* user I/O when pairing */
};
struct bt_conn_le {