summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-01-04 18:18:24 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-01-04 18:18:24 +0100
commit94fca351c2cd0a75ea6b71462a084dc8ffe2e78d (patch)
treee18ef5c26ce50f625ae23ca8ab37f39a9c9c257b /plugins
parent0890f0dcc8c42b4d2de01e42a577fb570b29b6a9 (diff)
downloadconnman-94fca351c2cd0a75ea6b71462a084dc8ffe2e78d.tar.gz
connman-94fca351c2cd0a75ea6b71462a084dc8ffe2e78d.tar.bz2
connman-94fca351c2cd0a75ea6b71462a084dc8ffe2e78d.zip
Add callbacks to supplicant driver
Diffstat (limited to 'plugins')
-rw-r--r--plugins/supplicant.c56
-rw-r--r--plugins/supplicant.h19
-rw-r--r--plugins/wifi.c20
3 files changed, 61 insertions, 34 deletions
diff --git a/plugins/supplicant.c b/plugins/supplicant.c
index a51a5173..7edbb916 100644
--- a/plugins/supplicant.c
+++ b/plugins/supplicant.c
@@ -43,11 +43,48 @@
static GSList *driver_list = NULL;
+static void process_state_change(struct connman_device *device,
+ enum supplicant_state state)
+{
+ GSList *list;
+
+ for (list = driver_list; list; list = list->next) {
+ struct supplicant_driver *driver = list->data;
+
+ if (driver->state_change)
+ driver->state_change(device, state);
+ }
+}
+
+static void process_clear_results(struct connman_device *device)
+{
+ GSList *list;
+
+ for (list = driver_list; list; list = list->next) {
+ struct supplicant_driver *driver = list->data;
+
+ if (driver->clear_results)
+ driver->clear_results(device);
+ }
+}
+
+static void process_scan_result(struct connman_device *device,
+ struct supplicant_network *network)
+{
+ GSList *list;
+
+ for (list = driver_list; list; list = list->next) {
+ struct supplicant_driver *driver = list->data;
+
+ if (driver->scan_result)
+ driver->scan_result(device, network);
+ }
+}
+
struct supplicant_task {
int ifindex;
gchar *ifname;
struct connman_device *device;
- struct supplicant_callback *callback;
gchar *path;
gboolean created;
gchar *network;
@@ -735,8 +772,7 @@ static void properties_reply(DBusPendingCall *call, void *user_data)
dbus_message_iter_next(&dict);
}
- if (task->callback && task->callback->scan_result)
- task->callback->scan_result(task->device, network);
+ process_scan_result(task->device, network);
g_free(network->identifier);
g_free(network->ssid);
@@ -798,8 +834,7 @@ static void scan_results_reply(DBusPendingCall *call, void *user_data)
goto done;
}
- if (task->callback && task->callback->clear_results)
- task->callback->clear_results(task->device);
+ process_clear_results(task->device);
for (i = 0; i < num_results; i++)
get_network_properties(task, results[i]);
@@ -874,8 +909,7 @@ static void state_change(struct supplicant_task *task, DBusMessage *msg)
else if (g_str_equal(state, "DISCONNECTED") == TRUE)
task->state = STATE_DISCONNECTED;
- if (task->callback && task->callback->state_change)
- task->callback->state_change(task->device, task->state);
+ process_state_change(task->device, task->state);
switch (task->state) {
case STATE_COMPLETED:
@@ -921,8 +955,7 @@ static DBusHandlerResult supplicant_filter(DBusConnection *conn,
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
-int __supplicant_start(struct connman_device *device,
- struct supplicant_callback *callback)
+int supplicant_start(struct connman_device *device)
{
struct supplicant_task *task;
int err;
@@ -936,7 +969,6 @@ int __supplicant_start(struct connman_device *device,
task->ifindex = connman_device_get_index(device);
task->ifname = inet_index2name(task->ifindex);
task->device = device;
- task->callback = callback;
if (task->ifname == NULL) {
g_free(task);
@@ -962,7 +994,7 @@ int __supplicant_start(struct connman_device *device,
return 0;
}
-int __supplicant_stop(struct connman_device *device)
+int supplicant_stop(struct connman_device *device)
{
int index = connman_device_get_index(device);
struct supplicant_task *task;
@@ -988,7 +1020,7 @@ int __supplicant_stop(struct connman_device *device)
return 0;
}
-int __supplicant_scan(struct connman_device *device)
+int supplicant_scan(struct connman_device *device)
{
int index = connman_device_get_index(device);
struct supplicant_task *task;
diff --git a/plugins/supplicant.h b/plugins/supplicant.h
index 691b9616..4dc6d7f7 100644
--- a/plugins/supplicant.h
+++ b/plugins/supplicant.h
@@ -52,7 +52,11 @@ struct supplicant_network {
gint32 maxrate;
};
-struct supplicant_callback {
+struct supplicant_driver {
+ const char *name;
+ void (*probe) (void);
+ void (*remove) (void);
+
void (*state_change) (struct connman_device *device,
enum supplicant_state state);
void (*clear_results) (struct connman_device *device);
@@ -60,19 +64,12 @@ struct supplicant_callback {
struct supplicant_network *network);
};
-struct supplicant_driver {
- const char *name;
- void (*probe) (void);
- void (*remove) (void);
-};
-
int supplicant_register(struct supplicant_driver *driver);
void supplicant_unregister(struct supplicant_driver *driver);
-int __supplicant_start(struct connman_device *device,
- struct supplicant_callback *callback);
-int __supplicant_stop(struct connman_device *device);
-int __supplicant_scan(struct connman_device *device);
+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,
diff --git a/plugins/wifi.c b/plugins/wifi.c
index 454c6a0f..6c3efde6 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -171,7 +171,7 @@ static gboolean inactive_scan(gpointer user_data)
DBG("device %p", device);
- __supplicant_scan(device);
+ supplicant_scan(device);
data->inactive_timer = 0;
@@ -397,12 +397,6 @@ done:
g_free(temp);
}
-static struct supplicant_callback wifi_callback = {
- .state_change = state_change,
- .clear_results = clear_results,
- .scan_result = scan_result,
-};
-
static int wifi_probe(struct connman_device *device)
{
struct wifi_data *data;
@@ -438,13 +432,13 @@ static int wifi_enable(struct connman_device *device)
DBG("device %p", device);
- err = __supplicant_start(device, &wifi_callback);
+ err = supplicant_start(device);
if (err < 0)
return err;
connman_device_set_powered(device, TRUE);
- __supplicant_scan(device);
+ supplicant_scan(device);
return 0;
}
@@ -480,7 +474,7 @@ static int wifi_disable(struct connman_device *device)
connman_element_unregister_children((struct connman_element *) device);
- __supplicant_stop(device);
+ supplicant_stop(device);
connman_device_set_powered(device, FALSE);
@@ -491,7 +485,7 @@ static int wifi_scan(struct connman_device *device)
{
DBG("device %p", device);
- __supplicant_scan(device);
+ supplicant_scan(device);
return 0;
}
@@ -525,6 +519,10 @@ static struct supplicant_driver supplicant = {
.name = "wifi",
.probe = wifi_register,
.remove = wifi_unregister,
+
+ .state_change = state_change,
+ .clear_results = clear_results,
+ .scan_result = scan_result,
};
static int wifi_init(void)