2017-10-03 18:35:07

by Yunhan Wang

[permalink] [raw]
Subject: [PATCH BlueZ] gatt: Fix sending indications with proxy

When using AcquireNotify with indication, the proxy needs to be filled in
send_notification_to_devices so as to get indication confirmation in
applciation.
---
src/gatt-database.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gatt-database.c b/src/gatt-database.c
index 0c84b2569..47304704a 100644
--- a/src/gatt-database.c
+++ b/src/gatt-database.c
@@ -1831,7 +1831,7 @@ static bool pipe_io_read(struct io *io, void *user_data)
buf, bytes_read,
gatt_db_attribute_get_handle(chrc->ccc),
chrc->props & BT_GATT_CHRC_PROP_INDICATE,
- NULL);
+ chrc->proxy);

return true;
}
--
2.14.2.822.g60be5d43e6-goog



2017-10-05 13:41:10

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH BlueZ] gatt: Fix sending indications with proxy

Hi Yunhan,

On Thu, Oct 5, 2017 at 11:21 AM, Yunhan Wang <[email protected]> wrote:
> Hi, Luiz
>
> With this change, all are working fine via using AcquireWrite and
> AcquireNotify now in my end. I have not yet see any issue so far. Any
> other concern or better idea?
>
> Thanks
> Best wishes
> Yunhan
>
> On Wed, Oct 4, 2017 at 7:55 AM, Yunhan Wang <[email protected]> wrote:
>> Hi, Luiz
>>
>> On Wed, Oct 4, 2017 at 4:19 AM, Luiz Augusto von Dentz
>> <[email protected]> wrote:
>>> Hi Yunhan,
>>>
>>> On Tue, Oct 3, 2017 at 9:35 PM, Yunhan Wang <[email protected]> wrote:
>>>> When using AcquireNotify with indication, the proxy needs to be filled in
>>>> send_notification_to_devices so as to get indication confirmation in
>>>> applciation.
>>>> ---
>>>> src/gatt-database.c | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/src/gatt-database.c b/src/gatt-database.c
>>>> index 0c84b2569..47304704a 100644
>>>> --- a/src/gatt-database.c
>>>> +++ b/src/gatt-database.c
>>>> @@ -1831,7 +1831,7 @@ static bool pipe_io_read(struct io *io, void *user_data)
>>>> buf, bytes_read,
>>>> gatt_db_attribute_get_handle(chrc->ccc),
>>>> chrc->props & BT_GATT_CHRC_PROP_INDICATE,
>>>> - NULL);
>>>> + chrc->proxy);
>>>>
>>>> return true;
>>>> }
>>>> --
>>>> 2.14.2.822.g60be5d43e6-goog
>>>
>>> Im not sure this the correct fix, the reason why the proxy is NULL is
>>> because the fd is being used for io, though the confirmation has no
>>> effect on the flow control Id expect some inband signalling in this
>>> case but that might actually require something like a socketpair in
>>> order to be able to write confirmation back.
>>>
>> I think pipe_io_read should be pretty similar to property_changed_cb
>> in https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/gatt-database.c#n2103,
>> both are used to handle the written value from application. Therefore,
>> send_notification_to_devices should be fine here with proxy. For
>> "socketpair", I guess you concern is Confirm? If Confirm is defined in
>> application, then confirmation should be able to be sent back to
>> application. If Confirm is not defined, it should be also fine in
>> https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/gatt-database.c#n883.
>>> --
>>> Luiz Augusto von Dentz

Applied, thanks.

--
Luiz Augusto von Dentz

2017-10-05 08:21:40

by Yunhan Wang

[permalink] [raw]
Subject: Re: [PATCH BlueZ] gatt: Fix sending indications with proxy

Hi, Luiz

With this change, all are working fine via using AcquireWrite and
AcquireNotify now in my end. I have not yet see any issue so far. Any
other concern or better idea?

Thanks
Best wishes
Yunhan

