Re: [PATCH] gatt-database: allow GattService anywhere in ObjectManager tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Adam,

On Fri, Jul 31, 2015 at 8:42 PM, Adam Moore
<adam.moore@xxxxxxxxxxxxxxxxx> wrote:
> Relaxes the requirement that object provide ObjectManager AND
> GattService interfaces.
>
> Maintains check that GattService and GattCharacteristics are
> children of ObjectManager, but loses the check that
> GattCharacteristics are children of GattService. Therefore,
> meant as a temporary workaround.
> ---
>  src/gatt-database.c | 20 +++++++++++++++-----
>  1 file changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/src/gatt-database.c b/src/gatt-database.c
> index 69a814d..e82165c 100644
> --- a/src/gatt-database.c
> +++ b/src/gatt-database.c
> @@ -85,6 +85,7 @@ struct external_service {
>         bool failed;
>         char *owner;
>         char *path;     /* Path to GattService1 */
> +       char *manager_path;     /* Path to ObjectManager */
>         DBusMessage *reg;
>         GDBusClient *client;
>         GDBusProxy *proxy;
> @@ -372,6 +373,7 @@ static void service_free(void *data)
>
>         g_free(service->owner);
>         g_free(service->path);
> +       g_free(service->manager_path);
>
>         free(service);
>  }
> @@ -1042,7 +1044,7 @@ static bool match_service(const void *a, const void *b)
>         const struct external_service *service = a;
>         const struct svc_match_data *data = b;
>
> -       return g_strcmp0(service->path, data->path) == 0 &&
> +       return g_strcmp0(service->manager_path, data->path) == 0 &&
>                                 g_strcmp0(service->owner, data->sender) == 0;
>  }
>
> @@ -1321,7 +1323,7 @@ static void proxy_added_cb(GDBusProxy *proxy, void *user_data)
>         iface = g_dbus_proxy_get_interface(proxy);
>         path = g_dbus_proxy_get_path(proxy);
>
> -       if (!g_str_has_prefix(path, service->path))
> +       if (!g_str_has_prefix(path, service->manager_path))
>                 return;
>
>         if (g_strcmp0(iface, GATT_SERVICE_IFACE) == 0) {
> @@ -1332,12 +1334,20 @@ static void proxy_added_cb(GDBusProxy *proxy, void *user_data)
>                  * TODO: We may want to support adding included services in a
>                  * single hierarchy.
>                  */
> -               if (g_strcmp0(path, service->path) != 0) {
> +               if (service->path != NULL) {
>                         error("Multiple services added within hierarchy");
>                         service->failed = true;
>                         return;
>                 }
>
> +               // Set service path now that we've found a service
> +               service->path = g_strdup(path);
> +               if (!service->path) {
> +                       error("Failed to allocate service path");
> +                       service->failed = true;
> +                       return;
> +               }
> +
>                 /* Add 1 for the service declaration */
>                 if (!incr_attr_count(service, 1)) {
>                         error("Failed to increment attribute count");
> @@ -2171,8 +2181,8 @@ static struct external_service *service_create(DBusConnection *conn,
>         if (!service->owner)
>                 goto fail;
>
> -       service->path = g_strdup(path);
> -       if (!service->path)
> +       service->manager_path = g_strdup(path);
> +       if (!service->manager_path)
>                 goto fail;
>
>         service->chrcs = queue_new();
> --
> 2.4.6

Well if we are doing to do that then perhaps we should list all the
services under the path ObjectManager path not only one.


-- 
Luiz Augusto von Dentz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux