aboutsummaryrefslogtreecommitdiffstats
path: root/meta-ivi/recipes-connectivity/bluez5/bluez5/0006-plugins-service-Add-implemention-of-.Connect-method.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-ivi/recipes-connectivity/bluez5/bluez5/0006-plugins-service-Add-implemention-of-.Connect-method.patch')
-rw-r--r--meta-ivi/recipes-connectivity/bluez5/bluez5/0006-plugins-service-Add-implemention-of-.Connect-method.patch104
1 files changed, 104 insertions, 0 deletions
diff --git a/meta-ivi/recipes-connectivity/bluez5/bluez5/0006-plugins-service-Add-implemention-of-.Connect-method.patch b/meta-ivi/recipes-connectivity/bluez5/bluez5/0006-plugins-service-Add-implemention-of-.Connect-method.patch
new file mode 100644
index 0000000..3e601ad
--- /dev/null
+++ b/meta-ivi/recipes-connectivity/bluez5/bluez5/0006-plugins-service-Add-implemention-of-.Connect-method.patch
@@ -0,0 +1,104 @@
+From 2b63b5c56bc96e23c11be5b1d31ec80194f68e48 Mon Sep 17 00:00:00 2001
+From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
+Date: Mon, 6 Jan 2014 16:59:36 +0200
+Subject: [PATCH 06/12] plugins/service: Add implemention of .Connect method
+
+---
+ plugins/service.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 52 insertions(+), 1 deletion(-)
+
+diff --git a/plugins/service.c b/plugins/service.c
+index 207ac21..ded4487 100644
+--- a/plugins/service.c
++++ b/plugins/service.c
+@@ -50,6 +50,7 @@ static GSList *services = NULL;
+ struct service_data {
+ struct btd_service *service;
+ char *path;
++ DBusMessage *connect;
+ };
+
+ static struct service_data *find_data(struct btd_service *service)
+@@ -70,6 +71,9 @@ static void data_free(void *user_data)
+ {
+ struct service_data *data = user_data;
+
++ if (data->connect)
++ dbus_message_unref(data->connect);
++
+ g_free(data->path);
+ g_free(data);
+ }
+@@ -90,7 +94,19 @@ static DBusMessage *service_disconnect(DBusConnection *conn, DBusMessage *msg,
+ static DBusMessage *service_connect(DBusConnection *conn, DBusMessage *msg,
+ void *user_data)
+ {
+- return btd_error_not_available(msg);
++ struct service_data *data = user_data;
++ int err;
++
++ if (data->connect)
++ return btd_error_in_progress(msg);
++
++ err = btd_service_connect(data->service);
++ if (err < 0)
++ return btd_error_failed(msg, strerror(-err));
++
++ data->connect = dbus_message_ref(msg);
++
++ return NULL;
+ }
+
+ static const char *data_get_state(struct service_data *data)
+@@ -215,6 +231,35 @@ static struct service_data *service_get_data(struct btd_service *service)
+ return data;
+ }
+
++static void service_connected(struct service_data *data)
++{
++ DBusMessage *reply;
++
++ if (!data->connect)
++ return;
++
++ reply = dbus_message_new_method_return(data->connect);
++ g_dbus_send_message(btd_get_dbus_connection(), reply);
++ dbus_message_unref(data->connect);
++ data->connect = NULL;
++}
++
++static void service_disconnected(struct service_data *data)
++{
++ DBusMessage *reply;
++ int err;
++
++ if (!data->connect)
++ return;
++
++ err = btd_service_get_error(data->service);
++
++ reply = btd_error_failed(data->connect, strerror(-err));
++ g_dbus_send_message(btd_get_dbus_connection(), reply);
++ dbus_message_unref(data->connect);
++ data->connect = NULL;
++}
++
+ static void service_cb(struct btd_service *service,
+ btd_service_state_t old_state,
+ btd_service_state_t new_state,
+@@ -230,6 +275,12 @@ static void service_cb(struct btd_service *service,
+ case BTD_SERVICE_STATE_UNAVAILABLE:
+ data_remove(data);
+ return;
++ case BTD_SERVICE_STATE_CONNECTED:
++ service_connected(data);
++ break;
++ case BTD_SERVICE_STATE_DISCONNECTED:
++ service_disconnected(data);
++ break;
+ default:
+ break;
+ }
+--
+2.2.0
+