diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2012-04-24 15:03:14 +0300 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2012-04-24 15:47:28 +0300 |
commit | 76284b5cd333072a1745ae9bdc497681c46b3db8 (patch) | |
tree | 0a472aa1841b9a2370d0ccbe201899df72be75ed /client/session.c | |
parent | 1e5c379e39c3fe41c2efd40161c4f6c909f8340b (diff) | |
download | obexd-76284b5cd333072a1745ae9bdc497681c46b3db8.tar.gz |
client: open file during transfer creation
This simplify the API a bit by not having to call obc_transfer_set_file
to open the file.
In addition to that split transfer creation/registration function so
GET/PUT can have more specific logic and different paramenters.
Diffstat (limited to 'client/session.c')
-rw-r--r-- | client/session.c | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/client/session.c b/client/session.c index 306e2ba..7515ff0 100644 --- a/client/session.c +++ b/client/session.c @@ -661,6 +661,7 @@ static void session_request_reply(DBusPendingCall *call, gpointer user_data) DBusMessage *reply = dbus_pending_call_steal_reply(call); const char *name; DBusError derr; + int err; dbus_error_init(&derr); if (dbus_set_error_from_message(&derr, reply)) { @@ -685,13 +686,26 @@ static void session_request_reply(DBusPendingCall *call, gpointer user_data) DBG("Agent.Request() reply: %s", name); - if (strlen(name)) { - if (obc_transfer_get_operation(transfer) == G_OBEX_OP_PUT) - obc_transfer_set_name(transfer, name); - else - obc_transfer_set_filename(transfer, name); + if (strlen(name) == 0) + goto done; + + if (obc_transfer_get_operation(transfer) == G_OBEX_OP_PUT) { + obc_transfer_set_name(transfer, name); + goto done; + } + + err = obc_transfer_set_filename(transfer, name); + if (err < 0) { + GError *gerr = NULL; + + g_set_error(&gerr, OBEX_IO_ERROR, err, + "Unable to set filename"); + session_terminate_transfer(session, transfer, gerr); + g_clear_error(&gerr); + return; } +done: if (p->auth_complete) p->auth_complete(session, transfer); @@ -956,8 +970,8 @@ int obc_session_get(struct obc_session *session, const char *type, else agent = NULL; - transfer = obc_transfer_register(session->conn, agent, G_OBEX_OP_GET, - targetfile, name, type, params); + transfer = obc_transfer_get(session->conn, agent, targetfile, name, + type, params); if (transfer == NULL) { if (params != NULL) { g_free(params->data); @@ -974,24 +988,17 @@ int obc_session_send(struct obc_session *session, const char *filename, { struct obc_transfer *transfer; const char *agent; - int err; if (session->obex == NULL) return -ENOTCONN; agent = obc_agent_get_name(session->agent); - transfer = obc_transfer_register(session->conn, agent, G_OBEX_OP_PUT, - filename, name, NULL, NULL); + transfer = obc_transfer_put(session->conn, agent, filename, name, + NULL, NULL, 0, NULL); if (transfer == NULL) return -EINVAL; - err = obc_transfer_set_file(transfer, NULL, 0); - if (err < 0) { - obc_transfer_unregister(transfer); - return err; - } - return session_request(session, transfer, NULL, NULL); } @@ -1038,24 +1045,17 @@ int obc_session_put(struct obc_session *session, const char *contents, { struct obc_transfer *transfer; const char *agent; - int err; if (session->obex == NULL) return -ENOTCONN; agent = obc_agent_get_name(session->agent); - transfer = obc_transfer_register(session->conn, agent, G_OBEX_OP_PUT, - NULL, name, NULL, NULL); + transfer = obc_transfer_put(session->conn, agent, NULL, name, NULL, + contents, size, NULL); if (transfer == NULL) return -EIO; - err = obc_transfer_set_file(transfer, contents, size); - if (err < 0) { - obc_transfer_unregister(transfer); - return err; - } - return session_request(session, transfer, NULL, NULL); } |