From 474f7506381da61fd69cd3446951a2bb4bbafeae Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 5 Jan 2009 03:17:37 +0100 Subject: [PATCH] Add support for connecting WiFi networks --- plugins/supplicant.c | 29 +++++++++++++++++++++-------- plugins/supplicant.h | 8 +++----- plugins/wifi.c | 23 ++++++++++++++++++++++- 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/plugins/supplicant.c b/plugins/supplicant.c index 159288b..959f61e 100644 --- a/plugins/supplicant.c +++ b/plugins/supplicant.c @@ -23,6 +23,7 @@ #include #endif +#include #include #include @@ -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 ca65f69..fb49722 100644 --- a/plugins/supplicant.h +++ b/plugins/supplicant.h @@ -20,7 +20,7 @@ */ #include -#include +#include 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 f44cdd8..abf15a4 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -23,7 +23,10 @@ #include #endif +#include + #include +#include #define CONNMAN_API_SUBJECT_TO_CHANGE #include @@ -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; -- 2.7.4