summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSlawomir Bochenski <lkslawek@gmail.com>2011-10-05 16:32:40 +0200
committerJohan Hedberg <johan.hedberg@intel.com>2011-10-06 11:08:19 +0300
commitec5f658203639d45ab337e69df756ae998ec6950 (patch)
treee4b54e200eba4e34c7ba9ab752fb63f8d02c4071 /src
parentd03d83edcf7ecf081c0310cb50e74363bf55fb9d (diff)
downloadobexd-ec5f658203639d45ab337e69df756ae998ec6950.tar.gz
Simplify code for calling mime driver flush()
OBEX_EV_REQ is the last thing that we are going to receive on PUT and this is always going to be delivered. As the service driver will start receiving data at or before its .put(), we can simply call flush() after that. This also makes flush() usable in PUTs without length header.
Diffstat (limited to 'src')
-rw-r--r--src/obex.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/src/obex.c b/src/obex.c
index 152e10a..59bbe7a 100644
--- a/src/obex.c
+++ b/src/obex.c
@@ -625,11 +625,6 @@ write:
os->pending -= w;
}
- /* Flush on EOS */
- if (os->size != OBJECT_SIZE_UNKNOWN && os->size == os->offset &&
- os->driver->flush)
- return os->driver->flush(os->object) > 0 ? -EAGAIN : 0;
-
return 0;
}
@@ -1131,19 +1126,16 @@ static void cmd_put(struct obex_session *os, obex_t *obex, obex_object_t *obj)
return;
}
- /* Check if there is a body and it is not empty (size > 0), otherwise
- openobex won't notify us with OBEX_EV_STREAMAVAIL and it gonna reply
- right away */
- if (os->size != 0)
- return;
-
- /* Flush immediatly since there is nothing to write so the driver
- has a chance to do something before we reply */
- if (os->object && os->driver && os->driver->flush &&
- os->driver->flush(os->object) > 0) {
- OBEX_SuspendRequest(obex, obj);
- os->obj = obj;
- os->driver->set_io_watch(os->object, handle_async_io, os);
+ if (os->object && os->driver && os->driver->flush) {
+ err = os->driver->flush(os->object);
+ if (err == -EAGAIN) {
+ OBEX_SuspendRequest(obex, obj);
+ os->obj = obj;
+ os->driver->set_io_watch(os->object,
+ handle_async_io, os);
+ } else if (err < 0) {
+ os_set_response(obj, err);
+ }
}
}