diff --git a/src/pipewire/impl-client.c b/src/pipewire/impl-client.c index 74aa127d3..8fae0c26f 100644 --- a/src/pipewire/impl-client.c +++ b/src/pipewire/impl-client.c @@ -670,3 +670,20 @@ void pw_impl_client_set_busy(struct pw_impl_client *client, bool busy) pw_impl_client_emit_busy_changed(client, busy); } } +SPA_EXPORT +int pw_impl_client_check_permissions(struct pw_impl_client *client, + uint32_t global_id, uint32_t permissions) +{ + struct pw_context *context = client->context; + struct pw_global *global; + uint32_t perms; + + if ((global = pw_context_find_global(context, global_id)) == NULL) + return -ENOENT; + + perms = pw_global_get_permissions(global, client); + if ((perms & permissions) != permissions) + return -EPERM; + + return 0; +} diff --git a/src/pipewire/impl-client.h b/src/pipewire/impl-client.h index 7f8d80c72..e10161b25 100644 --- a/src/pipewire/impl-client.h +++ b/src/pipewire/impl-client.h @@ -135,6 +135,10 @@ int pw_impl_client_update_properties(struct pw_impl_client *client, const struct int pw_impl_client_update_permissions(struct pw_impl_client *client, uint32_t n_permissions, const struct pw_permission *permissions); +/** check if a client has permissions for global_id, Since 0.3.9 */ +int pw_impl_client_check_permissions(struct pw_impl_client *client, + uint32_t global_id, uint32_t permissions); + /** Get the client properties */ const struct pw_properties *pw_impl_client_get_properties(struct pw_impl_client *client);