From d09ffbb2caf8b7e1e5a092e79f3675eb98861798 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Wed, 21 Jan 2009 10:33:15 +0100 Subject: [PATCH] Track current network within device framework --- src/connman.h | 3 +++ src/device.c | 13 +++++++++---- src/network.c | 4 ++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/connman.h b/src/connman.h index b007cca..6da4c7a 100644 --- a/src/connman.h +++ b/src/connman.h @@ -163,6 +163,9 @@ void __connman_device_cleanup(void); void __connman_device_increase_connections(struct connman_device *device); void __connman_device_decrease_connections(struct connman_device *device); +void __connman_device_set_network(struct connman_device *device, + struct connman_network *network); + void __connman_device_disconnect(struct connman_device *device); connman_bool_t __connman_device_has_driver(struct connman_device *device); diff --git a/src/device.c b/src/device.c index 74196b7..9c31c72 100644 --- a/src/device.c +++ b/src/device.c @@ -47,6 +47,7 @@ struct connman_device { connman_bool_t registered; + struct connman_network *network; GHashTable *networks; }; @@ -1008,10 +1009,8 @@ void __connman_device_disconnect(struct connman_device *device) while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) { struct connman_network *network = value; - if (connman_network_get_connected(network) == FALSE) - continue; - - __connman_network_disconnect(network); + if (connman_network_get_connected(network) == TRUE) + __connman_network_disconnect(network); } } @@ -1312,6 +1311,12 @@ int connman_device_remove_network(struct connman_device *device, return 0; } +void __connman_device_set_network(struct connman_device *device, + struct connman_network *network) +{ + device->network = network; +} + /** * connman_device_register: * @device: device structure diff --git a/src/network.c b/src/network.c index 6571da6..16df43e 100644 --- a/src/network.c +++ b/src/network.c @@ -671,6 +671,8 @@ int connman_network_set_connected(struct connman_network *network, __connman_device_increase_connections(network->device); + __connman_device_set_network(network->device, network); + element = connman_element_create(NULL); if (element != NULL) { element->type = type; @@ -683,6 +685,8 @@ int connman_network_set_connected(struct connman_network *network, } else { connman_element_unregister_children(&network->element); + __connman_device_set_network(network->device, NULL); + __connman_device_decrease_connections(network->device); } -- 2.7.4