Track current network within device framework
authorMarcel Holtmann <marcel@holtmann.org>
Wed, 21 Jan 2009 09:33:15 +0000 (10:33 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 21 Jan 2009 09:33:15 +0000 (10:33 +0100)
src/connman.h
src/device.c
src/network.c

index b007cca..6da4c7a 100644 (file)
@@ -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);
index 74196b7..9c31c72 100644 (file)
@@ -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
index 6571da6..16df43e 100644 (file)
@@ -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);
        }