Bluetooth: Add callback for security changed
This callback is called if security level of a connection was changed. Change-Id: I268da245cf4b7f6d2bfbd57969ce2da6c34fc69f Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This commit is contained in:
parent
76bf6f60aa
commit
57daca9341
4 changed files with 23 additions and 4 deletions
|
@ -141,6 +141,7 @@ struct bt_conn_cb {
|
|||
void (*identity_resolved)(struct bt_conn *conn,
|
||||
const bt_addr_le_t *rpa,
|
||||
const bt_addr_le_t *identity);
|
||||
void (*security_changed)(struct bt_conn *conn, bt_security_t level);
|
||||
|
||||
struct bt_conn_cb *_next;
|
||||
};
|
||||
|
|
|
@ -120,6 +120,17 @@ void bt_conn_identity_resolved(struct bt_conn *conn)
|
|||
}
|
||||
}
|
||||
|
||||
void bt_conn_security_changed(struct bt_conn *conn)
|
||||
{
|
||||
struct bt_conn_cb *cb;
|
||||
|
||||
for (cb = callback_list; cb; cb = cb->_next) {
|
||||
if (cb->security_changed) {
|
||||
cb->security_changed(conn, conn->sec_level);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void bt_conn_cb_register(struct bt_conn_cb *cb)
|
||||
{
|
||||
cb->_next = callback_list;
|
||||
|
|
|
@ -131,3 +131,6 @@ void bt_conn_connected(struct bt_conn *conn);
|
|||
|
||||
/* Notify higher layers that RPA was resolved */
|
||||
void bt_conn_identity_resolved(struct bt_conn *conn);
|
||||
|
||||
/* Notify higher layers that connection security changed */
|
||||
void bt_conn_security_changed(struct bt_conn *conn);
|
||||
|
|
|
@ -313,6 +313,11 @@ static void update_sec_level(struct bt_conn *conn)
|
|||
{
|
||||
struct bt_keys *keys;
|
||||
|
||||
if (!conn->encrypt) {
|
||||
conn->sec_level = BT_SECURITY_LOW;
|
||||
return;
|
||||
}
|
||||
|
||||
keys = bt_keys_find_addr(&conn->dst);
|
||||
if (keys && keys->type == BT_KEYS_AUTHENTICATED) {
|
||||
conn->sec_level = BT_SECURITY_HIGH;
|
||||
|
@ -347,11 +352,10 @@ static void hci_encrypt_change(struct bt_buf *buf)
|
|||
|
||||
conn->encrypt = evt->encrypt;
|
||||
|
||||
if (conn->encrypt) {
|
||||
update_sec_level(conn);
|
||||
}
|
||||
|
||||
update_sec_level(conn);
|
||||
bt_l2cap_encrypt_change(conn);
|
||||
bt_conn_security_changed(conn);
|
||||
|
||||
bt_conn_put(conn);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue