diff --git a/nimble/host/src/ble_hs_conn.c b/nimble/host/src/ble_hs_conn.c index e1e5e7e45..dabad009c 100644 --- a/nimble/host/src/ble_hs_conn.c +++ b/nimble/host/src/ble_hs_conn.c @@ -199,6 +199,20 @@ ble_hs_conn_delete_chan(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan) ble_l2cap_chan_free(chan); } +void +ble_hs_conn_foreach(ble_hs_conn_foreach_fn *cb, void *arg) +{ + struct ble_hs_conn *conn; + + BLE_HS_DBG_ASSERT(ble_hs_locked_by_cur_task()); + + SLIST_FOREACH(conn, &ble_hs_conns, bhc_next) { + if (cb(conn, arg) != 0) { + return; + } + } +} + void ble_hs_conn_free(struct ble_hs_conn *conn) { diff --git a/nimble/host/src/ble_hs_conn_priv.h b/nimble/host/src/ble_hs_conn_priv.h index c9c065520..f235dc4c3 100644 --- a/nimble/host/src/ble_hs_conn_priv.h +++ b/nimble/host/src/ble_hs_conn_priv.h @@ -119,6 +119,9 @@ void ble_hs_conn_addrs(const struct ble_hs_conn *conn, struct ble_hs_conn_addrs *addrs); int32_t ble_hs_conn_timer(void); +typedef int ble_hs_conn_foreach_fn(struct ble_hs_conn *conn, void *arg); +void ble_hs_conn_foreach(ble_hs_conn_foreach_fn *cb, void *arg); + int ble_hs_conn_init(void); #ifdef __cplusplus