2018-01-12 06:23:40

by ERAMOTO Masaya

[permalink] [raw]
Subject: [PATCH BlueZ 1/2] obexd: Emit file information for client

When running obexctl and then starting to transfer a file, obexctl does
not retrieve the "Size" property. Thus it outputs the huge remaining time
as below:

[NEW] Transfer /org/bluez/obex/server/session1/transfer0
[CHG] Transfer /org/bluez/obex/server/session1/transfer0 Status: active
[CHG] Transfer /org/bluez/obex/server/session1/transfer0 Transferred: 32683 (@32KB/s 4286681714:4294967273)
[CHG] Transfer /org/bluez/obex/server/session1/transfer0 Transferred: 65444 (@32KB/s 428259:59)

This change makes obexd emit the file information including the "Size"
property, since obexctl may output the huge remaining time first if
obexctl calls g_dbus_proxy_refresh_property(). As the result, obexctl can
retrieve the "Size" property and the info command of obexctl can output
the filename of the transferring file.
---
obexd/src/manager.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/obexd/src/manager.c b/obexd/src/manager.c
index 78b138c85..6c83479f4 100644
--- a/obexd/src/manager.c
+++ b/obexd/src/manager.c
@@ -533,10 +533,15 @@ void manager_cleanup(void)

void manager_emit_transfer_started(struct obex_transfer *transfer)
{
+ const GDBusPropertyTable *property;
+
transfer->status = TRANSFER_STATUS_ACTIVE;

- g_dbus_emit_property_changed(connection, transfer->path,
- TRANSFER_INTERFACE, "Status");
+ for (property = transfer_properties;
+ property && property->name; property++)
+ g_dbus_emit_property_changed(connection, transfer->path,
+ TRANSFER_INTERFACE,
+ property->name);
}

static void emit_transfer_completed(struct obex_transfer *transfer,
--
2.14.1



2018-01-15 06:50:45

by ERAMOTO Masaya

[permalink] [raw]
Subject: Re: [PATCH BlueZ 1/2] obexd: Emit file information for client

Hi Luiz,

On 01/13/2018 02:37 AM, Luiz Augusto von Dentz wrote:
> Hi Eramoto,
>
> On Fri, Jan 12, 2018 at 4:23 AM, ERAMOTO Masaya
> <[email protected]> wrote:
>> When running obexctl and then starting to transfer a file, obexctl does
>> not retrieve the "Size" property. Thus it outputs the huge remaining time
>> as below:
>>
>> [NEW] Transfer /org/bluez/obex/server/session1/transfer0
>> [CHG] Transfer /org/bluez/obex/server/session1/transfer0 Status: active
>> [CHG] Transfer /org/bluez/obex/server/session1/transfer0 Transferred: 32683 (@32KB/s 4286681714:4294967273)
>> [CHG] Transfer /org/bluez/obex/server/session1/transfer0 Transferred: 65444 (@32KB/s 428259:59)
>>
>> This change makes obexd emit the file information including the "Size"
>> property, since obexctl may output the huge remaining time first if
>> obexctl calls g_dbus_proxy_refresh_property(). As the result, obexctl can
>> retrieve the "Size" property and the info command of obexctl can output
>> the filename of the transferring file.
>> ---
>> obexd/src/manager.c | 9 +++++++--
>> 1 file changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/obexd/src/manager.c b/obexd/src/manager.c
>> index 78b138c85..6c83479f4 100644
>> --- a/obexd/src/manager.c
>> +++ b/obexd/src/manager.c
>> @@ -533,10 +533,15 @@ void manager_cleanup(void)
>>
>> void manager_emit_transfer_started(struct obex_transfer *transfer)
>> {
>> + const GDBusPropertyTable *property;
>> +
>> transfer->status = TRANSFER_STATUS_ACTIVE;
>>
>> - g_dbus_emit_property_changed(connection, transfer->path,
>> - TRANSFER_INTERFACE, "Status");
>> + for (property = transfer_properties;
>> + property && property->name; property++)
>> + g_dbus_emit_property_changed(connection, transfer->path,
>> + TRANSFER_INTERFACE,
>> + property->name);
>> }
>
> Im not following why we need to emit every single property? Isn't that
> enough to send the Size only?

I want to make obexctl print out as much as possible of file information.

For example,
- If obexd sends the Size property only, the info command of obexctl
prints out the Session/Status/Size/Transferred properties and does
not print out the Name property etc..
- If obexctl retrieves the Name property at cmd_info(), the info
command does not first print out it as below:

# info /org/bluez/obex/server/session2/transfer1
Transfer /org/bluez/obex/server/session2/transfer1
Session: /org/bluez/obex/server/session2
Status: active
Size: 395755855
Transferred: 949991
[CHG] Transfer /org/bluez/obex/server/session2/transfer1 Transferred: 982752 (@32KB/s 200:50)
[CHG] Transfer /org/bluez/obex/server/session2/transfer1 Name: bluez.tar.gz

I will modify this commit message and resend this patch set.


Regards,
Eramoto


2018-01-12 17:37:00

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH BlueZ 1/2] obexd: Emit file information for client

