This MR implements a simple
libwpipc.so library that uses sockets for inter-process communication between wireplumber and external applications. Apart from that, a new wireplumber module called
ipc is also added to handle requests coming from external
wpipc applications. Only
STOP requests are handled by such module. These requests will set or remove metadata that will be used by the policy to unlink or re-link endpoints with client nodes.
The above can be easily tested with the
wpipc-client example executable. To unlink all endpoint links while audio is being played, execute the client like this:
./build/tests/examples/wpipc-client /tmp/wpipc STOP
Audio should stop playing. To re-link all endpoints, execute the client like this:
./build/tests/examples/wpipc-client /tmp/wpipc PLAY
Audio should start playing again. Note that several clients can send
PLAY requests, so the
ipc module keeps internally a counter to decided whether endpoint links should be unlinked or not. For example, if 2 clients send a
PLAY request, and another one sends a
STOP request, the endpoints won't be unlinked. You would have to send an extra
STOP request for the endpoints to be unlinked.