diff options
author | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2012-06-01 16:11:26 +0200 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2012-06-04 16:20:51 +0300 |
commit | 9ab7ed03f468a89f6cc0812086294424e26380b4 (patch) | |
tree | be78ee7f582eec05a310cb9785122c44e25d0c77 /plugins/dundee.c | |
parent | e688cd48b45a3afcd087aa26af98346fab974861 (diff) | |
download | connman-9ab7ed03f468a89f6cc0812086294424e26380b4.tar.gz connman-9ab7ed03f468a89f6cc0812086294424e26380b4.tar.bz2 connman-9ab7ed03f468a89f6cc0812086294424e26380b4.zip |
dundee: Register connman_network at core
Diffstat (limited to 'plugins/dundee.c')
-rw-r--r-- | plugins/dundee.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/plugins/dundee.c b/plugins/dundee.c index f903a35a..ef23d373 100644 --- a/plugins/dundee.c +++ b/plugins/dundee.c @@ -57,6 +57,7 @@ struct dundee_data { char *name; struct connman_device *device; + struct connman_network *network; connman_bool_t active; @@ -118,6 +119,12 @@ static void destroy_device(struct dundee_data *info) { connman_device_set_powered(info->device, FALSE); + if (info->network != NULL) { + connman_device_remove_network(info->device, info->network); + connman_network_unref(info->network); + info->network = NULL; + } + connman_device_unregister(info->device); connman_device_unref(info->device); @@ -137,6 +144,40 @@ static void device_destroy(gpointer data) g_free(info); } +static void create_network(struct dundee_data *info) +{ + struct connman_network *network; + const char *group; + + DBG("%s", info->path); + + network = connman_network_create(info->path, + CONNMAN_NETWORK_TYPE_BLUETOOTH_DUN); + if (network == NULL) + return; + + DBG("network %p", network); + + connman_network_set_data(network, info); + + connman_network_set_string(network, "Path", + info->path); + + connman_network_set_name(network, info->name); + + group = get_ident(info->path); + connman_network_set_group(network, group); + + connman_network_set_available(network, TRUE); + + if (connman_device_add_network(info->device, network) < 0) { + connman_network_unref(network); + return; + } + + info->network = network; +} + static int network_probe(struct connman_network *network) { DBG("network %p", network); @@ -360,6 +401,9 @@ static gboolean device_changed(DBusConnection *connection, info->name = g_strdup(name); DBG("%s Name %s", info->path, info->name); + + connman_network_set_name(info->network, info->name); + connman_network_update(info->network); } return TRUE; @@ -414,6 +458,7 @@ static void add_device(const char *path, DBusMessageIter *properties) g_hash_table_insert(dundee_devices, g_strdup(path), info); create_device(info); + create_network(info); } static gboolean device_added(DBusConnection *connection, DBusMessage *message, |