summaryrefslogtreecommitdiff
path: root/gobex/gobex-transfer.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2011-07-08 11:48:59 +0200
committerJohan Hedberg <johan.hedberg@intel.com>2011-07-16 17:50:51 +0300
commitf40a85d69fb66737b05410d57d0d188a5b5f473f (patch)
tree8111b090298adeaecb2950058394c04d0eba0510 /gobex/gobex-transfer.c
parenta22403d039b95e6ec64f166cd3e87340a2aa45b6 (diff)
downloadobexd-f40a85d69fb66737b05410d57d0d188a5b5f473f.tar.gz
gobex: Fix g_obex_get_rsp end of transfer handling
Diffstat (limited to 'gobex/gobex-transfer.c')
-rw-r--r--gobex/gobex-transfer.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gobex/gobex-transfer.c b/gobex/gobex-transfer.c
index 6fe0e6b..b215d29 100644
--- a/gobex/gobex-transfer.c
+++ b/gobex/gobex-transfer.c
@@ -344,8 +344,13 @@ static gssize get_get_data(void *buf, gsize len, gpointer user_data)
gssize ret;
ret = transfer->data_producer(buf, len, transfer->user_data);
- if (ret >= 0)
+ if (ret > 0)
+ return ret;
+
+ if (ret == 0) {
+ transfer_complete(transfer, NULL);
return ret;
+ }
req = g_obex_packet_new(G_OBEX_RSP_INTERNAL_SERVER_ERROR, TRUE, NULL);
g_obex_send(transfer->obex, req, NULL);
@@ -365,7 +370,7 @@ static void transfer_get_req(GObex *obex, GObexPacket *req, gpointer user_data)
GObexPacket *rsp;
rsp = g_obex_packet_new(G_OBEX_RSP_CONTINUE, TRUE, NULL);
- g_obex_packet_add_body(req, get_get_data, transfer);
+ g_obex_packet_add_body(rsp, get_get_data, transfer);
if (!g_obex_send(obex, rsp, &err)) {
transfer_complete(transfer, err);
@@ -383,7 +388,7 @@ guint g_obex_get_rsp(GObex *obex, GObexPacket *req,
transfer = transfer_new(obex, G_OBEX_OP_GET, complete_func, user_data);
transfer->data_producer = data_func;
- transfer_put_req(obex, req, transfer);
+ transfer_get_req(obex, req, transfer);
if (!g_slist_find(transfers, transfer))
return 0;