session-manager: split policy and monitor

Separate the session manager in a monitor and policy part.

The monitor manages the devices and endpoints.

The policy watches the nodes/ports/clients and applies the policy
of linking them.

Because both now have a separate connection, we can remove some
hacks in the protocol. When a remote was both the implementer and
user of an object we could get in a deadlock when the user was
blocked waiting and the implementator was blocked sending a reply.
We used to un-busy a client when it was expecting a reply from a
ping or sync for this reason.

Add and use some more keys for the endpoints and streams.
This commit is contained in:
Wim Taymans 2019-11-07 16:03:00 +01:00
parent 8bbfe876a7
commit 4ad7ce3aa2
11 changed files with 138 additions and 1365 deletions

View file

@ -85,6 +85,8 @@ static int client_endpoint_stream_update(void *object,
PW_KEY_ENDPOINT_ID,
PW_KEY_MEDIA_CLASS,
PW_KEY_PRIORITY_SESSION,
PW_KEY_STREAM_NAME,
PW_KEY_STREAM_DESCRIPTION,
NULL
};

View file

@ -288,6 +288,8 @@ int endpoint_init(struct endpoint *this,
PW_KEY_CLIENT_ID,
PW_KEY_DEVICE_ID,
PW_KEY_MEDIA_CLASS,
PW_KEY_ENDPOINT_NAME,
PW_KEY_ENDPOINT_ICON_NAME,
NULL
};