Commit graph

164 commits

Author SHA1 Message Date
Gleb Popov
a76ccfe64b Set PW_KEY_SEC_LABEL property on FreeBSD and avoid compiler warning. 2021-10-22 19:07:45 +03:00
Peter Hutterer
96f8a7597e modules: switch protocol-native to the new logging system
This is more complicated than a normal module because we have two
logging topics: mod.protocol-native and conn.protocol-native for wire
messages. Because the latter use spa_debug (through spa_debug_pod) we
need to #define our way around so those too use the right topics.

Note that this removes the previous "connection" category, it is now
"conn.protocol-native" instead.
2021-09-28 09:35:39 +02:00
Peter Hutterer
b70a3dca85 protocol-native: don't initialize sockets in $HOME
Leaving sockets in the home directories is bad form, so let's not do
this.

This effectively requires XDG_RUNTIME_DIR to be set for pipewire to
work - it is set correctly on most setups anyway and on custom setups
this needs to be addressed with a custom environment.

Fixes #1443
2021-07-27 08:23:23 +00:00
Peter Hutterer
f181232a61 doc: add the documentation infrastructure for pipewire modules
All empty pages for now but at least this makes them show up in the
documentation.
2021-06-25 08:42:24 +00:00
George Kiagiadakis
59407d2f08 includes: update all references to extensions to point to pipewire/extensions
This also brings the advantage that all tools, examples, modules, components
can also be compiled standalone out-of-tree using libpipewire from the system
2021-06-18 17:54:18 +03:00
Peter Hutterer
95a84e797a treewide: replace !strcmp() 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
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
Andrea Gelmini
f489e32e44 Fix typo in code 2021-04-30 07:40:20 +00:00
Jonas Holmberg
1e6b7b8a83 module-protocol-native: Handle pending connect
Do not return an error immediately if connect() fails with EAGAIN. Check
if it completed successfully with getsockopt() when the socket becomes
writable instead.

This is the way to handle non-blocking connect() by the book but after
testing it seems that the case when connect() fails with EAGAIN is when
the listen backlog is full on the server side and in that case the
server socket is closed. So even though connect() completes successfully
according to getsockopt() the client socket is no longer usable
(on_remote_data() will get both SPA_IO_OUT and SPA_IO_HUP in mask on the
first call after connect() returned EAGAIN).
2021-04-22 17:46:00 +00:00
Huang-Huang Bao
3bce026d67 protocol-native: fix out-of-bounds access to SEC_LABEL hex table
If buffer type char[] is 4-byte aligned, higher 3-byte on char could be non-zero if data is not initialized, which make 'buffer[i] >> 4' larger than 0x0f.
Use type uint8_t[] on SEC_LABEL buffer to fix it.
2021-03-21 12:07:39 +00:00
Wim Taymans
de12a24e77 protocol-native: hex encode invalid SEC_LABEL
When the sec label contains invalid chars, hexencode it to avoid
causing problems with invalid strings later.
2021-03-20 21:00:55 +01:00
Pauli Virtanen
23f010541f module-protocol-native: make demarshaling safe vs. reentering
The message structures returned by pw_protocol_native_connection_get_next
point to data that is contained in the buffer of the connection.

The data was invalidated when pw_protocol_native_connection_get_next was
called the next time, which made the connection loop non-reentrant, in
cases where it was re-entered from demarshal callbacks.

Fix this by allocating new buffers when reentering and stashing the old
buffers onto a stack. The returned message structure is also stored on
the stack to make lifetimes to match.
2021-01-12 10:13:02 +01:00
Wim Taymans
316a96d501 improve debug 2020-12-06 09:32:12 +01:00
Wim Taymans
387009e0d6 return ENOENT for unknown resources
Fix some other errors as well, ENOSYS for invalid interface, ENOTSUP
for unimplemented methods.
2020-11-20 12:11:37 +01:00
Wim Taymans
d2c2edb7ce protocol-native: rework resume of busy client
If a client becomes unbusy again, signal a resume event so that the
messages are processed in the next mainloop iteration. This gives the
current iteration time to perform cleanups if needed.

Remove the look hook and always do flushing with an IO_OUT event. Rework
some things so that we can flush right after processing input without
having to go through a loop iteration.

See #298
2020-11-19 11:57:36 +01:00
Wim Taymans
01b473e695 protocol-native: handle peersec errors better
Only warn if something is really wrong otherwise just log with
info and don't set the property.

Fixes #385
2020-11-17 13:22:04 +01:00
Wim Taymans
14f68565ad protocol-native: refactor handle client errors
So that we don't spam the log with warnings

See #385
2020-11-17 13:09:49 +01:00
Greg V
c1cda26ce8 protocol-native: get pid/gid/uid on FreeBSD using LOCAL_PEERCRED 2020-11-09 11:14:20 +00:00
Sergey Bugaev
28af82e6d9 meson: rename HAVE_SYSTEMD_DAEMON to HAVE_SYSTEMD
This variable describes whether we have systemd and libsystemd,
not just <systemd/sd-daemon.h>

While at it, sneak in a fix for the warning message:
"systemd should never ever be capitalized".

Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
2020-11-06 15:51:24 +00:00
Wim Taymans
1570e62635 remove hooks from objects
Remove the hooks we installed on objects in the destroy/free event
or before calling _destroy. This is not really needed but it is
a nice thing to do because it calls the hook removed callbacks.
2020-11-06 15:53:32 +01:00
Wim Taymans
a7d522c743 protocol: fix sign in error checks
Our errors are -errno
2020-11-02 16:46:13 +01:00
Wim Taymans
64913f4c7c protocol-native: ref the client while emiting error
Increase the client refcount while we emit an error to make sure
it doesn't get destroyed in the callbacks.

