summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-01-05 03:17:37 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-01-05 03:17:37 +0100
commit474f7506381da61fd69cd3446951a2bb4bbafeae (patch)
tree2cafd75cb378fa529a8bd7bc70863a42c12b1931 /plugins
parentea1f8757bccdd6c52a9a3000849e1c79e4cb5a9a (diff)
downloadconnman-474f7506381da61fd69cd3446951a2bb4bbafeae.tar.gz
connman-474f7506381da61fd69cd3446951a2bb4bbafeae.tar.bz2
connman-474f7506381da61fd69cd3446951a2bb4bbafeae.zip
Add support for connecting WiFi networks
Diffstat (limited to 'plugins')
-rw-r--r--plugins/supplicant.c29
-rw-r--r--plugins/supplicant.h8
-rw-r--r--plugins/wifi.c23
3 files changed, 46 insertions, 14 deletions
diff --git a/plugins/supplicant.c b/plugins/supplicant.c
index 159288b6..959f61ec 100644
--- a/plugins/supplicant.c
+++ b/plugins/supplicant.c
@@ -23,6 +23,7 @@
#include <config.h>
#endif
+#include <errno.h>
#include <stdlib.h>
#include <string.h>
@@ -1162,15 +1163,24 @@ int supplicant_scan(struct connman_device *device)
return 0;
}
-int __supplicant_connect(struct connman_element *element,
- const unsigned char *ssid, int ssid_len,
- const char *security, const char *passphrase)
+int supplicant_connect(struct connman_network *network)
{
struct supplicant_task *task;
+ const char *security, *passphrase;
+ const void *ssid;
+ unsigned int ssid_len;
+ int index;
+
+ DBG("network %p", network);
+
+ security = connman_network_get_string(network, "WiFi.Security");
+ passphrase = connman_network_get_string(network, "WiFi.Passphrase");
- DBG("element %p", element);
+ ssid = connman_network_get_blob(network, "WiFi.SSID", &ssid_len);
- task = find_task_by_index(element->index);
+ index = connman_network_get_index(network);
+
+ task = find_task_by_index(index);
if (task == NULL)
return -ENODEV;
@@ -1186,13 +1196,16 @@ int __supplicant_connect(struct connman_element *element,
return 0;
}
-int __supplicant_disconnect(struct connman_element *element)
+int supplicant_disconnect(struct connman_network *network)
{
struct supplicant_task *task;
+ int index;
- DBG("element %p", element);
+ DBG("network %p", network);
- task = find_task_by_index(element->index);
+ index = connman_network_get_index(network);
+
+ task = find_task_by_index(index);
if (task == NULL)
return -ENODEV;
diff --git a/plugins/supplicant.h b/plugins/supplicant.h
index ca65f699..fb49722b 100644
--- a/plugins/supplicant.h
+++ b/plugins/supplicant.h
@@ -20,7 +20,7 @@
*/
#include <connman/device.h>
-#include <connman/element.h>
+#include <connman/network.h>
struct supplicant_driver {
const char *name;
@@ -35,7 +35,5 @@ int supplicant_start(struct connman_device *device);
int supplicant_stop(struct connman_device *device);
int supplicant_scan(struct connman_device *device);
-int __supplicant_connect(struct connman_element *element,
- const unsigned char *ssid, int ssid_len,
- const char *security, const char *passphrase);
-int __supplicant_disconnect(struct connman_element *element);
+int supplicant_connect(struct connman_network *network);
+int supplicant_disconnect(struct connman_network *network);
diff --git a/plugins/wifi.c b/plugins/wifi.c
index f44cdd8c..abf15a49 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -23,7 +23,10 @@
#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,29 @@ 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);
+
+ //connman_element_unregister_children((struct connman_element *) 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,7 +123,7 @@ static int wifi_disable(struct connman_device *device)
DBG("device %p", device);
- connman_element_unregister_children((struct connman_element *) device);
+ //connman_element_unregister_children((struct connman_element *) device);
data->connected = FALSE;