diff --git a/src/modules/module-protocol-pulse/commands.h b/src/modules/module-protocol-pulse/commands.h new file mode 100644 index 000000000..8db5d8618 --- /dev/null +++ b/src/modules/module-protocol-pulse/commands.h @@ -0,0 +1,202 @@ +/* PipeWire + * + * Copyright © 2020 Wim Taymans + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef PULSE_SERVER_COMMANDS_H +#define PULSE_SERVER_COMMANDS_H + +#include + +struct client; +struct message; + +enum pulseaudio_command { + /* Generic commands */ + COMMAND_ERROR, + COMMAND_TIMEOUT, /* pseudo command */ + COMMAND_REPLY, + + /* CLIENT->SERVER */ + COMMAND_CREATE_PLAYBACK_STREAM, /* Payload changed in v9, v12 (0.9.0, 0.9.8) */ + COMMAND_DELETE_PLAYBACK_STREAM, + COMMAND_CREATE_RECORD_STREAM, /* Payload changed in v9, v12 (0.9.0, 0.9.8) */ + COMMAND_DELETE_RECORD_STREAM, + COMMAND_EXIT, + COMMAND_AUTH, + COMMAND_SET_CLIENT_NAME, + COMMAND_LOOKUP_SINK, + COMMAND_LOOKUP_SOURCE, + COMMAND_DRAIN_PLAYBACK_STREAM, + COMMAND_STAT, + COMMAND_GET_PLAYBACK_LATENCY, + COMMAND_CREATE_UPLOAD_STREAM, + COMMAND_DELETE_UPLOAD_STREAM, + COMMAND_FINISH_UPLOAD_STREAM, + COMMAND_PLAY_SAMPLE, + COMMAND_REMOVE_SAMPLE, + + COMMAND_GET_SERVER_INFO, + COMMAND_GET_SINK_INFO, + COMMAND_GET_SINK_INFO_LIST, + COMMAND_GET_SOURCE_INFO, + COMMAND_GET_SOURCE_INFO_LIST, + COMMAND_GET_MODULE_INFO, + COMMAND_GET_MODULE_INFO_LIST, + COMMAND_GET_CLIENT_INFO, + COMMAND_GET_CLIENT_INFO_LIST, + COMMAND_GET_SINK_INPUT_INFO, /* Payload changed in v11 (0.9.7) */ + COMMAND_GET_SINK_INPUT_INFO_LIST, /* Payload changed in v11 (0.9.7) */ + COMMAND_GET_SOURCE_OUTPUT_INFO, + COMMAND_GET_SOURCE_OUTPUT_INFO_LIST, + COMMAND_GET_SAMPLE_INFO, + COMMAND_GET_SAMPLE_INFO_LIST, + COMMAND_SUBSCRIBE, + + COMMAND_SET_SINK_VOLUME, + COMMAND_SET_SINK_INPUT_VOLUME, + COMMAND_SET_SOURCE_VOLUME, + + COMMAND_SET_SINK_MUTE, + COMMAND_SET_SOURCE_MUTE, + + COMMAND_CORK_PLAYBACK_STREAM, + COMMAND_FLUSH_PLAYBACK_STREAM, + COMMAND_TRIGGER_PLAYBACK_STREAM, + + COMMAND_SET_DEFAULT_SINK, + COMMAND_SET_DEFAULT_SOURCE, + + COMMAND_SET_PLAYBACK_STREAM_NAME, + COMMAND_SET_RECORD_STREAM_NAME, + + COMMAND_KILL_CLIENT, + COMMAND_KILL_SINK_INPUT, + COMMAND_KILL_SOURCE_OUTPUT, + + COMMAND_LOAD_MODULE, + COMMAND_UNLOAD_MODULE, + + /* Obsolete */ + COMMAND_ADD_AUTOLOAD___OBSOLETE, + COMMAND_REMOVE_AUTOLOAD___OBSOLETE, + COMMAND_GET_AUTOLOAD_INFO___OBSOLETE, + COMMAND_GET_AUTOLOAD_INFO_LIST___OBSOLETE, + + COMMAND_GET_RECORD_LATENCY, + COMMAND_CORK_RECORD_STREAM, + COMMAND_FLUSH_RECORD_STREAM, + COMMAND_PREBUF_PLAYBACK_STREAM, + + /* SERVER->CLIENT */ + COMMAND_REQUEST, + COMMAND_OVERFLOW, + COMMAND_UNDERFLOW, + COMMAND_PLAYBACK_STREAM_KILLED, + COMMAND_RECORD_STREAM_KILLED, + COMMAND_SUBSCRIBE_EVENT, + + /* A few more client->server commands */ + + /* Supported since protocol v10 (0.9.5) */ + COMMAND_MOVE_SINK_INPUT, + COMMAND_MOVE_SOURCE_OUTPUT, + + /* Supported since protocol v11 (0.9.7) */ + COMMAND_SET_SINK_INPUT_MUTE, + + COMMAND_SUSPEND_SINK, + COMMAND_SUSPEND_SOURCE, + + /* Supported since protocol v12 (0.9.8) */ + COMMAND_SET_PLAYBACK_STREAM_BUFFER_ATTR, + COMMAND_SET_RECORD_STREAM_BUFFER_ATTR, + + COMMAND_UPDATE_PLAYBACK_STREAM_SAMPLE_RATE, + COMMAND_UPDATE_RECORD_STREAM_SAMPLE_RATE, + + /* SERVER->CLIENT */ + COMMAND_PLAYBACK_STREAM_SUSPENDED, + COMMAND_RECORD_STREAM_SUSPENDED, + COMMAND_PLAYBACK_STREAM_MOVED, + COMMAND_RECORD_STREAM_MOVED, + + /* Supported since protocol v13 (0.9.11) */ + COMMAND_UPDATE_RECORD_STREAM_PROPLIST, + COMMAND_UPDATE_PLAYBACK_STREAM_PROPLIST, + COMMAND_UPDATE_CLIENT_PROPLIST, + COMMAND_REMOVE_RECORD_STREAM_PROPLIST, + COMMAND_REMOVE_PLAYBACK_STREAM_PROPLIST, + COMMAND_REMOVE_CLIENT_PROPLIST, + + /* SERVER->CLIENT */ + COMMAND_STARTED, + + /* Supported since protocol v14 (0.9.12) */ + COMMAND_EXTENSION, + /* Supported since protocol v15 (0.9.15) */ + COMMAND_GET_CARD_INFO, + COMMAND_GET_CARD_INFO_LIST, + COMMAND_SET_CARD_PROFILE, + + COMMAND_CLIENT_EVENT, + COMMAND_PLAYBACK_STREAM_EVENT, + COMMAND_RECORD_STREAM_EVENT, + + /* SERVER->CLIENT */ + COMMAND_PLAYBACK_BUFFER_ATTR_CHANGED, + COMMAND_RECORD_BUFFER_ATTR_CHANGED, + + /* Supported since protocol v16 (0.9.16) */ + COMMAND_SET_SINK_PORT, + COMMAND_SET_SOURCE_PORT, + + /* Supported since protocol v22 (1.0) */ + COMMAND_SET_SOURCE_OUTPUT_VOLUME, + COMMAND_SET_SOURCE_OUTPUT_MUTE, + + /* Supported since protocol v27 (3.0) */ + COMMAND_SET_PORT_LATENCY_OFFSET, + + /* Supported since protocol v30 (6.0) */ + /* BOTH DIRECTIONS */ + COMMAND_ENABLE_SRBCHANNEL, + COMMAND_DISABLE_SRBCHANNEL, + + /* Supported since protocol v31 (9.0) + * BOTH DIRECTIONS */ + COMMAND_REGISTER_MEMFD_SHMID, + + /* Supported since protocol v35 (15.0) */ + COMMAND_SEND_OBJECT_MESSAGE, + + COMMAND_MAX +}; + +struct command { + const char *name; + int (*run) (struct client *client, uint32_t command, uint32_t tag, struct message *msg); +}; + +extern const struct command commands[COMMAND_MAX]; + +#endif /* PULSE_SERVER_COMMANDS_H */ diff --git a/src/modules/module-protocol-pulse/defs.h b/src/modules/module-protocol-pulse/defs.h index 586cbb75d..5398816d2 100644 --- a/src/modules/module-protocol-pulse/defs.h +++ b/src/modules/module-protocol-pulse/defs.h @@ -135,168 +135,6 @@ static inline int res_to_err(int res) return ERR_UNKNOWN; } -enum { - /* Generic commands */ - COMMAND_ERROR, - COMMAND_TIMEOUT, /* pseudo command */ - COMMAND_REPLY, - - /* CLIENT->SERVER */ - COMMAND_CREATE_PLAYBACK_STREAM, /* Payload changed in v9, v12 (0.9.0, 0.9.8) */ - COMMAND_DELETE_PLAYBACK_STREAM, - COMMAND_CREATE_RECORD_STREAM, /* Payload changed in v9, v12 (0.9.0, 0.9.8) */ - COMMAND_DELETE_RECORD_STREAM, - COMMAND_EXIT, - COMMAND_AUTH, - COMMAND_SET_CLIENT_NAME, - COMMAND_LOOKUP_SINK, - COMMAND_LOOKUP_SOURCE, - COMMAND_DRAIN_PLAYBACK_STREAM, - COMMAND_STAT, - COMMAND_GET_PLAYBACK_LATENCY, - COMMAND_CREATE_UPLOAD_STREAM, - COMMAND_DELETE_UPLOAD_STREAM, - COMMAND_FINISH_UPLOAD_STREAM, - COMMAND_PLAY_SAMPLE, - COMMAND_REMOVE_SAMPLE, - - COMMAND_GET_SERVER_INFO, - COMMAND_GET_SINK_INFO, - COMMAND_GET_SINK_INFO_LIST, - COMMAND_GET_SOURCE_INFO, - COMMAND_GET_SOURCE_INFO_LIST, - COMMAND_GET_MODULE_INFO, - COMMAND_GET_MODULE_INFO_LIST, - COMMAND_GET_CLIENT_INFO, - COMMAND_GET_CLIENT_INFO_LIST, - COMMAND_GET_SINK_INPUT_INFO, /* Payload changed in v11 (0.9.7) */ - COMMAND_GET_SINK_INPUT_INFO_LIST, /* Payload changed in v11 (0.9.7) */ - COMMAND_GET_SOURCE_OUTPUT_INFO, - COMMAND_GET_SOURCE_OUTPUT_INFO_LIST, - COMMAND_GET_SAMPLE_INFO, - COMMAND_GET_SAMPLE_INFO_LIST, - COMMAND_SUBSCRIBE, - - COMMAND_SET_SINK_VOLUME, - COMMAND_SET_SINK_INPUT_VOLUME, - COMMAND_SET_SOURCE_VOLUME, - - COMMAND_SET_SINK_MUTE, - COMMAND_SET_SOURCE_MUTE, - - COMMAND_CORK_PLAYBACK_STREAM, - COMMAND_FLUSH_PLAYBACK_STREAM, - COMMAND_TRIGGER_PLAYBACK_STREAM, - - COMMAND_SET_DEFAULT_SINK, - COMMAND_SET_DEFAULT_SOURCE, - - COMMAND_SET_PLAYBACK_STREAM_NAME, - COMMAND_SET_RECORD_STREAM_NAME, - - COMMAND_KILL_CLIENT, - COMMAND_KILL_SINK_INPUT, - COMMAND_KILL_SOURCE_OUTPUT, - - COMMAND_LOAD_MODULE, - COMMAND_UNLOAD_MODULE, - - /* Obsolete */ - COMMAND_ADD_AUTOLOAD___OBSOLETE, - COMMAND_REMOVE_AUTOLOAD___OBSOLETE, - COMMAND_GET_AUTOLOAD_INFO___OBSOLETE, - COMMAND_GET_AUTOLOAD_INFO_LIST___OBSOLETE, - - COMMAND_GET_RECORD_LATENCY, - COMMAND_CORK_RECORD_STREAM, - COMMAND_FLUSH_RECORD_STREAM, - COMMAND_PREBUF_PLAYBACK_STREAM, - - /* SERVER->CLIENT */ - COMMAND_REQUEST, - COMMAND_OVERFLOW, - COMMAND_UNDERFLOW, - COMMAND_PLAYBACK_STREAM_KILLED, - COMMAND_RECORD_STREAM_KILLED, - COMMAND_SUBSCRIBE_EVENT, - - /* A few more client->server commands */ - - /* Supported since protocol v10 (0.9.5) */ - COMMAND_MOVE_SINK_INPUT, - COMMAND_MOVE_SOURCE_OUTPUT, - - /* Supported since protocol v11 (0.9.7) */ - COMMAND_SET_SINK_INPUT_MUTE, - - COMMAND_SUSPEND_SINK, - COMMAND_SUSPEND_SOURCE, - - /* Supported since protocol v12 (0.9.8) */ - COMMAND_SET_PLAYBACK_STREAM_BUFFER_ATTR, - COMMAND_SET_RECORD_STREAM_BUFFER_ATTR, - - COMMAND_UPDATE_PLAYBACK_STREAM_SAMPLE_RATE, - COMMAND_UPDATE_RECORD_STREAM_SAMPLE_RATE, - - /* SERVER->CLIENT */ - COMMAND_PLAYBACK_STREAM_SUSPENDED, - COMMAND_RECORD_STREAM_SUSPENDED, - COMMAND_PLAYBACK_STREAM_MOVED, - COMMAND_RECORD_STREAM_MOVED, - - /* Supported since protocol v13 (0.9.11) */ - COMMAND_UPDATE_RECORD_STREAM_PROPLIST, - COMMAND_UPDATE_PLAYBACK_STREAM_PROPLIST, - COMMAND_UPDATE_CLIENT_PROPLIST, - COMMAND_REMOVE_RECORD_STREAM_PROPLIST, - COMMAND_REMOVE_PLAYBACK_STREAM_PROPLIST, - COMMAND_REMOVE_CLIENT_PROPLIST, - - /* SERVER->CLIENT */ - COMMAND_STARTED, - - /* Supported since protocol v14 (0.9.12) */ - COMMAND_EXTENSION, - /* Supported since protocol v15 (0.9.15) */ - COMMAND_GET_CARD_INFO, - COMMAND_GET_CARD_INFO_LIST, - COMMAND_SET_CARD_PROFILE, - - COMMAND_CLIENT_EVENT, - COMMAND_PLAYBACK_STREAM_EVENT, - COMMAND_RECORD_STREAM_EVENT, - - /* SERVER->CLIENT */ - COMMAND_PLAYBACK_BUFFER_ATTR_CHANGED, - COMMAND_RECORD_BUFFER_ATTR_CHANGED, - - /* Supported since protocol v16 (0.9.16) */ - COMMAND_SET_SINK_PORT, - COMMAND_SET_SOURCE_PORT, - - /* Supported since protocol v22 (1.0) */ - COMMAND_SET_SOURCE_OUTPUT_VOLUME, - COMMAND_SET_SOURCE_OUTPUT_MUTE, - - /* Supported since protocol v27 (3.0) */ - COMMAND_SET_PORT_LATENCY_OFFSET, - - /* Supported since protocol v30 (6.0) */ - /* BOTH DIRECTIONS */ - COMMAND_ENABLE_SRBCHANNEL, - COMMAND_DISABLE_SRBCHANNEL, - - /* Supported since protocol v31 (9.0) - * BOTH DIRECTIONS */ - COMMAND_REGISTER_MEMFD_SHMID, - - /* Supported since protocol v35 (15.0) */ - COMMAND_SEND_OBJECT_MESSAGE, - - COMMAND_MAX -}; - enum { SUBSCRIPTION_MASK_NULL = 0x0000U, SUBSCRIPTION_MASK_SINK = 0x0001U, diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index 41e5116b8..288a6ca35 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -80,6 +80,7 @@ #include "pipewire/extensions/metadata.h" #include "pulse-server.h" +#include "commands.h" #include "defs.h" #include "internal.h" @@ -159,12 +160,6 @@ static struct sample *find_sample(struct impl *impl, uint32_t idx, const char *n return NULL; } -struct command { - const char *name; - int (*run) (struct client *client, uint32_t command, uint32_t tag, struct message *msg); -}; -static const struct command commands[COMMAND_MAX]; - static void message_free(struct impl *impl, struct message *msg, bool dequeue, bool destroy) { if (dequeue) @@ -5182,7 +5177,7 @@ static SPA_UNUSED int do_error_not_implemented(struct client *client, uint32_t c return -ENOSYS; } -static const struct command commands[COMMAND_MAX] = +const struct command commands[COMMAND_MAX] = { [COMMAND_ERROR] = { "ERROR", }, [COMMAND_TIMEOUT] = { "TIMEOUT", }, /* pseudo command */