diff --git a/obexd/client/session.c b/obexd/client/session.c
index 85425e5..b24f32f 100644
--- a/obexd/client/session.c
+++ b/obexd/client/session.c
DBUS_TYPE_INVALID);
g_dbus_send_message(conn, message);
+
}
static void agent_notify_error(DBusConnection *conn, const char *agent_name,
NULL
};
+static char *register_transfer(DBusConnection *conn, void *user_data)
+{
+ char *path;
+
+ path = g_strdup_printf("%s/transfer%ju",
+ TRANSFER_BASEPATH, counter++);
+
+ if (g_dbus_register_interface(conn, path,
+ TRANSFER_INTERFACE,
+ transfer_methods, NULL, NULL,
+ user_data, NULL) == FALSE) {
+ g_free(path);
+ return NULL;
+ }
+
+ return path;
+}
+
+static void unregister_transfer(struct session_data *session)
+{
+ if (session->transfer_path == NULL)
+ return;
+
+ g_dbus_unregister_interface(session->conn,
+ session->transfer_path, TRANSFER_INTERFACE);
+ g_free(session->transfer_path);
+ session->transfer_path = NULL;
+}
+
static void list_folder_callback(struct session_data *session,
void *user_data)
{
session->agent_path, session->transfer_path,
"Error getting object");
+ unregister_transfer(session);
+
gw_obex_xfer_close(xfer, NULL);
gw_obex_xfer_free(xfer);
callback->session->xfer = NULL;
+ g_free(session->filename);
+ session->filename = NULL;
+
+ g_free(session->name);
+ session->name = NULL;
+
callback->func(callback->session, callback->data);
if (session->fd > 0)
g_free(callback);
}
-static char *register_transfer(DBusConnection *conn, void *user_data)
-{
- char *path;
-
- path = g_strdup_printf("%s/transfer%ju",
- TRANSFER_BASEPATH, counter++);
-
- if (g_dbus_register_interface(conn, path,
- TRANSFER_INTERFACE,
- transfer_methods, NULL, NULL,
- user_data, NULL) == FALSE) {
- g_free(path);
- return NULL;
- }
-
- return path;
-}
-
int session_get(struct session_data *session, const char *type,
const char *filename, const char *targetname,
session_callback_t func)
session->agent_path, session->transfer_path,
"Error sending object");
+ unregister_transfer(session);
+
gw_obex_xfer_close(session->xfer, NULL);
gw_obex_xfer_free(session->xfer);
session->xfer = NULL;
g_ptr_array_remove(session->pending, filename);
- if (session->transfer_path) {
- g_dbus_unregister_interface(session->conn,
- session->transfer_path, TRANSFER_INTERFACE);
- g_free(session->transfer_path);
- session->transfer_path = NULL;
- }
-
session_send(session, filename, basename);
g_free(filename);
g_free(basename);