|
@@ -17,6 +17,9 @@
|
|
|
#include <sys/stat.h>
|
|
|
#include <grp.h>
|
|
|
#include <stddef.h>
|
|
|
+#ifdef ANDROID
|
|
|
+#include <cutils/sockets.h>
|
|
|
+#endif /* ANDROID */
|
|
|
|
|
|
#include "utils/common.h"
|
|
|
#include "utils/eloop.h"
|
|
@@ -276,6 +279,13 @@ wpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s)
|
|
|
buf = os_strdup(wpa_s->conf->ctrl_interface);
|
|
|
if (buf == NULL)
|
|
|
goto fail;
|
|
|
+#ifdef ANDROID
|
|
|
+ os_snprintf(addr.sun_path, sizeof(addr.sun_path), "wpa_%s",
|
|
|
+ wpa_s->conf->ctrl_interface);
|
|
|
+ priv->sock = android_get_control_socket(addr.sun_path);
|
|
|
+ if (priv->sock >= 0)
|
|
|
+ goto havesock;
|
|
|
+#endif /* ANDROID */
|
|
|
if (os_strncmp(buf, "DIR=", 4) == 0) {
|
|
|
dir = buf + 4;
|
|
|
gid_str = os_strstr(dir, " GROUP=");
|
|
@@ -398,6 +408,9 @@ wpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s)
|
|
|
}
|
|
|
os_free(fname);
|
|
|
|
|
|
+#ifdef ANDROID
|
|
|
+havesock:
|
|
|
+#endif /* ANDROID */
|
|
|
eloop_register_read_sock(priv->sock, wpa_supplicant_ctrl_iface_receive,
|
|
|
wpa_s, priv);
|
|
|
wpa_msg_register_cb(wpa_supplicant_ctrl_iface_msg_cb);
|
|
@@ -637,6 +650,12 @@ wpa_supplicant_global_ctrl_iface_init(struct wpa_global *global)
|
|
|
if (global->params.ctrl_interface == NULL)
|
|
|
return priv;
|
|
|
|
|
|
+#ifdef ANDROID
|
|
|
+ priv->sock = android_get_control_socket(global->params.ctrl_interface);
|
|
|
+ if (priv->sock >= 0)
|
|
|
+ goto havesock;
|
|
|
+#endif /* ANDROID */
|
|
|
+
|
|
|
wpa_printf(MSG_DEBUG, "Global control interface '%s'",
|
|
|
global->params.ctrl_interface);
|
|
|
|
|
@@ -685,6 +704,9 @@ wpa_supplicant_global_ctrl_iface_init(struct wpa_global *global)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#ifdef ANDROID
|
|
|
+havesock:
|
|
|
+#endif /* ANDROID */
|
|
|
eloop_register_read_sock(priv->sock,
|
|
|
wpa_supplicant_global_ctrl_iface_receive,
|
|
|
global, NULL);
|