return NULL; } static const GDBusPropertyTable descriptor_properties[] = { { "UUID", "s", descriptor_get_uuid, NULL, NULL, G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, { "Characteristic", "o", descriptor_get_characteristic, NULL, NULL, G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, { "Value", "ay", descriptor_get_value, NULL, descriptor_value_exists, G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, { } }; static const GDBusMethodTable descriptor_methods[] = { { GDBUS_EXPERIMENTAL_ASYNC_METHOD("ReadValue", NULL, GDBUS_ARGS({ "value", "ay" }), descriptor_read_value) }, { GDBUS_EXPERIMENTAL_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" }), NULL, descriptor_write_value) }, { } }; static void descriptor_free(void *data) { struct descriptor *desc = data; g_free(desc->path); free(desc); }
dbus_message_iter_get_basic(&args, &match.path); match.owner = dbus_message_get_sender(msg); ad = queue_find(manager->ads, match_advertisement, &match); if (!ad) return btd_error_does_not_exist(msg); advertisement_remove(ad); return dbus_message_new_method_return(msg); } static const GDBusMethodTable methods[] = { { GDBUS_EXPERIMENTAL_ASYNC_METHOD("RegisterAdvertisement", GDBUS_ARGS({ "advertisement", "o" }, { "options", "a{sv}" }), NULL, register_advertisement) }, { GDBUS_EXPERIMENTAL_ASYNC_METHOD("UnregisterAdvertisement", GDBUS_ARGS({ "service", "o" }), NULL, unregister_advertisement) }, { } }; static void advertising_manager_destroy(void *user_data) { struct btd_advertising *manager = user_data; queue_destroy(manager->ads, advertisement_destroy); mgmt_unref(manager->mgmt);