From 78193c18a3fa96eaa981fdbd9d46cd58be920e1a Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Mon, 23 Mar 2015 17:38:53 +0200 Subject: [PATCH] core/gatt: Add implementation of UnregisterProfile This adds initial implementation of GattProfile.UnregisterProfile. --- src/gatt-database.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/gatt-database.c b/src/gatt-database.c index 867cc7e23..bbeb7cdd5 100644 --- a/src/gatt-database.c +++ b/src/gatt-database.c @@ -2339,6 +2339,37 @@ static DBusMessage *manager_register_profile(DBusConnection *conn, return dbus_message_new_method_return(msg); } +static DBusMessage *manager_unregister_profile(DBusConnection *conn, + DBusMessage *msg, void *user_data) +{ + struct btd_gatt_database *database = user_data; + const char *sender = dbus_message_get_sender(msg); + const char *path; + DBusMessageIter args; + struct external_profile *profile; + struct svc_match_data match_data; + + 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); + + match_data.path = path; + match_data.sender = sender; + + profile = queue_remove_if(database->profiles, match_profile, + &match_data); + if (!profile) + return btd_error_does_not_exist(msg); + + profile_free(profile); + + return dbus_message_new_method_return(msg); +} + static const GDBusMethodTable manager_methods[] = { { GDBUS_EXPERIMENTAL_ASYNC_METHOD("RegisterService", GDBUS_ARGS({ "service", "o" }, { "options", "a{sv}" }), @@ -2350,6 +2381,9 @@ static const GDBusMethodTable manager_methods[] = { GDBUS_ARGS({ "profile", "o" }, { "UUIDs", "as" }, { "options", "a{sv}" }), NULL, manager_register_profile) }, + { GDBUS_EXPERIMENTAL_ASYNC_METHOD("UnregisterProfile", + GDBUS_ARGS({ "profile", "o" }), + NULL, manager_unregister_profile) }, { } }; -- 2.47.3