See #340
2020-10-21 13:25:00 +02:00
Wim Taymans
eaa08e209f protocol-native: remove mainloop hook only once 2020-09-15 18:00:08 +02:00
Wim Taymans
1a2e783a6f protocol-native: keep client around while processing
When we process the messages of a client, keep the client around
because some callback might have disconnected and tried to free
us.
2020-09-15 13:54:50 +02:00
Wim Taymans
8a9bb9dabb Use fcnt F_DUPFD_CLOEXEC to dup an fd
Closes #38
2020-08-06 11:08:20 +02:00
Wim Taymans
6f2e274b15 protocol: add a few more options for XDG_RUNTIME_DIR
PIPEWIRE_CORE can be used to specify a server name.
PIPEWIRE_REMOTE can be used to specify what server name to
connect to.

Either use the absolute path of the name to create and connect
to a server, or use a relative path. For a relative path, the
server name will be completed by prefixing the following paths
in order:

PIPEWIRE_RUNTIME_DIR environment variable,
XDG_RUNTIME_DIR environment variable,
HOME environment variable,
USERPROFILE environment variable,
home directory as stored in the password database.

Fixes #259
2020-07-31 12:46:58 +02:00
Wim Taymans
91d4806611 permission: add some helpers
Add PW_PERM_ALL as a shortcut for all permissions
Add PW_PERMISSION_FORMAT and PW_PERMISSION_ARGS to nicely format
permissions.
2020-07-30 16:26:29 +02:00
Wim Taymans
141238d88b core: always use explicitly configured properties first
First use the configured properties, then use the env variables.
Make the daemon use the env variable by default.

This makes it possible to start servers with PIPEWIRE_CORE env variable
names but still override with the command option.

Makes it possible to make apps connect to PIPEWIRE_REMOTE env by
default and allows you to override with the command option.
2020-07-23 13:40:02 +02:00
Wim Taymans
2bb1d88fbe keys: let env variables overwrite the keys 2020-07-22 11:25:19 +02:00
Wim Taymans
07cc07597c access: always put access in property
Improve debug
2020-07-17 16:47:14 +02:00
Wim Taymans
2462cac4f2 add some more debug 2020-06-05 16:44:35 +02:00
Wim Taymans
3324a15fe3 protocol: use bool for Bool pod 2020-04-30 17:12:20 +02:00
Wim Taymans
aafd1e7298 improve debug
Improve log so that debug level 3 gives a reasonably readable overview
of what is going on.
2020-04-22 12:47:18 +02:00
Wim Taymans
48036f7d13 improve debug 2020-04-21 15:51:55 +02:00
Wim Taymans
a86f70c13d protocol-native: avoid destroying NULL source
The source might have been destroyed before.
2020-04-02 15:25:13 +02:00
Wim Taymans
72d70b0f48 Add and fix some more warnings
Fixes #216
2020-03-17 11:37:56 +01:00
Rasmus Thomsen
fba9d8931d module-protocol-native: fix build on s390x 2020-03-09 08:52:16 +00:00
Wim Taymans
65d72bb87c improve error messages
Send create_object error messages to the new resource id so that
the client can better know what proxy is failing.
Use resource_remove when create_object fails because the core will
already send a remove_id on failure.
Try to send other errors to the proxy that made the request if
possible.
2020-02-25 16:38:13 +01:00
Wim Taymans
b33bd68bac improve error messages
Log an error when we send an error to the client so that we don't need
to log and error anymore.
Improve the error messages when we can
Move some warnings and errors to debug
2020-02-21 15:02:55 +01:00
Pantelis Antoniou
e58d33e8d8 Terminate PW_KEY_SEC_LABEL key with '\0'
The socket call does not terminate the string with '\0' so
we have to use the length explicitly.

Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-02-21 11:30:49 +01:00
Wim Taymans
d2e7f75071 resource: destroy old core_resource
If there is already a core_resource when we are going to make a new
one, remove the old one. This can happen when there is a version
switch.
2020-02-10 16:22:49 +01:00
Wim Taymans
1c46dc32f8 protocol-native: improve message debug 2020-01-17 11:00:09 +01:00
Wim Taymans
043e7f24fe add some more useful defines
Add define to match all ids for nodes and params.
Add define for invalid permissions
2020-01-15 11:15:51 +01:00
Wim Taymans
0ea8a92ea5 core: implement pw_core_set_paused
Make it possible to pause emision of events from the core object.
This is interesting if we need to wait for completion of some operations
on another connection before resuming processing.

See #204
2020-01-14 16:37:01 +01:00
Wim Taymans
df519ee3b3 avoid including private.h
Expose some more methods to make it possible to build without
including the private.h header, especially in modules.
2020-01-02 13:48:50 +01:00
Wim Taymans
1317ca140c pass spa_dict around as config
Don't pass pw_properties around when we simply need to pass around
config info, only use pw_properties when used to construct an object
that keeps the properties.
2019-12-13 11:26:05 +01:00
Wim Taymans
f724319e8a context: move core implementation to impl-core.h
Move the core implementation to a separate file. Make a default
core object in the context.

Pass impl-core to server. We now tie the server to a core. Also
keep track of the core that a client connected to.

Fill the properties that we usually use to connect in the context
and copy them when a connection is made.

Use "internal" as the remote name to connect to the default
internal core.
2019-12-12 16:34:01 +01:00
Wim Taymans
e96bdc6bd9 pw_impl_client_new -> pw_context_create_client 2019-12-11 17:52:15 +01:00
Wim Taymans
73eea24443 impl-client: improve constructor
Pass the protocol in constructor
Keep the link in the server protocol list private to the prototol.
2019-12-11 17:19:12 +01:00
Wim Taymans
443a49947e pw_module -> pw_impl_module 2019-12-11 11:57:56 +01:00