Hi Eramoto,

On Fri, Jan 12, 2018 at 4:23 AM, ERAMOTO Masaya
<[email protected]> wrote:
> When running obexctl and then starting to transfer a file, obexctl does
> not retrieve the "Size" property. Thus it outputs the huge remaining time
> as below:
>
> [NEW] Transfer /org/bluez/obex/server/session1/transfer0
> [CHG] Transfer /org/bluez/obex/server/session1/transfer0 Status: active
> [CHG] Transfer /org/bluez/obex/server/session1/transfer0 Transferred: 32683 (@32KB/s 4286681714:4294967273)
> [CHG] Transfer /org/bluez/obex/server/session1/transfer0 Transferred: 65444 (@32KB/s 428259:59)
>
> This change makes obexd emit the file information including the "Size"
> property, since obexctl may output the huge remaining time first if
> obexctl calls g_dbus_proxy_refresh_property(). As the result, obexctl can
> retrieve the "Size" property and the info command of obexctl can output
> the filename of the transferring file.
> ---
> obexd/src/manager.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/obexd/src/manager.c b/obexd/src/manager.c
> index 78b138c85..6c83479f4 100644
> --- a/obexd/src/manager.c
> +++ b/obexd/src/manager.c
> @@ -533,10 +533,15 @@ void manager_cleanup(void)
>
> void manager_emit_transfer_started(struct obex_transfer *transfer)
> {
> + const GDBusPropertyTable *property;
> +
> transfer->status = TRANSFER_STATUS_ACTIVE;
>
> - g_dbus_emit_property_changed(connection, transfer->path,
> - TRANSFER_INTERFACE, "Status");
> + for (property = transfer_properties;
> + property && property->name; property++)
> + g_dbus_emit_property_changed(connection, transfer->path,
> + TRANSFER_INTERFACE,
> + property->name);
> }

Im not following why we need to emit every single property? Isn't that
enough to send the Size only?

Luiz Augusto von Dentz

2018-01-12 06:25:35

by ERAMOTO Masaya

[permalink] [raw]
Subject: [PATCH BlueZ 2/2] tools/obexctl: Fix display of size/bandwidth on completion

Outputs the wrong size and bandwidth on completion of transfer as below:

[CHG] Transfer /org/bluez/obex/server/session3/transfer2 Transferred: 5339965 (@32KB/s 00:01)
[CHG] Transfer /org/bluez/obex/server/session3/transfer2 Transferred: 5372726 (@32KB/s 00:00)
[CHG] Transfer /org/bluez/obex/server/session3/transfer2 Transferred: 0 (@18446744073704178KB/s 00:00)
[CHG] Transfer /org/bluez/obex/server/session3/transfer2 Status: complete
---
tools/obexctl.c | 8 ++++++++
1 file changed, 8 insertions(+)

diff --git a/tools/obexctl.c b/tools/obexctl.c
index 05bbd3e84..ca139f050 100644
--- a/tools/obexctl.c
+++ b/tools/obexctl.c
@@ -1862,6 +1862,14 @@ static void print_transferred(struct transfer_data *data, const char *str,
int seconds, minutes;

dbus_message_iter_get_basic(iter, &valu64);
+
+ /*
+ * Use the file size to output the proper size/speed since obexd emits
+ * zero as the current transferred size on completion of transfer.
+ */
+ if (valu64 == 0)
+ valu64 = data->size;
+
speed = valu64 - data->transferred;
data->transferred = valu64;

--
2.14.1