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:
Szymon Janc 2015-09-01 18:16:54 +02:00 committed by Anas Nashif
commit 57daca9341
4 changed files with 23 additions and 4 deletions

View file

@ -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;
};

View file

@ -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;

View file

@ -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);

View file

@ -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);
}