gobex: Refactor get response parsing in transfer code
diff --git a/gobex/gobex-transfer.c b/gobex/gobex-transfer.c
index 62c57ee..8434366 100644
--- a/gobex/gobex-transfer.c
+++ b/gobex/gobex-transfer.c
@@ -111,6 +111,29 @@
 	return ret;
 }
 
+static gboolean handle_get_body(struct transfer *transfer, GObexPacket *rsp,
+								GError **err)
+{
+	GObexHeader *body = g_obex_packet_get_body(rsp);
+	gboolean ret;
+	const guint8 *buf;
+	gsize len;
+
+	if (body == NULL)
+		return TRUE;
+
+	g_obex_header_get_bytes(body, &buf, &len);
+	if (len == 0)
+		return TRUE;
+
+	ret = transfer->data_consumer(buf, len, transfer->user_data);
+	if (ret == FALSE)
+		g_set_error(err, G_OBEX_ERROR, G_OBEX_ERROR_CANCELLED,
+				"Data consumer callback failed");
+
+	return ret;
+}
+
 static void transfer_response(GObex *obex, GError *err, GObexPacket *rsp,
 							gpointer user_data)
 {
@@ -127,28 +150,18 @@
 
 	rspcode = g_obex_packet_get_operation(rsp, &final);
 	if (rspcode != G_OBEX_RSP_SUCCESS && rspcode != G_OBEX_RSP_CONTINUE) {
-		GError *rsp_err;
-		rsp_err = g_error_new(G_OBEX_ERROR, G_OBEX_ERROR_FAILED,
+		err = g_error_new(G_OBEX_ERROR, G_OBEX_ERROR_FAILED,
 					"Transfer failed (0x%02x)", rspcode);
-		transfer_complete(transfer, rsp_err);
-		g_error_free(rsp_err);
-		return;
+		goto failed;
 	}
 
 	if (transfer->opcode == G_OBEX_OP_GET) {
-		GObexHeader *body = g_obex_packet_get_body(rsp);
-		if (body != NULL) {
-			const guint8 *buf;
-			gsize len;
-
-			g_obex_header_get_bytes(body, &buf, &len);
-
-			if (len > 0)
-				transfer->data_consumer(buf, len,
-							transfer->user_data);
-		}
+		handle_get_body(transfer, rsp, &err);
+		if (err != NULL)
+			goto failed;
 	}
 
+
 	if (rspcode == G_OBEX_RSP_SUCCESS) {
 		transfer_complete(transfer, NULL);
 		return;
@@ -161,8 +174,11 @@
 
 	transfer->req_id = g_obex_send_req(obex, req, -1, transfer_response,
 							transfer, &err);
-	if (err != NULL)
+failed:
+	if (err != NULL) {
 		transfer_complete(transfer, err);
+		g_error_free(err);
+	}
 }
 
 static struct transfer *transfer_new(GObex *obex, guint8 opcode,