Diff between 3bcc53e00c541ab7133e93c084a176ed90dc6d76 and 9cb075aaf475f890cec5f7c67fe651601f73b5a3

Changed Files

File Additions Deletions Status
src/advertising.c +22 -2 modified

Full Patch

diff --git a/src/advertising.c b/src/advertising.c
index aee705b..04492f7 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[] = {