impl-node: add more backwards compat

Make sure newer clients can work with an older server:

- Add client and server versions in the activation
- On older server, clients needs to trigger peers without CAS of status
- On older server, jack transport is started with command.
- Use client version to know when to set the INACTIVE/FINISHED
  state on the server instead.
- Async clients need to trigger peers on old server.
This commit is contained in:
Wim Taymans 2024-06-17 12:07:09 +02:00
parent 2501b347ef
commit a07f73ce82
5 changed files with 108 additions and 45 deletions

View file

@ -210,6 +210,8 @@ static int client_node_transport(void *_data,
spa_system_close(node->rt.target.system, node->source.fd);
node->rt.target.fd = node->source.fd = readfd;
node->rt.target.activation->client_version = PW_VERSION_NODE_ACTIVATION;
data->have_transport = true;
if (node->active)
@ -839,6 +841,8 @@ client_node_set_activation(void *_data,
link->target.activation = ptr;
link->target.system = data->data_system;
link->target.fd = signalfd;
link->target.trigger = link->target.activation->server_version < 1 ?
trigger_target_v0 : trigger_target_v1;
spa_list_append(&data->links, &link->link);
pw_impl_node_add_target(node, &link->target);