diff --git a/obexd/client/ftp.c b/obexd/client/ftp.c
index 86c2a3c..6fa4e85 100644
--- a/obexd/client/ftp.c
+++ b/obexd/client/ftp.c
{
struct ftp_data *ftp = user_data;
struct obc_session *session = ftp->session;
+ struct obc_transfer *transfer;
GError *err = NULL;
+ DBusMessage *reply;
- obc_session_get(session, "x-obex/folder-listing", NULL, NULL,
- NULL, 0, list_folder_callback, message, &err);
- if (err != NULL) {
- DBusMessage *reply = g_dbus_create_error(message,
- "org.openobex.Error.Failed",
- "%s", err->message);
- g_error_free(err);
- return reply;
- }
+ transfer = obc_transfer_get("x-obex/folder-listing", NULL, NULL,
+ NULL, 0, &err);
+ if (transfer == NULL)
+ goto fail;
- dbus_message_ref(message);
+ if (obc_session_queue(session, transfer, list_folder_callback,
+ message, &err)) {
+ dbus_message_ref(message);
+ return NULL;
+ }
- return NULL;
+fail:
+ reply = g_dbus_create_error(message, "org.openobex.Error.Failed", "%s",
+ err->message);
+ g_error_free(err);
+ return reply;
}
static DBusMessage *get_file(DBusConnection *connection,
{
struct ftp_data *ftp = user_data;
struct obc_session *session = ftp->session;
+ struct obc_transfer *transfer;
const char *target_file, *source_file;
GError *err = NULL;
+ DBusMessage *reply;
if (dbus_message_get_args(message, NULL,
DBUS_TYPE_STRING, &target_file,
return g_dbus_create_error(message,
"org.openobex.Error.InvalidArguments", NULL);
- obc_session_get(session, NULL, source_file, target_file, NULL, 0,
- get_file_callback, message, &err);
- if (err != NULL) {
- DBusMessage *reply = g_dbus_create_error(message,
- "org.openobex.Error.Failed",
- "%s", err->message);
- g_error_free(err);
- return reply;
- }
+ transfer = obc_transfer_get(NULL, source_file, target_file, NULL, 0,
+ &err);
+ if (transfer == NULL)
+ goto fail;
- dbus_message_ref(message);
+ if (obc_session_queue(session, transfer, get_file_callback, message,
+ &err)) {
+ dbus_message_ref(message);
+ return NULL;
+ }
- return NULL;
+fail:
+ reply = g_dbus_create_error(message, "org.openobex.Error.Failed", "%s",
+ err->message);
+ g_error_free(err);
+ return reply;
}
static DBusMessage *put_file(DBusConnection *connection,
{
struct ftp_data *ftp = user_data;
struct obc_session *session = ftp->session;
+ struct obc_transfer *transfer;
gchar *sourcefile, *targetfile;
GError *err = NULL;
+ DBusMessage *reply;
if (dbus_message_get_args(message, NULL,
DBUS_TYPE_STRING, &sourcefile,
"org.openobex.Error.InvalidArguments",
"Invalid arguments in method call");
- obc_session_send(session, sourcefile, targetfile, &err);
- if (err != NULL) {
- DBusMessage *reply = g_dbus_create_error(message,
- "org.openobex.Error.Failed",
- "%s", err->message);
- g_error_free(err);
- return reply;
- }
+ transfer = obc_transfer_put(NULL, targetfile, sourcefile, NULL, 0,
+ NULL, 0, &err);
+ if (transfer == NULL)
+ goto fail;
+
+ if (obc_session_queue(session, transfer, NULL, NULL, &err))
+ return dbus_message_new_method_return(message);
- return dbus_message_new_method_return(message);
+fail:
+ reply = g_dbus_create_error(message, "org.openobex.Error.Failed", "%s",
+ err->message);
+ g_error_free(err);
+ return reply;
}
static DBusMessage *copy_file(DBusConnection *connection,
diff --git a/obexd/client/manager.c b/obexd/client/manager.c
index a46519f..1f70f60 100644
--- a/obexd/client/manager.c
+++ b/obexd/client/manager.c
for (i = 0; i < data->files->len; i++) {
const gchar *filename = g_ptr_array_index(data->files, i);
gchar *basename = g_path_get_basename(filename);
+ struct obc_transfer *transfer;
- if (obc_session_send(session, filename, basename, NULL) == 0) {
- g_free(basename);
- break;
- }
+ transfer = obc_transfer_put(NULL, basename, filename, NULL, 0,
+ NULL, 0, NULL);
g_free(basename);
+ if (transfer == NULL)
+ break;
+
+ if (!obc_session_queue(session, transfer, NULL, NULL, NULL))
+ break;
}
/* No need to keep a reference for SendFiles */
GError *err, void *user_data)
{
struct send_data *data = user_data;
+ struct obc_transfer *pull;
DBusMessage *reply;
GError *gerr = NULL;
goto fail;
}
- obc_session_pull(session, "text/x-vcard", data->filename,
- pull_complete_callback, data, &gerr);
- if (gerr != NULL) {
+ pull = obc_transfer_get("text/x-vcard", NULL, data->filename, NULL, 0,
+ &gerr);
+
+ if (!obc_session_queue(session, pull, pull_complete_callback, data,
+ &gerr)) {
reply = g_dbus_create_error(data->message,
"org.openobex.Error.Failed",
"%s", gerr->message);
GError *err, void *user_data)
{
struct send_data *data = user_data;
+ struct obc_transfer *pull;
DBusMessage *reply;
GError *gerr = NULL;
goto fail;
}
- obc_session_pull(session, "x-obex/capability", NULL,
- capabilities_complete_callback, data, &gerr);
- if (gerr != NULL) {
+ pull = obc_transfer_get("x-obex/capability", NULL, data->filename,
+ NULL, 0, &gerr);
+
+ if (!obc_session_queue(session, pull, capabilities_complete_callback,
+ data, &gerr)) {
reply = g_dbus_create_error(data->message,
"org.openobex.Error.Failed",
"%s", gerr->message);
diff --git a/obexd/client/map.c b/obexd/client/map.c
index eb06834..3e6f237 100644
--- a/obexd/client/map.c
+++ b/obexd/client/map.c
DBusMessage *message, void *user_data)
{
struct map_data *map = user_data;
+ struct obc_transfer *transfer;
GError *err = NULL;
+ DBusMessage *reply;
- obc_session_get(map->session, "x-obex/folder-listing", NULL,
- NULL, NULL, 0,
- buffer_cb, map, &err);
- if (err != NULL) {
- DBusMessage *reply = g_dbus_create_error(message,
- "org.openobex.Error.Failed",
- "%s", err->message);
- g_error_free(err);
- return reply;
- }
+ transfer = obc_transfer_get("x-obex/folder-listing", NULL, NULL,
+ NULL, 0, &err);
+ if (transfer == NULL)
+ goto fail;
- map->msg = dbus_message_ref(message);
+ if (obc_session_queue(map->session, transfer, buffer_cb, map, &err)) {
+ map->msg = dbus_message_ref(message);
+ return NULL;
+ }
- return NULL;
+fail:
+ reply = g_dbus_create_error(message, "org.openobex.Error.Failed", "%s",
+ err->message);
+ g_error_free(err);
+ return reply;
}
static DBusMessage *map_get_message_listing(DBusConnection *connection,
DBusMessage *message, void *user_data)
{
struct map_data *map = user_data;
+ struct obc_transfer *transfer;
const char *folder;
DBusMessageIter msg_iter;
GError *err = NULL;
+ DBusMessage *reply;
dbus_message_iter_init(message, &msg_iter);
dbus_message_iter_get_basic(&msg_iter, &folder);
- obc_session_get(map->session, "x-bt/MAP-msg-listing", folder,
- NULL, NULL, 0,
- buffer_cb, map, &err);
- if (err != NULL) {
- DBusMessage *reply = g_dbus_create_error(message,
- "org.openobex.Error.Failed",
- "%s", err->message);
- g_error_free(err);
- return reply;
- }
+ transfer = obc_transfer_get("x-bt/MAP-msg-listing", folder, NULL,
+ NULL, 0, &err);
+ if (transfer == NULL)
+ goto fail;
- map->msg = dbus_message_ref(message);
+ if (obc_session_queue(map->session, transfer, buffer_cb, map, &err)) {
+ map->msg = dbus_message_ref(message);
+ return NULL;
+ }
- return NULL;
+fail:
+ reply = g_dbus_create_error(message, "org.openobex.Error.Failed", "%s",
+ err->message);
+ g_error_free(err);
+ return reply;
}
static GDBusMethodTable map_methods[] = {
diff --git a/obexd/client/pbap.c b/obexd/client/pbap.c
index b178aff..92292c9 100644
--- a/obexd/client/pbap.c
+++ b/obexd/client/pbap.c
{
struct pending_request *request;
struct pullphonebook_apparam apparam;
+ struct obc_transfer *transfer;
session_callback_t func;
GError *err = NULL;
+ DBusMessage *reply;
apparam.filter_tag = FILTER_TAG;
apparam.filter_len = FILTER_LEN;
request = pending_request_new(pbap, message);
- obc_session_get(pbap->session, "x-bt/phonebook", name, NULL,
- (guint8 *) &apparam, sizeof(apparam),
- func, request, &err);
- if (err != NULL) {
- DBusMessage *reply = g_dbus_create_error(message,
- "org.openobex.Error.Failed",
- "%s", err->message);
- g_error_free(err);
- pending_request_free(request);
- return reply;
- }
+ transfer = obc_transfer_get("x-bt/phonebook", name, NULL, &apparam,
+ sizeof(apparam), &err);
+ if (transfer == NULL)
+ goto fail;
- return NULL;
+ if (obc_session_queue(pbap->session, transfer, func, request, &err))
+ return NULL;
+
+fail:
+ reply = g_dbus_create_error(message, "org.openobex.Error.Failed", "%s",
+ err->message);
+ g_error_free(err);
+ pending_request_free(request);
+ return reply;
}
static guint8 *fill_apparam(guint8 *dest, void *buf, guint8 tag, guint8 len)
guint16 count, guint16 offset)
{
struct pending_request *request;
+ struct obc_transfer *transfer;
guint8 *p, *apparam = NULL;
gint apparam_size;
GError *err = NULL;
+ DBusMessage *reply;
/* trunc the searchval string if it's length exceed the max value of guint8 */
if (strlen(searchval) > 254)
request = pending_request_new(pbap, message);
- obc_session_get(pbap->session, "x-bt/vcard-listing", name, NULL,
- apparam, apparam_size,
- pull_vcard_listing_callback, request, &err);
+ transfer = obc_transfer_get("x-bt/vcard-listing", name, NULL,
+ apparam, apparam_size, &err);
g_free(apparam);
- if (err != NULL) {
- DBusMessage *reply = g_dbus_create_error(message,
- "org.openobex.Error.Failed",
- "%s", err->message);
- g_error_free(err);
- pending_request_free(request);
- return reply;
+ if (transfer == NULL)
+ goto fail;
- }
+ if (obc_session_queue(pbap->session, transfer,
+ pull_vcard_listing_callback, request, &err))
+ return NULL;
- return NULL;
+fail:
+ reply = g_dbus_create_error(message, "org.openobex.Error.Failed", "%s",
+ err->message);
+ g_error_free(err);
+ pending_request_free(request);
+ return reply;
}
static int set_format(struct pbap_data *pbap, const char *formatstr)
struct pullvcardentry_apparam apparam;
const char *name;
struct pending_request *request;
+ struct obc_transfer *transfer;
GError *err = NULL;
+ DBusMessage *reply;
if (!pbap->path)
return g_dbus_create_error(message,
request = pending_request_new(pbap, message);
- obc_session_get(pbap->session, "x-bt/vcard", name, NULL,
- (guint8 *)&apparam, sizeof(apparam),
- pull_phonebook_callback, request, &err);
- if (err != NULL) {
- DBusMessage *reply = g_dbus_create_error(message,
- "org.openobex.Error.Failed",
- "%s", err->message);
- g_error_free(err);
- pending_request_free(request);
- return reply;
- }
+ transfer = obc_transfer_get("x-bt/vcard", name, NULL,
+ &apparam, sizeof(apparam), &err);
+ if (transfer == NULL)
+ goto fail;
- return NULL;
+ if (obc_session_queue(pbap->session, transfer, pull_phonebook_callback,
+ request, &err))
+ return NULL;
+
+fail:
+ reply = g_dbus_create_error(message, "org.openobex.Error.Failed", "%s",
+ err->message);
+ g_error_free(err);
+ pending_request_free(request);
+ return reply;
}
static DBusMessage *pbap_list(DBusConnection *connection,
diff --git a/obexd/client/session.c b/obexd/client/session.c
index f8f8da4..2c1827f 100644
--- a/obexd/client/session.c
+++ b/obexd/client/session.c
NULL);
}
-static guint session_request(struct obc_session *session,
- struct obc_transfer *transfer,
- session_callback_t func,
- void *data, GError **err)
+guint obc_session_queue(struct obc_session *session,
+ struct obc_transfer *transfer,
+ session_callback_t func, void *user_data,
+ GError **err)
{
struct pending_request *p;
const char *agent;
int perr;
+ if (session->obex == NULL) {
+ obc_transfer_unregister(transfer);
+ g_set_error(err, OBEX_IO_ERROR, -ENOTCONN,
+ "Session not connected");
+ return 0;
+ }
+
if (session->agent)
agent = obc_agent_get_name(session->agent);
else
obc_transfer_set_callback(transfer, transfer_progress, session);
p = pending_request_new(session, transfer, session_start_transfer,
- func, data);
+ func, user_data);
if (session->p) {
g_queue_push_tail(session->queue, p);
return p->id;
DBG("Transfer(%p) started", transfer);
}
-guint obc_session_get(struct obc_session *session, const char *type,
- const char *name, const char *targetfile,
- const guint8 *apparam, gint apparam_size,
- session_callback_t func, void *user_data,
- GError **err)
-{
- struct obc_transfer *transfer;
-
- if (session->obex == NULL) {
- g_set_error(err, OBEX_IO_ERROR, -ENOTCONN,
- "Session not connected");
- return 0;
- }
-
- transfer = obc_transfer_get(type, name, targetfile, apparam,
- apparam_size, err);
- if (transfer == NULL)
- return 0;
-
- return session_request(session, transfer, func, user_data, err);
-}
-
-guint obc_session_send(struct obc_session *session, const char *filename,
- const char *name, GError **err)
-{
- struct obc_transfer *transfer;
-
- if (session->obex == NULL) {
- g_set_error(err, OBEX_IO_ERROR, -ENOTCONN,
- "Session not connected");
- return 0;
- }
-
- transfer = obc_transfer_put(NULL, name, filename, NULL, 0, NULL, 0,
- err);
- if (transfer == NULL)
- return 0;
-
- return session_request(session, transfer, NULL, NULL, err);
-}
-
-guint obc_session_pull(struct obc_session *session,
- const char *type, const char *targetfile,
- session_callback_t function, void *user_data,
- GError **err)
-{
- return obc_session_get(session, type, NULL, targetfile, NULL, 0,
- function, user_data, err);
-}
-
const char *obc_session_register(struct obc_session *session,
GDBusDestroyFunction destroy)
{
return NULL;
}
-guint obc_session_put(struct obc_session *session, const char *contents,
- size_t size, const char *name, GError **err)
-{
- struct obc_transfer *transfer;
-
- if (session->obex == NULL) {
- g_set_error(err, OBEX_IO_ERROR, -ENOTCONN,
- "Session not connected");
- return 0;
- }
-
- transfer = obc_transfer_put(NULL, name, NULL, contents, size, NULL, 0,
- err);
- if (transfer == NULL)
- return 0;
-
- return session_request(session, transfer, NULL, NULL, err);
-}
-
static void agent_destroy(gpointer data, gpointer user_data)
{
struct obc_session *session = user_data;
diff --git a/obexd/client/session.h b/obexd/client/session.h
index 06aaa1b..2cac032 100644
--- a/obexd/client/session.h
+++ b/obexd/client/session.h
const char *obc_session_get_path(struct obc_session *session);
const char *obc_session_get_target(struct obc_session *session);
-guint obc_session_send(struct obc_session *session, const char *filename,
- const char *name, GError **err);
-guint obc_session_get(struct obc_session *session, const char *type,
- const char *name, const char *targetfile,
- const guint8 *apparam, gint apparam_size,
- session_callback_t func, void *user_data,
- GError **err);
-guint obc_session_pull(struct obc_session *session,
- const char *type, const char *targetfile,
- session_callback_t function, void *user_data,
- GError **err);
const char *obc_session_register(struct obc_session *session,
GDBusDestroyFunction destroy);
-guint obc_session_put(struct obc_session *session, const char *contents,
- size_t size, const char *name, GError **err);
+guint obc_session_queue(struct obc_session *session,
+ struct obc_transfer *transfer,
+ session_callback_t func, void *user_data,
+ GError **err);
guint obc_session_setpath(struct obc_session *session, const char *path,
session_callback_t func, void *user_data,
GError **err);
diff --git a/obexd/client/sync.c b/obexd/client/sync.c
index c0b3800..3c376cc 100644
--- a/obexd/client/sync.c
+++ b/obexd/client/sync.c
DBusMessage *message, void *user_data)
{
struct sync_data *sync = user_data;
+ struct obc_transfer *transfer;
GError *err = NULL;
+ DBusMessage *reply;
if (sync->msg)
return g_dbus_create_error(message,
if (!sync->phonebook_path)
sync->phonebook_path = g_strdup("telecom/pb.vcf");
- obc_session_get(sync->session, "phonebook", sync->phonebook_path,
- NULL, NULL, 0,
- sync_getphonebook_callback, sync,
- &err);
- if (err != 0) {
- DBusMessage *reply = g_dbus_create_error(message,
- ERROR_INF ".Failed",
- err->message);
- g_error_free(err);
- return reply;
- }
+ transfer = obc_transfer_get("phonebook", sync->phonebook_path,
+ NULL, NULL, 0, &err);
+ if (transfer == NULL)
+ goto fail;
- sync->msg = dbus_message_ref(message);
+ if (obc_session_queue(sync->session, transfer,
+ sync_getphonebook_callback,
+ sync, &err)) {
+ sync->msg = dbus_message_ref(message);
+ return NULL;
+ }
- return NULL;
+fail:
+ reply = g_dbus_create_error(message, ERROR_INF ".Failed", "%s",
+ err->message);
+ g_error_free(err);
+ return reply;
}
static DBusMessage *sync_putphonebook(DBusConnection *connection,
DBusMessage *message, void *user_data)
{
struct sync_data *sync = user_data;
+ struct obc_transfer *transfer;
const char *buf;
GError *err = NULL;
+ DBusMessage *reply;
if (dbus_message_get_args(message, NULL,
DBUS_TYPE_STRING, &buf,
if (!sync->phonebook_path)
sync->phonebook_path = g_strdup("telecom/pb.vcf");
- obc_session_put(sync->session, buf, strlen(buf), sync->phonebook_path,
- &err);
- if (err != NULL) {
- DBusMessage *reply = g_dbus_create_error(message,
- ERROR_INF ".Failed",
- err->message);
- g_error_free(err);
- return reply;
- }
+ transfer = obc_transfer_put(NULL, sync->phonebook_path, NULL, buf,
+ strlen(buf), NULL, 0, &err);
+ if (transfer == NULL)
+ goto fail;
- return dbus_message_new_method_return(message);
+ if (obc_session_queue(sync->session, transfer, NULL, NULL, &err))
+ return dbus_message_new_method_return(message);
+
+fail:
+ reply = g_dbus_create_error(message, ERROR_INF ".Failed", "%s",
+ err->message);
+ g_error_free(err);
+ return reply;
}
static GDBusMethodTable sync_methods[] = {