From 987c7fc1e464a8e4d6d39c41bed25f00baca267e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= Date: Sat, 6 Nov 2021 18:32:43 +0100 Subject: [PATCH] pulse-server: manager: add mechanism to query object data Add `pw_manager_object_get_data()` which can fetch linked data by its id. And use it in the zeroconf-publish module. --- src/modules/module-protocol-pulse/manager.c | 8 ++++++++ src/modules/module-protocol-pulse/manager.h | 1 + .../modules/module-zeroconf-publish.c | 7 ++++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/modules/module-protocol-pulse/manager.c b/src/modules/module-protocol-pulse/manager.c index f94b334ac..dff7ff291 100644 --- a/src/modules/module-protocol-pulse/manager.c +++ b/src/modules/module-protocol-pulse/manager.c @@ -853,6 +853,14 @@ done: return SPA_PTROFF(d, sizeof(struct object_data), void); } +void *pw_manager_object_get_data(struct pw_manager_object *obj, const char *id) +{ + struct object *o = SPA_CONTAINER_OF(obj, struct object, this); + struct object_data *d = object_find_data(o, id); + + return d ? SPA_PTROFF(d, sizeof(*d), void) : NULL; +} + int pw_manager_sync(struct pw_manager *manager) { struct manager *m = SPA_CONTAINER_OF(manager, struct manager, this); diff --git a/src/modules/module-protocol-pulse/manager.h b/src/modules/module-protocol-pulse/manager.h index abdd7987d..7d774d4de 100644 --- a/src/modules/module-protocol-pulse/manager.h +++ b/src/modules/module-protocol-pulse/manager.h @@ -112,6 +112,7 @@ int pw_manager_for_each_object(struct pw_manager *manager, void *data); void *pw_manager_object_add_data(struct pw_manager_object *o, const char *id, size_t size); +void *pw_manager_object_get_data(struct pw_manager_object *obj, const char *id); bool pw_manager_object_is_client(struct pw_manager_object *o); bool pw_manager_object_is_module(struct pw_manager_object *o); diff --git a/src/modules/module-protocol-pulse/modules/module-zeroconf-publish.c b/src/modules/module-protocol-pulse/modules/module-zeroconf-publish.c index e1efff647..deb983183 100644 --- a/src/modules/module-protocol-pulse/modules/module-zeroconf-publish.c +++ b/src/modules/module-protocol-pulse/modules/module-zeroconf-publish.c @@ -132,7 +132,7 @@ static int service_free(void *d, struct pw_manager_object *o) if (!pw_manager_object_is_sink(o) && !pw_manager_object_is_source(o)) return 0; - s = pw_manager_object_add_data(o, SERVICE_DATA_ID, sizeof(*s)); + s = pw_manager_object_get_data(o, SERVICE_DATA_ID); if (s == NULL) { pw_log_error("Could not find service to remove"); return 0; @@ -153,14 +153,15 @@ static int service_free(void *d, struct pw_manager_object *o) return 0; } -static int unpublish_service(void *data, struct pw_manager_object *o) { +static int unpublish_service(void *data, struct pw_manager_object *o) +{ struct module_zeroconf_publish_data *d = data; struct service *s; if (!pw_manager_object_is_sink(o) && !pw_manager_object_is_source(o)) return 0; - s = pw_manager_object_add_data(o, SERVICE_DATA_ID, sizeof(*s)); + s = pw_manager_object_get_data(o, SERVICE_DATA_ID); if (s == NULL) { pw_log_error("Could not find service to remove"); return 0;