Only return networks that are registered
authorMarcel Holtmann <marcel@holtmann.org>
Mon, 5 Jan 2009 01:10:27 +0000 (02:10 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 5 Jan 2009 01:10:27 +0000 (02:10 +0100)
src/connman.h
src/element.c
src/network.c

index e803ddc..4e59e53 100644 (file)
@@ -163,6 +163,8 @@ void __connman_network_cleanup(void);
 void __connman_network_set_device(struct connman_network *network,
                                        struct connman_device *device);
 
+connman_bool_t __connman_network_has_driver(struct connman_network *network);
+
 #include <connman/rtnl.h>
 
 int __connman_rtnl_init(void);
index 95157dc..28d362e 100644 (file)
@@ -580,6 +580,10 @@ static gboolean append_path(GNode *node, gpointer user_data)
                        __connman_device_has_driver(element->device) == FALSE)
                return FALSE;
 
+       if (filter->type == CONNMAN_ELEMENT_TYPE_NETWORK &&
+                       __connman_network_has_driver(element->network) == FALSE)
+               return FALSE;
+
        dbus_message_iter_append_basic(filter->iter,
                                DBUS_TYPE_OBJECT_PATH, &element->path);
 
index 898bed5..dc6b60b 100644 (file)
@@ -42,6 +42,8 @@ struct connman_network {
        struct connman_network_driver *driver;
        void *driver_data;
 
+       connman_bool_t registered;
+
        struct connman_device *device;
 
        struct {
@@ -201,6 +203,8 @@ static int register_interface(struct connman_element *element)
                return -EIO;
        }
 
+       network->registered = TRUE;
+
        emit_networks_signal();
 
        return 0;
@@ -208,14 +212,26 @@ static int register_interface(struct connman_element *element)
 
 static void unregister_interface(struct connman_element *element)
 {
+       struct connman_network * network = element->network;
+
        DBG("element %p name %s", element, element->name);
 
+       network->registered = FALSE;
+
        emit_networks_signal();
 
        g_dbus_unregister_interface(connection, element->path,
                                                CONNMAN_NETWORK_INTERFACE);
 }
 
+connman_bool_t __connman_network_has_driver(struct connman_network *network)
+{
+       if (network == NULL || network->driver == NULL)
+               return FALSE;
+
+       return network->registered;
+}
+
 static GSList *driver_list = NULL;
 
 static gint compare_priority(gconstpointer a, gconstpointer b)