Commit graph

38 commits

Author SHA1 Message Date
Barnabás Pőcze
ae34b68e3a pulse-server: message: improve resizing logic
As Coverity points out, `ensure_size()` is not fully correct.

Let us assume that the message already has some allocated storage,
and the `realloc()` call in the next `ensure_size()` invocation fails.
In that case `message::data` is freed, but the pointer is left behind.
If another `ensure_size()` call is made, then `realloc()` will be called
(since the previous call left `message::allocated` as zero), but the
first argument of the `realloc()` call will be a dangling pointer.

In order to avoid the above, first of all, clear `message::data` after
a failed `realloc()` call, and immediately return `-ENOMEM` if
`message::length` is greater than `message::allocated` since
that signals if the message has even run into an out-of-memory
situation.
2022-06-16 18:38:30 +00:00
Barnabás Pőcze
080a97c0bb pulse-server: message: store pointer to impl directly
Store a pointer to the owner `impl` object instead of
the (embedded) `stat` object. This way `message_free()`
can be simplified since the owner `impl` does not need
to be passed explicitly.
2022-06-16 18:38:30 +00:00
Wim Taymans
05deba85a4 pulse-server: reset message length when freeing
When we move a message to the free list, reset the length to 0.
Otherwise the previous length plus the new length will be used to
allocated the message size, which would overallocate.
2022-05-18 17:31:23 +02:00
Wim Taymans
ba7d410c3c handle realloc error better
Make sure we free the old pointer, clear it and set the array size to 0.
Use reallocarray where possible.
2022-04-27 10:09:06 +02:00
Wim Taymans
143fadf68e pulse-server: also remap module property keys and values
When loading a module, remap the pulseaudio properties to pipewire ones
for consistency.

move the media-roles to remap, because it's more about remapping between
pa and pw.

Fixes #2076
2022-02-04 15:15:42 +01:00
Wim Taymans
a0d7fb01ba pulse-server: add size check when reading strings 2021-11-25 10:14:30 +01:00
Wim Taymans
9feecb36d0 pulse-server: don't add large blocks to cache
See #1840
2021-11-23 17:44:01 +01:00
Wim Taymans
418c6fbe96 pulse-server: limit the max cache to 16MB
Don't recycle messages when we have too many allocated already.

See #1840
2021-11-23 17:24:24 +01:00
Peter Hutterer
52a96bb602 modules: add log topics to module-protocol-pulse
This ends up using a nested namespace: mod.protocol-pulse for the module
itself, mod.protocol-pulse.foo for the various submodules and
extensions.
2021-09-28 09:35:39 +02:00
Peter Hutterer
8bb0e340c7 protocol-pulse: fix two -Wformat-nonliteral warnings
For the stream group, we break into the three components we write out
and print those.

For the IPv6 address printing inside [], we can make this a condition on
the printf statement.
2021-09-07 08:57:28 +10:00
Barnabás Pőcze
b2ec1fb60a pulse-server: split out message handling
Part of !776.
2021-06-25 03:23:24 +02:00
Barnabás Pőcze
5318c0eeca pulse-server: split out media roles
Part of !776.
2021-06-25 03:23:20 +02:00
Peter Hutterer
7697ed0757 treewide: replace strcmp() == 0 with spa_streq()
This change is only done in source files for now, header files will be done
separately.
2021-05-18 22:10:27 +10:00
Peter Hutterer
2405f0942b spa/buffer: rename SPA_MEMBER to SPA_PTROFF
SPA_MEMBER is misleading, all we're doing here is pointer+offset and a
type-casting the result. Rename to SPA_PTROFF which is more expressive (and
has the same number of characters so we don't need to re-indent).
2021-05-06 09:39:39 +00:00
Arun Raghavan
74140abada pulse-server: Factor out module code to compile independently
This starts breaking up the giant monolith that is the pulse-server.c
code into more manageable chunks by trying to split the module code into
individual compilation units.
2021-04-15 19:37:15 -04:00
Wim Taymans
60b405fdfd pulse-server: only send 32 channels max to a client
Limit the amount of channels we send to a client to 32 because this
is the pulseaudio limit.

This means that only the first 32 channels are accessible from the
pulseaudio API.

Fixes #1033
2021-04-14 15:29:46 +02:00
Pauli Virtanen
eb7df98cd6 pulse-server: minor fix 2021-03-27 21:53:49 +02:00
Pauli Virtanen
2681b8236b media-session/pulse-server: more error checks + minor fixes 2021-03-27 19:16:19 +02:00
Wim Taymans
e3b0cc76a3 pulse-server: avoid leaks in error path
When reading the properties failes, make sure to free the properties
anyway.
2021-03-25 17:34:44 +01:00
Wim Taymans
4b591df145 pulse-server: print encoding name in format_info 2021-02-19 14:57:11 +01:00
Wim Taymans
7e5441fbb3 pulse-server: implement stats 2021-01-19 10:52:29 +01:00
Wim Taymans
5469ac19ab pulse-server: map node.description to device.description
Makes Teamspeak work

Fixes #462
2020-12-08 12:20:47 +01:00
Wim Taymans
f95f278067 pulse-server: use channelmap
Convert to an from pulse enum to id in the message layer so that we
can always just deal with native spa types.
Use the channelmap in stream-restore
Parse the channelmap from properties.
2020-11-23 15:37:18 +01:00
Wim Taymans
f7162799f6 message: add module-stream-restore.id property
This should contain the key used to restore the stream volumes and
setting and is used by pavucontrol and gnome-volume-control to
ignore event streams. Fixes slider in pavucontrol and maybe also
the weird volumes in gnome-shell.

See #377
2020-11-18 15:51:40 +01:00
Wim Taymans
4cc466ad64 pulse-server: filter out redundant subscribe messages 2020-11-18 15:00:38 +01:00
Wim Taymans
11a57c9302 pulse-server: add debug level to message_dump 2020-11-17 12:33:09 +01:00
Wim Taymans
242cddd371 pulse-server: add support for proplist value conversion 2020-11-17 12:33:09 +01:00
Wim Taymans
1d3e6b6772 pulse-server: map some properties
Fixes the icon names.

See #377
2020-11-16 11:29:07 +01:00
Wim Taymans
99fcc95d18 pulse-server: don't leak formats 2020-11-09 16:51:34 +01:00
Wim Taymans
b6efcd90a7 pulse-server: improve message debug, add offset 2020-11-09 09:42:15 +01:00
Wim Taymans
efafb41525 pulse-server: debug messages when connection debug enabled 2020-11-03 12:22:35 +01:00
Wim Taymans
bba24b9ff8 pulse-server: return length of TAG_ARBITRARY
So that we don't have to know the length beforehand but can still
check it.
2020-11-03 12:14:09 +01:00
Wim Taymans
94dbd4f9b8 warn about and fix some -Wpointer-sign warnings 2020-11-02 09:03:53 +01:00
Wim Taymans
1cbad89862 pulse-server: add introspection of clients and modules
Add manager object to collect object info
Wait for object info until completing client connect
Implement clients and modules list and info.
2020-10-25 15:28:42 +01:00
Wim Taymans
1ceb902b76 pulse-server: convert between client cubic volume and linear 2020-10-23 09:36:01 +02:00
Wim Taymans
bc1192c8dd pulse-server: handle message errors 2020-10-21 12:00:25 +02:00
Wim Taymans
138e61138f pulse: resize message dynamically 2020-10-08 18:06:11 +02:00
Wim Taymans
f0102fd490 pulse: move pulse protocol to module 2020-10-08 18:06:11 +02:00