mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-06 13:30:01 -05:00
pulse: don't try to do set_param when not writable
This commit is contained in:
parent
cbc579825c
commit
ac97175380
3 changed files with 16 additions and 0 deletions
|
|
@ -1214,6 +1214,7 @@ static void registry_event_global(void *data, uint32_t id,
|
||||||
pw_log_debug("context %p: global %d %s %p", c, id, type, g);
|
pw_log_debug("context %p: global %d %s %p", c, id, type, g);
|
||||||
g->context = c;
|
g->context = c;
|
||||||
g->id = id;
|
g->id = id;
|
||||||
|
g->permissions = permissions;
|
||||||
g->type = strdup(type);
|
g->type = strdup(type);
|
||||||
g->init = true;
|
g->init = true;
|
||||||
g->props = props ? pw_properties_new_dict(props) : NULL;
|
g->props = props ? pw_properties_new_dict(props) : NULL;
|
||||||
|
|
|
||||||
|
|
@ -243,6 +243,7 @@ struct global_info {
|
||||||
struct global {
|
struct global {
|
||||||
struct spa_list link;
|
struct spa_list link;
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
|
uint32_t permissions;
|
||||||
char *type;
|
char *type;
|
||||||
struct pw_properties *props;
|
struct pw_properties *props;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -372,6 +372,9 @@ static int set_node_volume(pa_context *c, struct global *g, const pa_cvolume *vo
|
||||||
}
|
}
|
||||||
g->node_info.mute = mute;
|
g->node_info.mute = mute;
|
||||||
|
|
||||||
|
if (!SPA_FLAG_IS_SET(g->permissions, PW_PERM_W | PW_PERM_X))
|
||||||
|
return PA_ERR_ACCESS;
|
||||||
|
|
||||||
pw_node_set_param((struct pw_node*)g->proxy,
|
pw_node_set_param((struct pw_node*)g->proxy,
|
||||||
SPA_PARAM_Props, 0,
|
SPA_PARAM_Props, 0,
|
||||||
spa_pod_builder_add_object(&b,
|
spa_pod_builder_add_object(&b,
|
||||||
|
|
@ -416,6 +419,9 @@ static int set_device_volume(pa_context *c, struct global *g, struct global *cg,
|
||||||
}
|
}
|
||||||
g->node_info.mute = mute;
|
g->node_info.mute = mute;
|
||||||
|
|
||||||
|
if (!SPA_FLAG_IS_SET(cg->permissions, PW_PERM_W | PW_PERM_X))
|
||||||
|
return PA_ERR_ACCESS;
|
||||||
|
|
||||||
spa_pod_builder_push_object(&b, &f[0],
|
spa_pod_builder_push_object(&b, &f[0],
|
||||||
SPA_TYPE_OBJECT_ParamRoute, SPA_PARAM_Route);
|
SPA_TYPE_OBJECT_ParamRoute, SPA_PARAM_Route);
|
||||||
spa_pod_builder_add(&b,
|
spa_pod_builder_add(&b,
|
||||||
|
|
@ -696,6 +702,9 @@ static int set_device_route(pa_context *c, struct global *g, const char *port, e
|
||||||
if (id == SPA_ID_INVALID)
|
if (id == SPA_ID_INVALID)
|
||||||
return PA_ERR_NOENTITY;
|
return PA_ERR_NOENTITY;
|
||||||
|
|
||||||
|
if (!SPA_FLAG_IS_SET(cg->permissions, PW_PERM_W | PW_PERM_X))
|
||||||
|
return PA_ERR_ACCESS;
|
||||||
|
|
||||||
pw_device_set_param((struct pw_device*)cg->proxy,
|
pw_device_set_param((struct pw_device*)cg->proxy,
|
||||||
SPA_PARAM_Route, 0,
|
SPA_PARAM_Route, 0,
|
||||||
spa_pod_builder_add_object(&b,
|
spa_pod_builder_add_object(&b,
|
||||||
|
|
@ -1753,6 +1762,11 @@ static void card_profile(pa_operation *o, void *userdata)
|
||||||
if (id == SPA_ID_INVALID)
|
if (id == SPA_ID_INVALID)
|
||||||
goto done;;
|
goto done;;
|
||||||
|
|
||||||
|
if (!SPA_FLAG_IS_SET(g->permissions, PW_PERM_W | PW_PERM_X)) {
|
||||||
|
pa_context_set_error(c, PA_ERR_ACCESS);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
pw_device_set_param((struct pw_device*)g->proxy,
|
pw_device_set_param((struct pw_device*)g->proxy,
|
||||||
SPA_PARAM_Profile, 0,
|
SPA_PARAM_Profile, 0,
|
||||||
spa_pod_builder_add_object(&b,
|
spa_pod_builder_add_object(&b,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue