Hi,
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.
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 13:02:08.696791766 +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_RSP5A_FORBIDDEN);
break;
case OBEX_EV_STREAMAVAIL: