2016-07-28 14:06:47

by Fabien PRORIOL

[permalink] [raw]
Subject: [PATCH BlueZ] Fix obex protocol for powerpc

From: Fabien Proriol <[email protected]>

omtu and imtu is define as uint16_t in l2cap_get function (use with va_arg).
But in connect_event, in file bluetooth.c, variables are define as int (32bit in powerpc).
When we use a platform with big endian, the result is omtu and imtu pass to obex_server_new_connection is bigger than needed.
And file transfert will be lock until timeout (for file with size > 630 bytes)

Fabien Proriol (1):
Fix obex protocol for powerpc

obexd/client/bluetooth.c | 4 ++--
obexd/plugins/bluetooth.c | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)

--
2.7.3


2016-07-29 11:02:08

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH BlueZ] Fix obex protocol for powerpc

Hi Fabien,

On Thu, Jul 28, 2016 at 5:06 PM, <[email protected]> wrote:
> From: Fabien Proriol <[email protected]>
>
> omtu and imtu is define as uint16_t in l2cap_get function (use with va_arg).
> ---
> obexd/client/bluetooth.c | 4 ++--
> obexd/plugins/bluetooth.c | 4 ++--
> 2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/obexd/client/bluetooth.c b/obexd/client/bluetooth.c
> index be007de..e35124a 100644
> --- a/obexd/client/bluetooth.c
> +++ b/obexd/client/bluetooth.c
> @@ -443,8 +443,8 @@ static int bluetooth_getpacketopt(GIOChannel *io, int *tx_mtu, int *rx_mtu)
> {
> int sk = g_io_channel_unix_get_fd(io);
> int type;
> - int omtu = -1;
> - int imtu = -1;
> + uint16_t omtu = BT_TX_MTU;
> + uint16_t imtu = BT_RX_MTU;
> socklen_t len = sizeof(int);
>
> DBG("");
> diff --git a/obexd/plugins/bluetooth.c b/obexd/plugins/bluetooth.c
> index d8b872a..3ee5432 100644
> --- a/obexd/plugins/bluetooth.c
> +++ b/obexd/plugins/bluetooth.c
> @@ -75,8 +75,8 @@ static void connect_event(GIOChannel *io, GError *err, void *user_data)
> struct bluetooth_profile *profile = user_data;
> struct obex_server *server = profile->server;
> int type;
> - int omtu = BT_TX_MTU;
> - int imtu = BT_RX_MTU;
> + uint16_t omtu = BT_TX_MTU;
> + uint16_t imtu = BT_RX_MTU;
> gboolean stream = TRUE;
> socklen_t len = sizeof(int);
>
> --
> 2.7.3

Applied, thanks.

--
Luiz Augusto von Dentz

2016-07-28 14:06:48

by Fabien PRORIOL

[permalink] [raw]
Subject: [PATCH BlueZ] Fix obex protocol for powerpc

From: Fabien Proriol <[email protected]>

omtu and imtu is define as uint16_t in l2cap_get function (use with va_arg).
---
obexd/client/bluetooth.c | 4 ++--
obexd/plugins/bluetooth.c | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/obexd/client/bluetooth.c b/obexd/client/bluetooth.c
index be007de..e35124a 100644
--- a/obexd/client/bluetooth.c
+++ b/obexd/client/bluetooth.c
@@ -443,8 +443,8 @@ static int bluetooth_getpacketopt(GIOChannel *io, int *tx_mtu, int *rx_mtu)
{
int sk = g_io_channel_unix_get_fd(io);
int type;
- int omtu = -1;
- int imtu = -1;
+ uint16_t omtu = BT_TX_MTU;
+ uint16_t imtu = BT_RX_MTU;
socklen_t len = sizeof(int);

DBG("");
diff --git a/obexd/plugins/bluetooth.c b/obexd/plugins/bluetooth.c
index d8b872a..3ee5432 100644
--- a/obexd/plugins/bluetooth.c
+++ b/obexd/plugins/bluetooth.c
@@ -75,8 +75,8 @@ static void connect_event(GIOChannel *io, GError *err, void *user_data)
struct bluetooth_profile *profile = user_data;
struct obex_server *server = profile->server;
int type;
- int omtu = BT_TX_MTU;
- int imtu = BT_RX_MTU;
+ uint16_t omtu = BT_TX_MTU;
+ uint16_t imtu = BT_RX_MTU;
gboolean stream = TRUE;
socklen_t len = sizeof(int);

--
2.7.3

2016-07-28 14:00:43

by Fabien PRORIOL

[permalink] [raw]
Subject: Re: [PATCH BlueZ] Fix obex protocol for powerpc

opps, sorry, I sent this new patch a lot too quickly...

uint16_t is unsigned, and can't accept -1...
I need to rework on it

Fabien Proriol


On 28/07/2016 15:12, [email protected] wrote:
> From: Fabien Proriol <[email protected]>
>
> omtu and imtu is define as uint16_t in l2cap_get function (use with va_arg).
> ---
> obexd/client/bluetooth.c | 4 ++--
> obexd/plugins/bluetooth.c | 4 ++--
> 2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/obexd/client/bluetooth.c b/obexd/client/bluetooth.c
> index be007de..3cc1f90 100644
> --- a/obexd/client/bluetooth.c
> +++ b/obexd/client/bluetooth.c
> @@ -443,8 +443,8 @@ static int bluetooth_getpacketopt(GIOChannel *io, int *tx_mtu, int *rx_mtu)
> {
> int sk = g_io_channel_unix_get_fd(io);
> int type;
> - int omtu = -1;
> - int imtu = -1;
> + uint16_t omtu = -1;
> + uint16_t imtu = -1;
> socklen_t len = sizeof(int);
>
> DBG("");
> diff --git a/obexd/plugins/bluetooth.c b/obexd/plugins/bluetooth.c
> index d8b872a..3ee5432 100644
> --- a/obexd/plugins/bluetooth.c
> +++ b/obexd/plugins/bluetooth.c
> @@ -75,8 +75,8 @@ static void connect_event(GIOChannel *io, GError *err, void *user_data)
> struct bluetooth_profile *profile = user_data;
> struct obex_server *server = profile->server;
> int type;
> - int omtu = BT_TX_MTU;
> - int imtu = BT_RX_MTU;
> + uint16_t omtu = BT_TX_MTU;
> + uint16_t imtu = BT_RX_MTU;
> gboolean stream = TRUE;
> socklen_t len = sizeof(int);
>