1
0
Fork 0
mirror of https://github.com/albfan/miraclecast.git synced 2025-02-12 16:31:54 +00:00

miracled: implement InterfacesAdded/Removed

Send ObjectManager.Interfaces{Added,Removed} signals whenever new objects
appear. Note that we cannot set DBus interfaces there as sd-bus ignores
them. We'll try to fix that upstream and until then just not expose any of
those.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
This commit is contained in:
David Herrmann 2014-02-10 16:29:02 +01:00
parent 5d5ab7761f
commit 8bcf3348e8
4 changed files with 95 additions and 0 deletions

View file

@ -283,6 +283,48 @@ void peer_dbus_properties_changed(struct peer *p, const char *prop, ...)
log_vERR(r);
}
void peer_dbus_added(struct peer *p)
{
_cleanup_free_ char *path = NULL;
int r;
path = shl_strcat("/org/freedesktop/miracle/peer/", p->name);
if (!path)
return log_vENOMEM();
r = sd_bus_emit_interfaces_added(p->l->m->bus,
path,
/*
"org.freedesktop.DBus.Properties",
"org.freedesktop.DBus.Introspectable",
*/
"org.freedesktop.miracle.Peer",
NULL);
if (r < 0)
log_vERR(r);
}
void peer_dbus_removed(struct peer *p)
{
_cleanup_free_ char *path = NULL;
int r;
path = shl_strcat("/org/freedesktop/miracle/peer/", p->name);
if (!path)
return log_vENOMEM();
r = sd_bus_emit_interfaces_removed(p->l->m->bus,
path,
/*
"org.freedesktop.DBus.Properties",
"org.freedesktop.DBus.Introspectable",
*/
"org.freedesktop.miracle.Peer",
NULL);
if (r < 0)
log_vERR(r);
}
/*
* Link DBus
*/
@ -445,6 +487,48 @@ void link_dbus_properties_changed(struct link *l, const char *prop, ...)
log_vERR(r);
}
void link_dbus_added(struct link *l)
{
_cleanup_free_ char *path = NULL;
int r;
path = shl_strcat("/org/freedesktop/miracle/link/", l->name);
if (!path)
return log_vENOMEM();
r = sd_bus_emit_interfaces_added(l->m->bus,
path,
/*
"org.freedesktop.DBus.Properties",
"org.freedesktop.DBus.Introspectable",
*/
"org.freedesktop.miracle.Link",
NULL);
if (r < 0)
log_vERR(r);
}
void link_dbus_removed(struct link *l)
{
_cleanup_free_ char *path = NULL;
int r;
path = shl_strcat("/org/freedesktop/miracle/link/", l->name);
if (!path)
return log_vENOMEM();
r = sd_bus_emit_interfaces_removed(l->m->bus,
path,
/*
"org.freedesktop.DBus.Properties",
"org.freedesktop.DBus.Introspectable",
*/
"org.freedesktop.miracle.Link",
NULL);
if (r < 0)
log_vERR(r);
}
/*
* Manager DBus
*/

View file

@ -239,6 +239,7 @@ int link_new(struct manager *m,
}
++m->link_cnt;
link_dbus_added(l);
log_info("new managed link: %s", l->name);
if (out)
@ -265,6 +266,7 @@ void link_free(struct link *l)
if (shl_htable_remove_str(&l->m->links, l->name, NULL, NULL)) {
log_info("remove managed link: %s", l->name);
link_dbus_removed(l);
--l->m->link_cnt;
}

View file

@ -91,6 +91,7 @@ static int peer_new(struct link *l, struct peer **out)
++l->m->peer_cnt;
shl_dlist_link(&l->peers, &p->list);
peer_dbus_added(p);
log_info("new peer: %s@%s", p->name, l->name);
if (out)
@ -130,6 +131,7 @@ void peer_free(struct peer *p)
if (shl_htable_remove_str(&p->l->m->peers, p->name, NULL, NULL)) {
log_info("remove managed peer: %s@%s", p->name, p->l->name);
peer_dbus_removed(p);
--p->l->m->peer_cnt;
shl_dlist_unlink(&p->list);
}

View file

@ -140,7 +140,14 @@ struct peer *manager_find_peer(struct manager *m, const char *name);
/* dbus */
_shl_sentinel_
void peer_dbus_properties_changed(struct peer *p, const char *prop, ...);
void peer_dbus_added(struct peer *p);
void peer_dbus_removed(struct peer *p);
_shl_sentinel_
void link_dbus_properties_changed(struct link *l, const char *prop, ...);
void link_dbus_added(struct link *l);
void link_dbus_removed(struct link *l);
#endif /* MIRACLED_H */