static struct advertisement *advertisement_create(DBusConnection *conn, DBusMessage *msg, const char *path) { struct advertisement *ad; const char *sender = dbus_message_get_sender(msg); if (!path || !g_str_has_prefix(path, "/")) return NULL; ad = new0(struct advertisement, 1); if (!ad) return NULL; ad->client = g_dbus_client_new_full(conn, sender, path, path); if (!ad->client) goto fail; ad->owner = g_strdup(sender); if (!ad->owner) goto fail; ad->path = g_strdup(path); if (!ad->path) goto fail; DBG("Adding proxy for %s", path); ad->proxy = g_dbus_proxy_new(ad->client, path, LE_ADVERTISEMENT_IFACE); if (!ad->proxy) goto fail; g_dbus_client_set_proxy_handlers(ad->client, advertisement_proxy_added, NULL, NULL, ad); ad->reg = dbus_message_ref(msg); ad->data = bt_ad_new(); if (!ad->data) goto fail; return ad; fail: advertisement_free(ad); return NULL; }
GDBusClient *g_dbus_client_new(DBusConnection *connection, const char *service, const char *path) { return g_dbus_client_new_full(connection, service, path, "/"); }