Am Samstag 02 Dezember 2006 13:08 schrieb Hendrik Sattler:
> the problem actually is a misbehaviour in libopenobex.
> It send the STREAMAVAIL too early, thus the file handle is not open, yet.
> This is triggered by the K700i sending the first (END-OF-)BODY Header in
> the first push packet (Siemens phones send it in the second packet and
> obexpushd was developed with those as clients).
> SE K700i is not to blame, here. It sends the name header before the body
> header.
>
> The correct solution will be to fix libopenobex.
>
> However, attached is a small patch that fixes it in obexpushd.
Sorry, patch was slightly broken. Here's a fixed one.
I actually tested it with a K700i (both small and big files).
HS
Index: obexpushd-0.4+svn10/src/obexpushd.c
===
--- obexpushd-0.4+svn10.orig/src/obexpushd.c 2006-12-02 12:59:14.465903016 +0100
+++ obexpushd-0.4+svn10/src/obexpushd.c 2006-12-02 14:19:35.091173266 +0100
@@ -396,6 +396,12 @@
if (!buf)
return -EINVAL;
+ if (!data->out) {
+ err = put_open(handle);
+ if (err)
+ return err;
+ }
+
(void)fwrite(buf,(size_t)len,1,data->out);
err = ferror(data->out);
if (err)
@@ -547,13 +553,15 @@
data->count += 1;
data->length = 0;
data->time = 0;
+ data->out = NULL;
break;
case OBEX_EV_REQCHECK:
- if (put_open(handle) < 0)
- (void)OBEX_ObjectSetRsp(obj,
- OBEX_RSP_FORBIDDEN,
- OBEX_RSP_FORBIDDEN);
+ if (!data->out)
+ if (put_open(handle) < 0)
+(void)OBEX_ObjectSetRsp(obj,
+ OBEX_RSP_FORBIDDEN,
+ OBEX_RSP_FORBIDDEN);
break;
case OBEX_EV_STREAMAVAIL: