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
This commit is contained in:
Barnabás Pőcze 2021-12-30 21:44:01 +01:00
parent 1c3e45a584
commit e35b9828d3

View file

@ -3146,13 +3146,12 @@ static int do_get_server_info(struct client *client, uint32_t command, uint32_t
{ {
struct impl *impl = client->impl; struct impl *impl = client->impl;
struct pw_manager *manager = client->manager; 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]; char name[256];
struct message *reply; struct message *reply;
pw_log_info("[%s] GET_SERVER_INFO tag:%u", client->name, tag); pw_log_info("[%s] GET_SERVER_INFO tag:%u", client->name, tag);
snprintf(name, sizeof(name), "PulseAudio (on PipeWire %s)", pw_get_library_version()); snprintf(name, sizeof(name), "PulseAudio (on PipeWire %s)", pw_get_library_version());
reply = reply_new(client, tag); 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_user_name(),
TAG_STRING, pw_get_host_name(), TAG_STRING, pw_get_host_name(),
TAG_SAMPLE_SPEC, &impl->defs.sample_spec, TAG_SAMPLE_SPEC, &impl->defs.sample_spec,
TAG_STRING, get_default(client, true), /* default sink name */ TAG_STRING, manager ? get_default(client, true) : "", /* default sink name */
TAG_STRING, get_default(client, false), /* default source name */ TAG_STRING, manager ? get_default(client, false) : "", /* default source name */
TAG_U32, info ? info->cookie : 0, /* cookie */ TAG_U32, info ? info->cookie : 0, /* cookie */
TAG_INVALID); TAG_INVALID);
@ -4869,7 +4868,7 @@ const struct command commands[COMMAND_MAX] =
COMMAND(PLAY_SAMPLE, do_play_sample), COMMAND(PLAY_SAMPLE, do_play_sample),
COMMAND(REMOVE_SAMPLE, do_remove_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_SINK_INFO, do_get_info),
COMMAND(GET_SOURCE_INFO, do_get_info), COMMAND(GET_SOURCE_INFO, do_get_info),
COMMAND(GET_MODULE_INFO, do_get_info), COMMAND(GET_MODULE_INFO, do_get_info),