Return an error when trying to connect hidden networks
[connman] / plugins / wifi.c
index f44cdd8..21b9208 100644 (file)
 #include <config.h>
 #endif
 
+#include <errno.h>
+
 #include <dbus/dbus.h>
+#include <glib.h>
 
 #define CONNMAN_API_SUBJECT_TO_CHANGE
 #include <connman/plugin.h>
@@ -53,11 +56,27 @@ static void network_remove(struct connman_network *network)
        DBG("network %p", network);
 }
 
+static int network_connect(struct connman_network *network)
+{
+       DBG("network %p", network);
+
+       return supplicant_connect(network);
+}
+
+static int network_disconnect(struct connman_network *network)
+{
+       DBG("network %p", network);
+
+       return supplicant_disconnect(network);
+}
+
 static struct connman_network_driver network_driver = {
        .name           = "wifi",
        .type           = CONNMAN_NETWORK_TYPE_WIFI,
        .probe          = network_probe,
        .remove         = network_remove,
+       .connect        = network_connect,
+       .disconnect     = network_disconnect,
 };
 
 static int wifi_probe(struct connman_device *device)
@@ -102,8 +121,6 @@ static int wifi_disable(struct connman_device *device)
 
        DBG("device %p", device);
 
-       connman_element_unregister_children((struct connman_element *) device);
-
        data->connected = FALSE;
 
        return supplicant_stop(device);
@@ -116,6 +133,26 @@ static int wifi_scan(struct connman_device *device)
        return supplicant_scan(device);
 }
 
+static int wifi_join(struct connman_device *device,
+                                       struct connman_network *network)
+{
+       int err;
+
+       DBG("device %p", device);
+
+       err = supplicant_connect(network);
+       if (err < 0)
+               return err;
+
+       connman_network_ref(network);
+
+       connman_device_add_network(device, network);
+
+       connman_network_set_available(network, TRUE);
+
+       return 0;
+}
+
 static struct connman_device_driver wifi_driver = {
        .name           = "wifi",
        .type           = CONNMAN_DEVICE_TYPE_WIFI,
@@ -124,6 +161,7 @@ static struct connman_device_driver wifi_driver = {
        .enable         = wifi_enable,
        .disable        = wifi_disable,
        .scan           = wifi_scan,
+       .join           = wifi_join,
 };
 
 static void wifi_register(void)
@@ -172,4 +210,4 @@ static void wifi_exit(void)
 }
 
 CONNMAN_PLUGIN_DEFINE(wifi, "WiFi interface plugin", VERSION,
-                                                       wifi_init, wifi_exit)
+               CONNMAN_PLUGIN_PRIORITY_DEFAULT, wifi_init, wifi_exit)