[PATCH 4/6] Add adapter ReleaseSession to obex-client

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Release of adapter session is added to obex-client upon closing OBEX
transfer.
---
 client/session.c |   38 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 37 insertions(+), 1 deletions(-)

diff --git a/client/session.c b/client/session.c
index 75cd32e..423eb8c 100644
--- a/client/session.c
+++ b/client/session.c
@@ -302,9 +302,34 @@ static struct pending_req *send_method_call(DBusConnection *connection,
 	return req;
 }
 
+static void adapter_release_reply(DBusPendingCall *call, void *user_data)
+{
+	DBusError err;
+	DBusMessage *reply;
+	struct session_data *session = user_data;
+	struct pending_req *req = find_session_request(session, call);
+
+	reply = dbus_pending_call_steal_reply(call);
+
+	dbus_error_init(&err);
+	if (dbus_set_error_from_message(&err, reply)) {
+		error("manager replied with an error: %s, %s",
+				err.name, err.message);
+		dbus_error_free(&err);
+	}
+
+	dbus_message_unref(reply);
+
+	session->pending_calls = g_slist_remove(session->pending_calls, req);
+	pending_req_finalize(req);
+
+	session_free(session);
+}
+
 void session_unref(struct session_data *session)
 {
 	gboolean ret;
+	struct pending_req *req;
 
 	ret = g_atomic_int_dec_and_test(&session->refcount);
 
@@ -313,7 +338,18 @@ void session_unref(struct session_data *session)
 	if (ret == FALSE)
 		return;
 
-	session_free(session);
+	req = send_method_call(session->conn_system,
+				BT_BUS_NAME, session->adapter,
+				BT_ADAPTER_IFACE, "ReleaseSession",
+				adapter_release_reply, session,
+				DBUS_TYPE_INVALID);
+	if (!req) {
+		g_free(session->adapter);
+		session_free(session);
+		return;
+	}
+
+	session->pending_calls = g_slist_prepend(session->pending_calls, req);
 }
 
 static void rfcomm_callback(GIOChannel *io, GError *err, gpointer user_data)
-- 
1.7.4.1

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux