summaryrefslogtreecommitdiff
path: root/client/session.c
diff options
context:
space:
mode:
authorMikel Astiz <mikel.astiz@bmw-carit.de>2012-04-24 15:03:12 +0300
committerJohan Hedberg <johan.hedberg@intel.com>2012-04-24 15:46:47 +0300
commitcd3e10ee903a0e4556976a99a91cc56e99f63cc7 (patch)
tree1c1e7edfea7449bc2f162a584da1a2ef6cdc5711 /client/session.c
parent654efe479e93ca534cbf6a9bc7f84a44b1aa3dc3 (diff)
downloadobexd-cd3e10ee903a0e4556976a99a91cc56e99f63cc7.tar.gz
client: transfer api merges put and get
A new enum type is used to distinguish put and get transfers. This is more convenient since it is done when registering the transfer, and not when it is actually started. The main benefits would be: - Some actions can be taken during creation, such as opening files. - session.c gets simplified. - The size of a put transfer can be exposed in D-Bus, while queued. - The transfer operation (put or get) can be exposed in D-Bus. None of these D-Bus changes are included in this patch.
Diffstat (limited to 'client/session.c')
-rw-r--r--client/session.c67
1 files changed, 21 insertions, 46 deletions
diff --git a/client/session.c b/client/session.c
index fe47f9d..ab20b88 100644
--- a/client/session.c
+++ b/client/session.c
@@ -100,7 +100,7 @@ struct obc_session {
static GSList *sessions = NULL;
-static void session_prepare_put(gpointer data, gpointer user_data);
+static void session_start_transfer(gpointer data, gpointer user_data);
static void session_terminate_transfer(struct obc_session *session,
struct obc_transfer *transfer,
GError *gerr);
@@ -686,7 +686,7 @@ static void session_request_reply(DBusPendingCall *call, gpointer user_data)
DBG("Agent.Request() reply: %s", name);
if (strlen(name)) {
- if (p->auth_complete == session_prepare_put)
+ if (obc_transfer_get_operation(transfer) == G_OBEX_OP_PUT)
obc_transfer_set_name(transfer, name);
else
obc_transfer_set_filename(transfer, name);
@@ -731,7 +731,6 @@ static int pending_request_auth(struct pending_request *p)
static int session_request(struct obc_session *session,
struct obc_transfer *transfer,
- GFunc auth_complete,
session_callback_t func,
void *data)
{
@@ -740,7 +739,8 @@ static int session_request(struct obc_session *session,
obc_transfer_set_callback(transfer, transfer_progress, session);
- p = pending_request_new(session, transfer, auth_complete, func, data);
+ p = pending_request_new(session, transfer, session_start_transfer,
+ func, data);
if (session->p) {
g_queue_push_tail(session->queue, p);
@@ -917,19 +917,15 @@ fail:
session_notify_error(session, transfer, err);
}
-static void session_prepare_get(gpointer data, gpointer user_data)
+static void session_start_transfer(gpointer data, gpointer user_data)
{
struct obc_session *session = data;
struct obc_transfer *transfer = user_data;
- int ret;
+ GError *err = NULL;
- ret = obc_transfer_get(transfer);
- if (ret < 0) {
- GError *gerr = NULL;
-
- g_set_error(&gerr, OBEX_IO_ERROR, ret, "%s", strerror(-ret));
- session_notify_error(session, transfer, gerr);
- g_clear_error(&gerr);
+ if (!obc_transfer_start(transfer, &err)) {
+ session_notify_error(session, transfer, err);
+ g_clear_error(&err);
return;
}
@@ -961,8 +957,9 @@ int obc_session_get(struct obc_session *session, const char *type,
agent = NULL;
transfer = obc_transfer_register(session->conn, session->obex,
- agent, targetfile,
- name, type, params);
+ agent, G_OBEX_OP_GET,
+ targetfile, name,
+ type, params);
if (transfer == NULL) {
if (params != NULL) {
g_free(params->data);
@@ -971,8 +968,7 @@ int obc_session_get(struct obc_session *session, const char *type,
return -EIO;
}
- return session_request(session, transfer, session_prepare_get,
- func, user_data);
+ return session_request(session, transfer, func, user_data);
}
int obc_session_send(struct obc_session *session, const char *filename,
@@ -988,8 +984,9 @@ int obc_session_send(struct obc_session *session, const char *filename,
agent = obc_agent_get_name(session->agent);
transfer = obc_transfer_register(session->conn, session->obex,
- agent, filename,
- name, NULL, NULL);
+ agent, G_OBEX_OP_PUT,
+ filename, name,
+ NULL, NULL);
if (transfer == NULL)
return -EINVAL;
@@ -999,8 +996,7 @@ int obc_session_send(struct obc_session *session, const char *filename,
return err;
}
- return session_request(session, transfer, session_prepare_put,
- NULL, NULL);
+ return session_request(session, transfer, NULL, NULL);
}
int obc_session_pull(struct obc_session *session,
@@ -1041,26 +1037,6 @@ fail:
return NULL;
}
-static void session_prepare_put(gpointer data, gpointer user_data)
-{
- struct obc_session *session = data;
- struct obc_transfer *transfer = user_data;
- int ret;
-
- ret = obc_transfer_put(transfer);
- if (ret < 0) {
- GError *gerr = NULL;
-
- g_set_error(&gerr, OBEX_IO_ERROR, ret, "%s (%d)",
- strerror(-ret), -ret);
- session_notify_error(session, transfer, gerr);
- g_clear_error(&gerr);
- return;
- }
-
- DBG("Transfer(%p) started", transfer);
-}
-
int obc_session_put(struct obc_session *session, const char *contents,
size_t size, const char *name)
{
@@ -1074,9 +1050,9 @@ int obc_session_put(struct obc_session *session, const char *contents,
agent = obc_agent_get_name(session->agent);
transfer = obc_transfer_register(session->conn, session->obex,
- agent, NULL,
- name, NULL,
- NULL);
+ agent, G_OBEX_OP_PUT,
+ NULL, name,
+ NULL, NULL);
if (transfer == NULL)
return -EIO;
@@ -1086,8 +1062,7 @@ int obc_session_put(struct obc_session *session, const char *contents,
return err;
}
- return session_request(session, transfer, session_prepare_put,
- NULL, NULL);
+ return session_request(session, transfer, NULL, NULL);
}
static void agent_destroy(gpointer data, gpointer user_data)