On Wed, Oct 4, 2017 at 7:55 AM, Yunhan Wang <[email protected]> wrote:
> Hi, Luiz
>
> On Wed, Oct 4, 2017 at 4:19 AM, Luiz Augusto von Dentz
> <[email protected]> wrote:
>> Hi Yunhan,
>>
>> On Tue, Oct 3, 2017 at 9:35 PM, Yunhan Wang <[email protected]> wrote:
>>> When using AcquireNotify with indication, the proxy needs to be filled in
>>> send_notification_to_devices so as to get indication confirmation in
>>> applciation.
>>> ---
>>> src/gatt-database.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/src/gatt-database.c b/src/gatt-database.c
>>> index 0c84b2569..47304704a 100644
>>> --- a/src/gatt-database.c
>>> +++ b/src/gatt-database.c
>>> @@ -1831,7 +1831,7 @@ static bool pipe_io_read(struct io *io, void *user_data)
>>> buf, bytes_read,
>>> gatt_db_attribute_get_handle(chrc->ccc),
>>> chrc->props & BT_GATT_CHRC_PROP_INDICATE,
>>> - NULL);
>>> + chrc->proxy);
>>>
>>> return true;
>>> }
>>> --
>>> 2.14.2.822.g60be5d43e6-goog
>>
>> Im not sure this the correct fix, the reason why the proxy is NULL is
>> because the fd is being used for io, though the confirmation has no
>> effect on the flow control Id expect some inband signalling in this
>> case but that might actually require something like a socketpair in
>> order to be able to write confirmation back.
>>
> I think pipe_io_read should be pretty similar to property_changed_cb
> in https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/gatt-database.c#n2103,
> both are used to handle the written value from application. Therefore,
> send_notification_to_devices should be fine here with proxy. For
> "socketpair", I guess you concern is Confirm? If Confirm is defined in
> application, then confirmation should be able to be sent back to
> application. If Confirm is not defined, it should be also fine in
> https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/gatt-database.c#n883.
>> --
>> Luiz Augusto von Dentz
>
> Thanks
> Best wishes
> Yunhan

2017-10-04 14:55:54

by Yunhan Wang

[permalink] [raw]
Subject: Re: [PATCH BlueZ] gatt: Fix sending indications with proxy

Hi, Luiz

On Wed, Oct 4, 2017 at 4:19 AM, Luiz Augusto von Dentz
<[email protected]> wrote:
> Hi Yunhan,
>
> On Tue, Oct 3, 2017 at 9:35 PM, Yunhan Wang <[email protected]> wrote:
>> When using AcquireNotify with indication, the proxy needs to be filled in
>> send_notification_to_devices so as to get indication confirmation in
>> applciation.
>> ---
>> src/gatt-database.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/src/gatt-database.c b/src/gatt-database.c
>> index 0c84b2569..47304704a 100644
>> --- a/src/gatt-database.c
>> +++ b/src/gatt-database.c
>> @@ -1831,7 +1831,7 @@ static bool pipe_io_read(struct io *io, void *user_data)
>> buf, bytes_read,
>> gatt_db_attribute_get_handle(chrc->ccc),
>> chrc->props & BT_GATT_CHRC_PROP_INDICATE,
>> - NULL);
>> + chrc->proxy);
>>
>> return true;
>> }
>> --
>> 2.14.2.822.g60be5d43e6-goog
>
> Im not sure this the correct fix, the reason why the proxy is NULL is
> because the fd is being used for io, though the confirmation has no
> effect on the flow control Id expect some inband signalling in this
> case but that might actually require something like a socketpair in
> order to be able to write confirmation back.
>
I think pipe_io_read should be pretty similar to property_changed_cb
in https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/gatt-database.c#n2103,
both are used to handle the written value from application. Therefore,
send_notification_to_devices should be fine here with proxy. For
"socketpair", I guess you concern is Confirm? If Confirm is defined in
application, then confirmation should be able to be sent back to
application. If Confirm is not defined, it should be also fine in
https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/gatt-database.c#n883.
> --
> Luiz Augusto von Dentz

Thanks
Best wishes
Yunhan

2017-10-04 11:19:04

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH BlueZ] gatt: Fix sending indications with proxy

Hi Yunhan,

On Tue, Oct 3, 2017 at 9:35 PM, Yunhan Wang <[email protected]> wrote:
> When using AcquireNotify with indication, the proxy needs to be filled in
> send_notification_to_devices so as to get indication confirmation in
> applciation.
> ---
> src/gatt-database.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/gatt-database.c b/src/gatt-database.c
> index 0c84b2569..47304704a 100644
> --- a/src/gatt-database.c
> +++ b/src/gatt-database.c
> @@ -1831,7 +1831,7 @@ static bool pipe_io_read(struct io *io, void *user_data)
> buf, bytes_read,
> gatt_db_attribute_get_handle(chrc->ccc),
> chrc->props & BT_GATT_CHRC_PROP_INDICATE,
> - NULL);
> + chrc->proxy);
>
> return true;
> }
> --
> 2.14.2.822.g60be5d43e6-goog

Im not sure this the correct fix, the reason why the proxy is NULL is
because the fd is being used for io, though the confirmation has no
effect on the flow control Id expect some inband signalling in this
case but that might actually require something like a socketpair in
order to be able to write confirmation back.

--
Luiz Augusto von Dentz