Get rid of direct hostapd_for_each_interface() calls
authorJouni Malinen <j@w1.fi>
Fri, 25 Dec 2009 18:12:26 +0000 (20:12 +0200)
committerJouni Malinen <j@w1.fi>
Fri, 25 Dec 2009 18:12:26 +0000 (20:12 +0200)
src/ap/*.c must not call functions in hostapd or wpa_supplicant
directories directly, so avoid this by using a callback function
pointer.

hostapd/main.c
src/ap/hostapd.h
src/ap/utils.c
src/ap/wpa_auth_glue.c
wpa_supplicant/ap.c

index 9c93a52..d69e1e6 100644 (file)
@@ -43,9 +43,9 @@ struct hapd_interfaces {
 };
 
 
-int hostapd_for_each_interface(struct hapd_interfaces *interfaces,
-                              int (*cb)(struct hostapd_iface *iface,
-                                        void *ctx), void *ctx)
+static int hostapd_for_each_interface(struct hapd_interfaces *interfaces,
+                                     int (*cb)(struct hostapd_iface *iface,
+                                               void *ctx), void *ctx)
 {
        size_t i;
        int ret;
@@ -190,6 +190,7 @@ static struct hostapd_iface * hostapd_init(const char *config_file)
                goto fail;
        hapd_iface->ctrl_iface_init = hostapd_ctrl_iface_init;
        hapd_iface->ctrl_iface_deinit = hostapd_ctrl_iface_deinit;
+       hapd_iface->for_each_interface = hostapd_for_each_interface;
 
        conf = hostapd_config_read(hapd_iface->config_fname);
        if (conf == NULL)
index 1f753cf..25d3c3e 100644 (file)
@@ -228,6 +228,10 @@ struct hostapd_iface {
 
        int (*ctrl_iface_init)(struct hostapd_data *hapd);
        void (*ctrl_iface_deinit)(struct hostapd_data *hapd);
+
+       int (*for_each_interface)(struct hapd_interfaces *interfaces,
+                                 int (*cb)(struct hostapd_iface *iface,
+                                           void *ctx), void *ctx);
 };
 
 /* hostapd.c */
@@ -242,11 +246,6 @@ void hostapd_interface_deinit(struct hostapd_iface *iface);
 void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
                           int reassoc);
 
-/* main.c */
-int hostapd_for_each_interface(struct hapd_interfaces *interfaces,
-                              int (*cb)(struct hostapd_iface *iface,
-                                        void *ctx), void *ctx);
-
 /* utils.c */
 int hostapd_register_probereq_cb(struct hostapd_data *hapd,
                                 void (*cb)(void *ctx, const u8 *sa,
index 1993488..7ec77ff 100644 (file)
@@ -82,6 +82,7 @@ void hostapd_prune_associations(struct hostapd_data *hapd, const u8 *addr)
        struct prune_data data;
        data.hapd = hapd;
        data.addr = addr;
-       hostapd_for_each_interface(hapd->iface->interfaces,
-                                  prune_associations, &data);
+       if (hapd->iface->for_each_interface)
+               hapd->iface->for_each_interface(hapd->iface->interfaces,
+                                               prune_associations, &data);
 }
index b2da79a..1c7b875 100644 (file)
@@ -281,10 +281,12 @@ static int hostapd_wpa_auth_for_each_auth(
 {
        struct hostapd_data *hapd = ctx;
        struct wpa_auth_iface_iter_data data;
+       if (hapd->iface->for_each_interface == NULL)
+               return -1;
        data.cb = cb;
        data.cb_ctx = cb_ctx;
-       return hostapd_for_each_interface(hapd->iface->interfaces,
-                                         wpa_auth_iface_iter, &data);
+       return hapd->iface->for_each_interface(hapd->iface->interfaces,
+                                              wpa_auth_iface_iter, &data);
 }
 
 
index a393b75..c730127 100644 (file)
 #include "ap.h"
 
 
-struct hapd_interfaces {
-       size_t count;
-       struct hostapd_iface **iface;
-};
-
-
-int hostapd_for_each_interface(struct hapd_interfaces *interfaces,
-                              int (*cb)(struct hostapd_iface *iface,
-                                        void *ctx), void *ctx)
-{
-       /* TODO */
-       return 0;
-}
-
-
 static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s,
                                  struct wpa_ssid *ssid,
                                  struct hostapd_config *conf)