diff --git a/src/advertising.c b/src/advertising.c
index 2f8e539..78178f2 100644
--- a/src/advertising.c
+++ b/src/advertising.c
uint8_t instance;
};
-static bool match_advertisement_path(const void *a, const void *b)
+struct dbus_obj_match {
+ const char *owner;
+ const char *path;
+};
+
+static bool match_advertisement(const void *a, const void *b)
{
const struct advertisement *ad = a;
- const char *path = b;
+ const struct dbus_obj_match *match = b;
+
+ if (match->owner && !g_strcmp0(ad->owner, match->owner))
+ return false;
+
+ if (match->path && !g_strcmp0(ad->path, match->path))
+ return false;
- return g_strcmp0(ad->path, path);
+ return true;
}
static void advertisement_free(void *data)
{
struct btd_advertising *manager = user_data;
DBusMessageIter args;
- const char *path;
struct advertisement *ad;
+ struct dbus_obj_match match;
DBG("RegisterAdvertisement");
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);
+ dbus_message_iter_get_basic(&args, &match.path);
- if (queue_find(manager->ads, match_advertisement_path, path))
+ match.owner = dbus_message_get_sender(msg);
+
+ if (queue_find(manager->ads, match_advertisement, &match))
return btd_error_already_exists(msg);
/* TODO: support more than one advertisement */
if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_ARRAY)
return btd_error_invalid_args(msg);
- ad = advertisement_create(conn, msg, path);
+ ad = advertisement_create(conn, msg, match.path);
if (!ad)
return btd_error_failed(msg,
"Failed to register advertisement");
- DBG("Registered advertisement at path %s", path);
+ DBG("Registered advertisement at path %s", match.path);
ad->manager = manager;
queue_push_tail(manager->ads, ad);
{
struct btd_advertising *manager = user_data;
DBusMessageIter args;
- const char *path;
struct advertisement *ad;
+ struct dbus_obj_match match;
DBG("UnregisterAdvertisement");
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);
+ dbus_message_iter_get_basic(&args, &match.path);
+
+ match.owner = dbus_message_get_sender(msg);
- ad = queue_find(manager->ads, match_advertisement_path, path);
+ ad = queue_find(manager->ads, match_advertisement, &match);
if (!ad)
return btd_error_does_not_exist(msg);