GObexPacket *req, *rsp;
GError *err = NULL;
gssize ret;
+ guint8 op;
g_obex_debug(G_OBEX_DEBUG_TRANSFER, "transfer %u", transfer->id);
return ret;
}
- req = g_obex_packet_new(G_OBEX_RSP_INTERNAL_SERVER_ERROR, TRUE,
- G_OBEX_HDR_INVALID);
+ op = g_obex_errno_to_rsp(ret);
+
+ req = g_obex_packet_new(op, TRUE, G_OBEX_HDR_INVALID);
g_obex_send(transfer->obex, req, NULL);
err = g_error_new(G_OBEX_ERROR, G_OBEX_ERROR_CANCELLED,
user_data, err);
}
-gboolean g_obex_cancel_transfer(guint id)
+gboolean g_obex_cancel_transfer(guint id, GObexFunc complete_func,
+ gpointer user_data)
{
struct transfer *transfer = NULL;
+ gboolean ret = TRUE;
g_obex_debug(G_OBEX_DEBUG_TRANSFER, "transfer %u", id);
if (transfer == NULL)
return FALSE;
+ if (complete_func == NULL)
+ goto done;
+
+ transfer->complete_func = complete_func;
+ transfer->user_data = user_data;
+
+ ret = g_obex_pending_req_abort(transfer->obex, NULL);
+ if (ret)
+ return TRUE;
+
+done:
transfer_free(transfer);
- return TRUE;
+ return ret;
}