Diff between 02cc0066d9bc9a6ab913e45033dcbe84f87c3aed and 9b883a0264dc7f1219a812afc18f05a2c9a4874c

Changed Files

File Additions Deletions Status
obexd/client/ftp.c +46 -31 modified
obexd/client/manager.c +20 -10 modified
obexd/client/map.c +30 -24 modified
obexd/client/pbap.c +46 -36 modified
obexd/client/session.c +12 -74 modified
obexd/client/session.h +4 -13 modified
obexd/client/sync.c +31 -23 modified

Full Patch

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
@@ -258,21 +258,26 @@ static DBusMessage *list_folder(DBusConnection *connection,
 {
 	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,
@@ -280,8 +285,10 @@ 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,
@@ -290,19 +297,22 @@ static DBusMessage *get_file(DBusConnection *connection,
 		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,
@@ -310,8 +320,10 @@ 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,
@@ -321,16 +333,19 @@ static DBusMessage *put_file(DBusConnection *connection,
 				"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
@@ -113,13 +113,17 @@ static void create_callback(struct obc_session *session,
 	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 */
@@ -278,6 +282,7 @@ static void pull_obc_session_callback(struct obc_session *session,
 						GError *err, void *user_data)
 {
 	struct send_data *data = user_data;
+	struct obc_transfer *pull;
 	DBusMessage *reply;
 	GError *gerr = NULL;
 
@@ -288,9 +293,11 @@ static void pull_obc_session_callback(struct obc_session *session,
 		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);
@@ -497,6 +504,7 @@ static void capability_obc_session_callback(struct obc_session *session,
 						GError *err, void *user_data)
 {
 	struct send_data *data = user_data;
+	struct obc_transfer *pull;
 	DBusMessage *reply;
 	GError *gerr = NULL;
 
@@ -507,9 +515,11 @@ static void capability_obc_session_callback(struct obc_session *session,
 		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
@@ -135,31 +135,36 @@ static DBusMessage *map_get_folder_listing(DBusConnection *connection,
 					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);
 
@@ -169,20 +174,21 @@ static DBusMessage *map_get_message_listing(DBusConnection *connection,
 
 	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
@@ -462,8 +462,10 @@ static DBusMessage *pull_phonebook(struct pbap_data *pbap,
 {
 	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;
@@ -492,19 +494,20 @@ static DBusMessage *pull_phonebook(struct pbap_data *pbap,
 
 	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)
@@ -525,9 +528,11 @@ static DBusMessage *pull_vcard_listing(struct pbap_data *pbap,
 					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)
@@ -557,21 +562,22 @@ static DBusMessage *pull_vcard_listing(struct pbap_data *pbap,
 
 	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)
@@ -760,7 +766,9 @@ static DBusMessage *pbap_pull_vcard(DBusConnection *connection,
 	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,
@@ -782,19 +790,21 @@ static DBusMessage *pbap_pull_vcard(DBusConnection *connection,
 
 	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
@@ -745,15 +745,22 @@ static int pending_request_auth(struct pending_request *p)
 									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
@@ -767,7 +774,7 @@ static guint session_request(struct obc_session *session,
 	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;
@@ -956,56 +963,6 @@ static void session_start_transfer(gpointer data, gpointer user_data)
 	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)
 {
@@ -1036,25 +993,6 @@ fail:
 	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
@@ -54,22 +54,13 @@ const char *obc_session_get_agent(struct obc_session *session);
 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
@@ -127,7 +127,9 @@ static DBusMessage *sync_getphonebook(DBusConnection *connection,
 			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,
@@ -137,29 +139,33 @@ static DBusMessage *sync_getphonebook(DBusConnection *connection,
 	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,
@@ -171,17 +177,19 @@ static DBusMessage *sync_putphonebook(DBusConnection *connection,
 	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[] = {