diff --git a/lib/wp/core.c b/lib/wp/core.c index e4af4445c57048e74c70cfcabe22267e7a142cc1..85d45b6871f596dcd80d8193e2fd0704bb573be6 100644 --- a/lib/wp/core.c +++ b/lib/wp/core.c @@ -545,6 +545,43 @@ wp_core_get_remote_state (WpCore * self, const gchar ** error) return (WpRemoteState) pw_remote_get_state (self->pw_remote, error); } +WpProxy * +wp_core_create_local_object (WpCore * self, const gchar *factory_name, + guint32 interface_type, guint32 interface_version, + WpProperties * properties) +{ + struct pw_proxy *pw_proxy = NULL; + struct pw_factory *factory = NULL; + gpointer iface = NULL; + + g_return_val_if_fail (WP_IS_CORE (self), NULL); + g_return_val_if_fail (self->pw_core, NULL); + g_return_val_if_fail (self->pw_remote, NULL); + + factory = pw_core_find_factory (self->pw_core, factory_name); + if (!factory) + return NULL; + + iface = pw_factory_create_object (factory, + NULL, + interface_type, + interface_version, + properties ? wp_properties_to_pw_properties (properties) : NULL, + 0); + if (!iface) + return NULL; + + pw_proxy = pw_remote_export (self->pw_remote, + interface_type, + properties ? wp_properties_to_pw_properties (properties) : NULL, + iface, + 0); + if (!pw_proxy) + return NULL; + + return wp_proxy_new_wrap (self, pw_proxy, interface_type, interface_version); +} + WpProxy * wp_core_create_remote_object (WpCore *self, const gchar *factory_name, guint32 interface_type, diff --git a/lib/wp/core.h b/lib/wp/core.h index 96f4cad956abf8abc5758866ad4dce3271482d69..a31d64998b38f5ce4849647b65fa83dc70e7fac5 100644 --- a/lib/wp/core.h +++ b/lib/wp/core.h @@ -50,6 +50,9 @@ struct pw_remote * wp_core_get_pw_remote (WpCore * self); gboolean wp_core_connect (WpCore * self); WpRemoteState wp_core_get_remote_state (WpCore * self, const gchar ** error); +WpProxy * wp_core_create_local_object (WpCore * self, + const gchar *factory_name, guint32 interface_type, + guint32 interface_version, WpProperties * properties); WpProxy * wp_core_create_remote_object (WpCore * self, const gchar * factory_name, guint32 interface_type, guint32 interface_version, WpProperties * properties);