diff mbox series

[BlueZ] profile: Add exception from being claimed internally

Message ID 20200715222812.238172-1-sonnysasaka@chromium.org (mailing list archive)
State Superseded
Headers show
Series [BlueZ] profile: Add exception from being claimed internally | expand

Commit Message

Sonny Sasaka July 15, 2020, 10:28 p.m. UTC
This adds a flag to give exception to profiles that are considered safe
to be both handled internally and externally via GATT API. Currently
this includes the battery profile.

---
 profiles/battery/battery.c | 1 +
 src/device.c               | 2 +-
 src/profile.h              | 5 +++++
 3 files changed, 7 insertions(+), 1 deletion(-)

Comments

Luiz Augusto von Dentz July 15, 2020, 10:39 p.m. UTC | #1
Hi Sonny,

On Wed, Jul 15, 2020 at 3:32 PM Sonny Sasaka <sonnysasaka@chromium.org> wrote:
>
> This adds a flag to give exception to profiles that are considered safe
> to be both handled internally and externally via GATT API. Currently
> this includes the battery profile.
>
> ---
>  profiles/battery/battery.c | 1 +
>  src/device.c               | 2 +-
>  src/profile.h              | 5 +++++
>  3 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/profiles/battery/battery.c b/profiles/battery/battery.c
> index 4da4355a1..20aa47727 100644
> --- a/profiles/battery/battery.c
> +++ b/profiles/battery/battery.c
> @@ -354,6 +354,7 @@ static struct btd_profile batt_profile = {
>         .device_remove  = batt_remove,
>         .accept         = batt_accept,
>         .disconnect     = batt_disconnect,
> +       .claim_service_exception = true,
>  };
>
>  static int batt_init(void)
> diff --git a/src/device.c b/src/device.c
> index 0deee2707..cfa52461f 100644
> --- a/src/device.c
> +++ b/src/device.c
> @@ -3818,7 +3818,7 @@ done:
>         profile = btd_service_get_profile(service);
>
>         /* Claim attributes of internal profiles */
> -       if (!profile->external) {
> +       if (!profile->external && !profile->claim_service_exception) {

The external field was added exactly to allow it to be used externally.

>                 /* Mark the service as claimed by the existing profile. */
>                 gatt_db_service_set_claimed(attr, true);
>         }
> diff --git a/src/profile.h b/src/profile.h
> index 4448a2a6d..25e83381b 100644
> --- a/src/profile.h
> +++ b/src/profile.h
> @@ -36,6 +36,11 @@ struct btd_profile {
>
>         bool auto_connect;
>         bool external;
> +       /* Some profiles are considered safe to be handled internally and also
> +        * be exposed in the GATT API. This flag give such profiles exception
> +        * from being claimed internally.
> +        */
> +       bool claim_service_exception;
>
>         int (*device_probe) (struct btd_service *service);
>         void (*device_remove) (struct btd_service *service);
> --
> 2.26.2
>
Sonny Sasaka July 15, 2020, 10:49 p.m. UTC | #2
Hi Luiz,

On Wed, Jul 15, 2020 at 3:40 PM Luiz Augusto von Dentz
<luiz.dentz@gmail.com> wrote:
>
> Hi Sonny,
>
> On Wed, Jul 15, 2020 at 3:32 PM Sonny Sasaka <sonnysasaka@chromium.org> wrote:
> >
> > This adds a flag to give exception to profiles that are considered safe
> > to be both handled internally and externally via GATT API. Currently
> > this includes the battery profile.
> >
> > ---
> >  profiles/battery/battery.c | 1 +
> >  src/device.c               | 2 +-
> >  src/profile.h              | 5 +++++
> >  3 files changed, 7 insertions(+), 1 deletion(-)
> >
> > diff --git a/profiles/battery/battery.c b/profiles/battery/battery.c
> > index 4da4355a1..20aa47727 100644
> > --- a/profiles/battery/battery.c
> > +++ b/profiles/battery/battery.c
> > @@ -354,6 +354,7 @@ static struct btd_profile batt_profile = {
> >         .device_remove  = batt_remove,
> >         .accept         = batt_accept,
> >         .disconnect     = batt_disconnect,
> > +       .claim_service_exception = true,
> >  };
> >
> >  static int batt_init(void)
> > diff --git a/src/device.c b/src/device.c
> > index 0deee2707..cfa52461f 100644
> > --- a/src/device.c
> > +++ b/src/device.c
> > @@ -3818,7 +3818,7 @@ done:
> >         profile = btd_service_get_profile(service);
> >
> >         /* Claim attributes of internal profiles */
> > -       if (!profile->external) {
> > +       if (!profile->external && !profile->claim_service_exception) {
>
> The external field was added exactly to allow it to be used externally.
Oh, I was misled by the field name, I thought it's to mark profiles
which are not handled internally. I have sent another patch also
clarifying the field with a comment.
>
> >                 /* Mark the service as claimed by the existing profile. */
> >                 gatt_db_service_set_claimed(attr, true);
> >         }
> > diff --git a/src/profile.h b/src/profile.h
> > index 4448a2a6d..25e83381b 100644
> > --- a/src/profile.h
> > +++ b/src/profile.h
> > @@ -36,6 +36,11 @@ struct btd_profile {
> >
> >         bool auto_connect;
> >         bool external;
> > +       /* Some profiles are considered safe to be handled internally and also
> > +        * be exposed in the GATT API. This flag give such profiles exception
> > +        * from being claimed internally.
> > +        */
> > +       bool claim_service_exception;
> >
> >         int (*device_probe) (struct btd_service *service);
> >         void (*device_remove) (struct btd_service *service);
> > --
> > 2.26.2
> >
>
>
> --
> Luiz Augusto von Dentz
diff mbox series

Patch

diff --git a/profiles/battery/battery.c b/profiles/battery/battery.c
index 4da4355a1..20aa47727 100644
--- a/profiles/battery/battery.c
+++ b/profiles/battery/battery.c
@@ -354,6 +354,7 @@  static struct btd_profile batt_profile = {
 	.device_remove	= batt_remove,
 	.accept		= batt_accept,
 	.disconnect	= batt_disconnect,
+	.claim_service_exception = true,
 };
 
 static int batt_init(void)
diff --git a/src/device.c b/src/device.c
index 0deee2707..cfa52461f 100644
--- a/src/device.c
+++ b/src/device.c
@@ -3818,7 +3818,7 @@  done:
 	profile = btd_service_get_profile(service);
 
 	/* Claim attributes of internal profiles */
-	if (!profile->external) {
+	if (!profile->external && !profile->claim_service_exception) {
 		/* Mark the service as claimed by the existing profile. */
 		gatt_db_service_set_claimed(attr, true);
 	}
diff --git a/src/profile.h b/src/profile.h
index 4448a2a6d..25e83381b 100644
--- a/src/profile.h
+++ b/src/profile.h
@@ -36,6 +36,11 @@  struct btd_profile {
 
 	bool auto_connect;
 	bool external;
+	/* Some profiles are considered safe to be handled internally and also
+	 * be exposed in the GATT API. This flag give such profiles exception
+	 * from being claimed internally.
+	 */
+	bool claim_service_exception;
 
 	int (*device_probe) (struct btd_service *service);
 	void (*device_remove) (struct btd_service *service);