From 9cb075aaf475f890cec5f7c67fe651601f73b5a3 Mon Sep 17 00:00:00 2001 From: Michael Janssen Date: Thu, 26 Mar 2015 15:08:34 -0700 Subject: [PATCH] core/advertising: implement UnregisterAdvertisement Implement the UnregisterAdvertisement method of the LEAdvertisingManager1 interface. --- src/advertising.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/advertising.c b/src/advertising.c index aee705bba..04492f7a1 100644 --- a/src/advertising.c +++ b/src/advertising.c @@ -123,6 +123,8 @@ static void advertisement_remove(void *data) g_dbus_client_set_disconnect_watch(ad->client, NULL, NULL); + /* TODO: mgmt API call to remove advert */ + queue_remove(ad->manager->ads, ad); g_idle_add(advertisement_free_idle_cb, ad); @@ -297,10 +299,28 @@ static DBusMessage *unregister_advertisement(DBusConnection *conn, DBusMessage *msg, void *user_data) { + struct btd_advertising *manager = user_data; + DBusMessageIter args; + const char *path; + struct advertisement *ad; + DBG("UnregisterAdvertisement"); - /* TODO */ - return NULL; + if (!dbus_message_iter_init(msg, &args)) + return btd_error_invalid_args(msg); + + if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_OBJECT_PATH) + return btd_error_invalid_args(msg); + + dbus_message_iter_get_basic(&args, &path); + + ad = queue_find(manager->ads, match_advertisement_path, path); + if (!ad) + return btd_error_does_not_exist(msg); + + advertisement_remove(ad); + + return dbus_message_new_method_return(msg); } static const GDBusMethodTable methods[] = { -- 2.47.3