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:

Reply via email to