From e35b9828d382d6b0a147d5861b581e64558ee1ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= Date: Thu, 30 Dec 2021 21:44:01 +0100 Subject: [PATCH] pulse-server: make GET_SERVER_INFO accessible without manager For example, pulseaudio.js[1] immediately sends a GET_SERVER_INFO request after AUTH, and only later issues a SET_CLIENT_NAME. See #1966. [1]: https://github.com/janakj/pulseaudio.js --- src/modules/module-protocol-pulse/pulse-server.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index f0fae517a..f7d9da072 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -3146,13 +3146,12 @@ static int do_get_server_info(struct client *client, uint32_t command, uint32_t { struct impl *impl = client->impl; struct pw_manager *manager = client->manager; - struct pw_core_info *info = manager->info; + struct pw_core_info *info = manager ? manager->info : NULL; char name[256]; struct message *reply; pw_log_info("[%s] GET_SERVER_INFO tag:%u", client->name, tag); - snprintf(name, sizeof(name), "PulseAudio (on PipeWire %s)", pw_get_library_version()); reply = reply_new(client, tag); @@ -3162,8 +3161,8 @@ static int do_get_server_info(struct client *client, uint32_t command, uint32_t TAG_STRING, pw_get_user_name(), TAG_STRING, pw_get_host_name(), TAG_SAMPLE_SPEC, &impl->defs.sample_spec, - TAG_STRING, get_default(client, true), /* default sink name */ - TAG_STRING, get_default(client, false), /* default source name */ + TAG_STRING, manager ? get_default(client, true) : "", /* default sink name */ + TAG_STRING, manager ? get_default(client, false) : "", /* default source name */ TAG_U32, info ? info->cookie : 0, /* cookie */ TAG_INVALID); @@ -4869,7 +4868,7 @@ const struct command commands[COMMAND_MAX] = COMMAND(PLAY_SAMPLE, do_play_sample), COMMAND(REMOVE_SAMPLE, do_remove_sample), - COMMAND(GET_SERVER_INFO, do_get_server_info), + COMMAND(GET_SERVER_INFO, do_get_server_info, COMMAND_ACCESS_WITHOUT_MANAGER), COMMAND(GET_SINK_INFO, do_get_info), COMMAND(GET_SOURCE_INFO, do_get_info), COMMAND(GET_MODULE_INFO, do_get_info),