diff --git a/obexd/client/session.c b/obexd/client/session.c
index 7f387d4..30b8431 100644
--- a/obexd/client/session.c
+++ b/obexd/client/session.c
static void session_terminate_transfer(struct obc_session *session,
struct obc_transfer *transfer,
GError *gerr);
+static void transfer_progress(struct obc_transfer *transfer,
+ gint64 transferred, GError *err,
+ void *user_data);
GQuark obex_io_error_quark(void)
{
struct pending_request *p;
int err;
+ obc_transfer_set_callback(transfer, transfer_progress, session);
+
p = pending_request_new(session, transfer, auth_complete, func, data);
if (session->p) {
struct obc_transfer *transfer = user_data;
int ret;
- ret = obc_transfer_get(transfer, transfer_progress, session);
+ ret = obc_transfer_get(transfer);
if (ret < 0) {
GError *gerr = NULL;
struct obc_transfer *transfer = user_data;
int ret;
- ret = obc_transfer_put(transfer, transfer_progress, session);
+ ret = obc_transfer_put(transfer);
if (ret < 0) {
GError *gerr = NULL;
diff --git a/obexd/client/transfer.c b/obexd/client/transfer.c
index 4054799..b470a3a 100644
--- a/obexd/client/transfer.c
+++ b/obexd/client/transfer.c
return size;
}
-static void obc_transfer_set_callback(struct obc_transfer *transfer,
+gboolean obc_transfer_set_callback(struct obc_transfer *transfer,
transfer_callback_t func,
void *user_data)
{
struct transfer_callback *callback;
- g_free(transfer->callback);
+ if (transfer->callback != NULL)
+ return FALSE;
callback = g_new0(struct transfer_callback, 1);
callback->func = func;
callback->data = user_data;
transfer->callback = callback;
+
+ return TRUE;
}
-int obc_transfer_get(struct obc_transfer *transfer, transfer_callback_t func,
- void *user_data)
+int obc_transfer_get(struct obc_transfer *transfer)
{
GError *err = NULL;
GObexPacket *req;
if (transfer->xfer == 0)
return -ENOTCONN;
- if (func)
- obc_transfer_set_callback(transfer, func, user_data);
-
return 0;
}
-int obc_transfer_put(struct obc_transfer *transfer, transfer_callback_t func,
- void *user_data)
+int obc_transfer_put(struct obc_transfer *transfer)
{
GError *err = NULL;
GObexPacket *req;
if (transfer->xfer == 0)
return -ENOTCONN;
- if (func)
- obc_transfer_set_callback(transfer, func, user_data);
-
return 0;
}
diff --git a/obexd/client/transfer.h b/obexd/client/transfer.h
index e5387fc..e7e1000 100644
--- a/obexd/client/transfer.h
+++ b/obexd/client/transfer.h
void obc_transfer_unregister(struct obc_transfer *transfer);
-int obc_transfer_get(struct obc_transfer *transfer, transfer_callback_t func,
- void *user_data);
-int obc_transfer_put(struct obc_transfer *transfer, transfer_callback_t func,
- void *user_data);
+gboolean obc_transfer_set_callback(struct obc_transfer *transfer,
+ transfer_callback_t func,
+ void *user_data);
+
+int obc_transfer_get(struct obc_transfer *transfer);
+int obc_transfer_put(struct obc_transfer *transfer);
int obc_transfer_get_params(struct obc_transfer *transfer,
struct obc_transfer_params *params);