diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-01-05 03:17:37 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-01-05 03:17:37 +0100 |
commit | 474f7506381da61fd69cd3446951a2bb4bbafeae (patch) | |
tree | 2cafd75cb378fa529a8bd7bc70863a42c12b1931 /plugins | |
parent | ea1f8757bccdd6c52a9a3000849e1c79e4cb5a9a (diff) | |
download | connman-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.c | 29 | ||||
-rw-r--r-- | plugins/supplicant.h | 8 | ||||
-rw-r--r-- | plugins/wifi.c | 23 |
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; |