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,
|
void (*identity_resolved)(struct bt_conn *conn,
|
||||||
const bt_addr_le_t *rpa,
|
const bt_addr_le_t *rpa,
|
||||||
const bt_addr_le_t *identity);
|
const bt_addr_le_t *identity);
|
||||||
|
void (*security_changed)(struct bt_conn *conn, bt_security_t level);
|
||||||
|
|
||||||
struct bt_conn_cb *_next;
|
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)
|
void bt_conn_cb_register(struct bt_conn_cb *cb)
|
||||||
{
|
{
|
||||||
cb->_next = callback_list;
|
cb->_next = callback_list;
|
||||||
|
|
|
@ -131,3 +131,6 @@ void bt_conn_connected(struct bt_conn *conn);
|
||||||
|
|
||||||
/* Notify higher layers that RPA was resolved */
|
/* Notify higher layers that RPA was resolved */
|
||||||
void bt_conn_identity_resolved(struct bt_conn *conn);
|
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;
|
struct bt_keys *keys;
|
||||||
|
|
||||||
|
if (!conn->encrypt) {
|
||||||
|
conn->sec_level = BT_SECURITY_LOW;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
keys = bt_keys_find_addr(&conn->dst);
|
keys = bt_keys_find_addr(&conn->dst);
|
||||||
if (keys && keys->type == BT_KEYS_AUTHENTICATED) {
|
if (keys && keys->type == BT_KEYS_AUTHENTICATED) {
|
||||||
conn->sec_level = BT_SECURITY_HIGH;
|
conn->sec_level = BT_SECURITY_HIGH;
|
||||||
|
@ -347,11 +352,10 @@ static void hci_encrypt_change(struct bt_buf *buf)
|
||||||
|
|
||||||
conn->encrypt = evt->encrypt;
|
conn->encrypt = evt->encrypt;
|
||||||
|
|
||||||
if (conn->encrypt) {
|
update_sec_level(conn);
|
||||||
update_sec_level(conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
bt_l2cap_encrypt_change(conn);
|
bt_l2cap_encrypt_change(conn);
|
||||||
|
bt_conn_security_changed(conn);
|
||||||
|
|
||||||
bt_conn_put(conn);
|
bt_conn_put(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue