summaryrefslogtreecommitdiff
path: root/plugins/bluetooth.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-11-13 07:50:18 +0900
committerMarcel Holtmann <marcel@holtmann.org>2010-11-13 07:50:18 +0900
commitdff9239da62147966ce120a313f2d0dbe07dffe4 (patch)
tree2fbe4dc861d56d024f70205f4fa8536e5e17b203 /plugins/bluetooth.c
parentffd2b546e5eea2b361791bbe9062f1baf8530c35 (diff)
downloadconnman-dff9239da62147966ce120a313f2d0dbe07dffe4.tar.gz
connman-dff9239da62147966ce120a313f2d0dbe07dffe4.tar.bz2
connman-dff9239da62147966ce120a313f2d0dbe07dffe4.zip
Use technology information when reporting Tethering status
Diffstat (limited to 'plugins/bluetooth.c')
-rw-r--r--plugins/bluetooth.c46
1 files changed, 24 insertions, 22 deletions
diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c
index 03a01dc6..985f0e64 100644
--- a/plugins/bluetooth.c
+++ b/plugins/bluetooth.c
@@ -948,6 +948,7 @@ static void tech_remove(struct connman_technology *technology)
static void server_register_reply(DBusPendingCall *call, void *user_data)
{
+ struct connman_technology *technology = user_data;
DBusError error;
DBusMessage *reply;
@@ -968,11 +969,12 @@ static void server_register_reply(DBusPendingCall *call, void *user_data)
dbus_message_unref(reply);
dbus_pending_call_unref(call);
- connman_technology_tethering_notify(NULL, TRUE);
+ connman_technology_tethering_notify(technology, TRUE);
}
static void server_unregister_reply(DBusPendingCall *call, void *user_data)
{
+ struct connman_technology *technology = user_data;
DBusError error;
DBusMessage *reply;
@@ -993,11 +995,12 @@ static void server_unregister_reply(DBusPendingCall *call, void *user_data)
dbus_message_unref(reply);
dbus_pending_call_unref(call);
- connman_technology_tethering_notify(NULL, FALSE);
+ connman_technology_tethering_notify(technology, FALSE);
}
static void server_register(const char *path, const char *uuid,
+ struct connman_technology *technology,
const char *bridge, connman_bool_t enabled)
{
DBusMessage *message;
@@ -1037,60 +1040,59 @@ static void server_register(const char *path, const char *uuid,
if (enabled == TRUE)
dbus_pending_call_set_notify(call, server_register_reply,
- NULL, NULL);
+ technology, NULL);
else
dbus_pending_call_set_notify(call, server_unregister_reply,
- NULL, NULL);
+ technology, NULL);
dbus_message_unref(message);
}
-static void enable_nap(gpointer key, gpointer value,
- gpointer user_data)
+struct tethering_info {
+ struct connman_technology *technology;
+ const char *bridge;
+};
+
+static void enable_nap(gpointer key, gpointer value, gpointer user_data)
{
+ struct tethering_info *info = user_data;
struct connman_device *device = value;
- const char *bridge = user_data;
const char *path;
DBG("");
path = connman_device_get_string(device, "Path");
- server_register(path, "nap", bridge, TRUE);
+ server_register(path, "nap", info->technology, info->bridge, TRUE);
}
-static void disable_nap(gpointer key, gpointer value,
- gpointer user_data)
+static void disable_nap(gpointer key, gpointer value, gpointer user_data)
{
+ struct tethering_info *info = user_data;
struct connman_device *device = value;
- const char *bridge = user_data;
const char *path;
DBG("");
path = connman_device_get_string(device, "Path");
- server_register(path, "nap", bridge, FALSE);
+ server_register(path, "nap", info->technology, info->bridge, FALSE);
}
static int tech_set_tethering(struct connman_technology *technology,
const char *bridge, connman_bool_t enabled)
{
- char *bridge_name = g_strdup(bridge);
+ struct tethering_info info = {
+ .technology = technology,
+ .bridge = bridge,
+ };
DBG("bridge %s", bridge);
- if (bridge_name == NULL)
- return -ENOMEM;
-
if (enabled)
- g_hash_table_foreach(bluetooth_devices,
- enable_nap, bridge_name);
+ g_hash_table_foreach(bluetooth_devices, enable_nap, &info);
else
- g_hash_table_foreach(bluetooth_devices,
- disable_nap, bridge_name);
-
- g_free(bridge_name);
+ g_hash_table_foreach(bluetooth_devices, disable_nap, &info);
return 0;
}