From fea2985b1493c85704b461f6381e31627b44c07f Mon Sep 17 00:00:00 2001 From: Mikel Astiz Date: Fri, 4 May 2012 14:39:35 +0200 Subject: [PATCH] obexd: Transfer API splits create and register The transfer-creating functions (obc_transfer_get and obc_transfer_put) no longer register the transfer automatically. This separation makes it possible that the modules would create the transfers and then pass the object to the session, which would be responsible for the registration. --- obexd/client/session.c | 33 +++++++++++++++------------------ obexd/client/transfer.c | 20 +++----------------- obexd/client/transfer.h | 13 +++++++------ 3 files changed, 25 insertions(+), 41 deletions(-) diff --git a/obexd/client/session.c b/obexd/client/session.c index 3a8807b88..e9993c8c0 100644 --- a/obexd/client/session.c +++ b/obexd/client/session.c @@ -751,8 +751,19 @@ static guint session_request(struct obc_session *session, void *data, GError **err) { struct pending_request *p; + const char *agent; int perr; + if (session->agent) + agent = obc_agent_get_name(session->agent); + else + agent = NULL; + + if (!obc_transfer_register(transfer, session->conn, agent, err)) { + obc_transfer_unregister(transfer); + return 0; + } + obc_transfer_set_callback(transfer, transfer_progress, session); p = pending_request_new(session, transfer, session_start_transfer, @@ -953,7 +964,6 @@ guint obc_session_get(struct obc_session *session, const char *type, { struct obc_transfer *transfer; struct obc_transfer_params *params = NULL; - const char *agent; if (session->obex == NULL) { g_set_error(err, OBEX_IO_ERROR, -ENOTCONN, @@ -968,13 +978,7 @@ guint obc_session_get(struct obc_session *session, const char *type, params->size = apparam_size; } - if (session->agent) - agent = obc_agent_get_name(session->agent); - else - agent = NULL; - - transfer = obc_transfer_get(session->conn, agent, targetfile, name, - type, params, err); + transfer = obc_transfer_get(targetfile, name, type, params, err); if (transfer == NULL) { if (params != NULL) { g_free(params->data); @@ -990,7 +994,6 @@ guint obc_session_send(struct obc_session *session, const char *filename, const char *name, GError **err) { struct obc_transfer *transfer; - const char *agent; if (session->obex == NULL) { g_set_error(err, OBEX_IO_ERROR, -ENOTCONN, @@ -998,10 +1001,7 @@ guint obc_session_send(struct obc_session *session, const char *filename, return 0; } - agent = obc_agent_get_name(session->agent); - - transfer = obc_transfer_put(session->conn, agent, filename, name, - NULL, NULL, 0, NULL, err); + transfer = obc_transfer_put(filename, name, NULL, NULL, 0, NULL, err); if (transfer == NULL) return 0; @@ -1051,7 +1051,6 @@ guint obc_session_put(struct obc_session *session, const char *contents, size_t size, const char *name, GError **err) { struct obc_transfer *transfer; - const char *agent; if (session->obex == NULL) { g_set_error(err, OBEX_IO_ERROR, -ENOTCONN, @@ -1059,10 +1058,8 @@ guint obc_session_put(struct obc_session *session, const char *contents, return 0; } - agent = obc_agent_get_name(session->agent); - - transfer = obc_transfer_put(session->conn, agent, NULL, name, NULL, - contents, size, NULL, err); + transfer = obc_transfer_put(NULL, name, NULL, contents, size, NULL, + err); if (transfer == NULL) return 0; diff --git a/obexd/client/transfer.c b/obexd/client/transfer.c index 21bd797a8..245ccffe7 100644 --- a/obexd/client/transfer.c +++ b/obexd/client/transfer.c @@ -259,7 +259,7 @@ static struct obc_transfer *obc_transfer_create(guint8 op, return transfer; } -static gboolean obc_transfer_register(struct obc_transfer *transfer, +gboolean obc_transfer_register(struct obc_transfer *transfer, DBusConnection *conn, const char *agent, GError **err) @@ -326,9 +326,7 @@ done: return TRUE; } -struct obc_transfer *obc_transfer_get(DBusConnection *conn, - const char *agent, - const char *filename, +struct obc_transfer *obc_transfer_get(const char *filename, const char *name, const char *type, struct obc_transfer_params *params, @@ -339,11 +337,6 @@ struct obc_transfer *obc_transfer_get(DBusConnection *conn, transfer = obc_transfer_create(G_OBEX_OP_GET, filename, name, type); - if (!obc_transfer_register(transfer, conn, agent, err)) { - obc_transfer_free(transfer); - return NULL; - } - perr = transfer_open(transfer, O_WRONLY | O_CREAT | O_TRUNC, 0600, err); if (perr < 0) { obc_transfer_free(transfer); @@ -355,9 +348,7 @@ struct obc_transfer *obc_transfer_get(DBusConnection *conn, return transfer; } -struct obc_transfer *obc_transfer_put(DBusConnection *conn, - const char *agent, - const char *filename, +struct obc_transfer *obc_transfer_put(const char *filename, const char *name, const char *type, const char *contents, @@ -371,11 +362,6 @@ struct obc_transfer *obc_transfer_put(DBusConnection *conn, transfer = obc_transfer_create(G_OBEX_OP_PUT, filename, name, type); - if (!obc_transfer_register(transfer, conn, agent, err)) { - obc_transfer_free(transfer); - return NULL; - } - if (contents != NULL) { ssize_t w; diff --git a/obexd/client/transfer.h b/obexd/client/transfer.h index 1b83d18fa..073b2797a 100644 --- a/obexd/client/transfer.h +++ b/obexd/client/transfer.h @@ -32,16 +32,12 @@ typedef void (*transfer_callback_t) (struct obc_transfer *transfer, gint64 transferred, GError *err, void *user_data); -struct obc_transfer *obc_transfer_get(DBusConnection *conn, - const char *agent, - const char *filename, +struct obc_transfer *obc_transfer_get(const char *filename, const char *name, const char *type, struct obc_transfer_params *params, GError **err); -struct obc_transfer *obc_transfer_put(DBusConnection *conn, - const char *agent, - const char *filename, +struct obc_transfer *obc_transfer_put(const char *filename, const char *name, const char *type, const char *contents, @@ -49,6 +45,11 @@ struct obc_transfer *obc_transfer_put(DBusConnection *conn, struct obc_transfer_params *params, GError **err); +gboolean obc_transfer_register(struct obc_transfer *transfer, + DBusConnection *conn, + const char *agent, + GError **err); + void obc_transfer_unregister(struct obc_transfer *transfer); gboolean obc_transfer_set_callback(struct obc_transfer *transfer, -- 2.47.3