Re: obexd 0.14 "put" file corruption

Ed Tsang
2010-03-05T18:07:39Z

I think I found the problem. It is when the MTU is 4096, the send size is set to
3896 (200 for the overhead). So the last 200 did not get send
and it remember as "pre-fill" for the next transfer. The code did try to move the data but incorrectly.

clinet/session.c put_xfer_progress()
----- origional
memmove(session->buffer + written, session->buffer, session->filled);
/* try to move from the remaining from the bottom of the buffer to the beginning of buffer
but memove is (*dest, * src, len) not as normally most people, including me, will guess (*src, *dest, len)
-------- should be
memmove(session->buffer, session->buffer + written, session->filled);

with the change, it seem working now?

Ed

----- Original Message ----
From: Bastien Nocera <hadess@hadess.net>
To: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Cc: Ed Tsang <netdesign_98@yahoo.com>; Bluettooth Linux <linux-bluetooth@vger.kernel.org>
Sent: Fri, March 5, 2010 11:31:14 AM
Subject: Re: obexd 0.14 "put" file corruption

On Fri, 2010-02-26 at 10:41 +0200, Luiz Augusto von Dentz wrote:
> Hi,
>
> On Thu, Feb 25, 2010 at 12:23 AM, Ed Tsang <netdesign_98@yahoo.com> wrote:
> >
> >
> >>I am using obexd 0.14 to push files into phone. The image file received by some phone seem a bit strange and in some phone it could not be >display at all. So I tried a simple text file with line number as text. Then I saw the file received from the phone is corrupted. Looking into the >hcidump look like the second "Put cmd" and forward, the first "0xc8" bytes was not copied (stay the same as the firs put cmd).
> >> Anyone know if this is a known problem in 0.14 or fixed in the latest (obexd 0.20).
> > Installed the obexd o.20. Same problem???
> > -------------------------- first put
> > RFCOMM(d): UIH: cr 1 dlci 12 pf 0 ilen 303 fcs 0x4f
> > OBEX: Put cmd(c): len 3922
> > Name (0x01) = Unicode length 12
> > 0000: 00 74 00 2e 00 74 00 78 00 74 00 00 .t...t.x.t..
> > Length (0xc3) = 8208
> > Body (0x48) = Sequence length 3896
> > 0000: 30 30 20 66 69 72 73 74 20 6c 69 6e 65 20 20 0a 00 first line .
> > 0010: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 1 .
> >
> > ...................... second put (after 0xc8 is fine)
> > RFCOMM(d): UIH: cr 1 dlci 12 pf 0 ilen 283 fcs 0x4f
> > OBEX: Put cmd(c): len 3902 (continue)
> > Body (0x48) = Sequence length 3896
> > 0000: 30 30 20 66 69 72 73 74 20 6c 69 6e 65 20 20 0a 00 first line .
> > 0010: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 1 .
> > 0020: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 2 .
> > 0030: 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 3 .
> > 0040: 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 4 .
> > 0050: 35 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 5 .
> > 0060: 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 6 .
> > 0070: 37 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 7 .
> > 0080: 38 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 8 .
> > 0090: 39 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 9 .
> > 00a0: 41 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a A .
> > 00b0: 42 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a B .
> > 00c0: 43 20 20 20 20 20 20 20 31 30 30 20 73 65 63 6f C 100 seco
> > 00d0: 6e 64 20 70 61 67 65 0a 31 20 20 20 20 20 20 20 nd page.1
> > 00e0: 20 20 20 20 20 20 32 0a 32 20 20 20 20 20 20 20 2.2
> >
> > Anyone bump into this?? look like the start of copying problem...
>
> Weird, are you sure the client is sending this properly? Anyway we do
> store the data in a buffer even if was sent together with put cmd, Im
> very suspicious that this is not the problem since we would have
> notice this before. Btw obexd does not push/send files obex-client
> does, are you talking about obex-client?

This has been reported to me as well, with obexd 0.19:
https://bugzilla.redhat.com/show_bug.cgi?id=550538

Ideas on how to debug this?

Cheers

__________________________________________________________________
The new Internet Explorer® 8 - Faster, safer, easier. Optimized for Yahoo! Get it Now for Free! at http://downloads.yahoo.com/ca/internetexplorer/