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:
parent
5d5ab7761f
commit
8bcf3348e8
4 changed files with 95 additions and 0 deletions
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue