diff options
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.patch | 104 |
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 + |